相关疑难解决方法(0)

在scipy为什么不idct(dct(a))等于a?

我正在尝试使用python实现JPEG压缩.当我尝试对tiff图像应用DCT,量化,IDCT过程时,我发现scipy.fftpack.dct/idct有些奇怪.

由于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)
Run Code Online (Sandbox Code Playgroud)

我使用简单的3x3矩阵测试了2D dct/idct.我希望在这个测试用例中得到一个True矩阵.

a = np.random.randint(0,255,9).reshape(3,3)
print a == idct2(dct2(a))
Run Code Online (Sandbox Code Playgroud)

然而事实证明,在idct2(dct2(a))之后,结果通过与原始矩阵相比的常数因子来缩放.

我想问一下是否有办法实现一组2D dct/idct,这样在idct(dct(a))操作之后我可以获得与输入相同的输出.

python dct scipy

6
推荐指数
1
解决办法
3918
查看次数

标签 统计

dct ×1

python ×1

scipy ×1