OpenCV 和 Scipy.fftpack.dctn 的 DCT 输出不同?

Ami*_*ish 2 python opencv dct scipy

我正在计算尺寸为 32x32 的灰度图像的 DCT

  • 使用 OpenCV
def _dct(image):
    result = cv2.dct(np.float32(image)/255.0)
    return (result * 255.0)
Run Code Online (Sandbox Code Playgroud)
  • 使用 Scipy.fftpack.dctn
dctn(image)
Run Code Online (Sandbox Code Playgroud)

首先使用cv2.dct()然后使用scipy.fftpack.dctn()输出两个函数 输出

Ami*_*ish 5

此处列出了此行为的原因 https://docs.scipy.org/doc/scipy/reference/ generated/scipy.fftpack.dct.html

答案:dctn(图像,范数=“正交”)

原因:在范数 =“正交”的情况下,所得 DCT 乘以缩放因子 f,其结果与使用 OpenCV 的 _dct 给出的输出相同。

f = sqrt(1/4N) when k = 0 
    sqrt(1/2N) otherwise 
Run Code Online (Sandbox Code Playgroud)