2
我想用python实现JPEG压缩。当我尝试应用DCT,量化,IDCT过程中的tiff图像时,我发现scipy.fftpack.dct/idct有些奇怪。在scipy为什么不idct(dct(a))等于一个?
由于存在SciPy的包内仅1D DCT/IDCT,我这样做用于2D DCT
import numpy as np
from scipy.fftpack import dct, idct
def dct2(block):
return dct(dct(block.T).T)
def idct2(block):
return idct(idct(block.T).T)
我测试使用一个简单的3×3矩阵的2D DCT/IDCT。我期待在这个测试案例中获得一个True矩阵。
a = np.random.randint(0,255,9).reshape(3,3)
print a == idct2(dct2(a))
然而事实证明idct2后(DCT2(a))的结果被一个常数因子缩放与原始的矩阵进行比较。
我想问一下,是否有一种方法来实现一套2D dct/idct,这样在idct(dct(a))操作后,我可以得到与输入相同的输出。
[Scipy的fftpack dct和idct]的可能重复(http://stackoverflow.com/questions/14325795/scipys-fftpack-dct-and-idct) – Reti43
一些琐事。而不是每次调换数组,您可以执行'def dct2(a):dct(dct(a,axis = 0),axis = 1)'。和'dct(...,type = 3)== idct(...)'。 – Reti43