首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么idct(dct(a))不等于a?

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

Stack Overflow用户
提问于 2016-01-20 02:37:38
回答 1查看 6.5K关注 0票数 9

我正在尝试使用python实现JPEG压缩。当我尝试将DCT、量子化、IDCT处理应用于tiff图像时,我发现了一些奇怪的东西,比如spy.fftpac.dct/idct。

由于在for包中只有一维dct/idct,所以我做的是2D dct。

代码语言:javascript
运行
复制
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)

我使用一个简单的3x3矩阵测试了2D dct/idct。我本来希望用这个测试用例得到一个真实的矩阵。

代码语言:javascript
运行
复制
a = np.random.randint(0,255,9).reshape(3,3)
print a == idct2(dct2(a))

然而,结果表明,在idct2(dct2(a))之后,与原始的a矩阵相比,用常数因子对结果进行了缩放。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-15 21:18:53

您需要将dct2idct2的缩放设置为idct2

代码语言:javascript
运行
复制
def dct2 (block):
  return dct(dct(block.T, norm = 'ortho').T, norm = 'ortho')

此外,不能期望值完全相同,但在一定的误差范围内几乎相同:

代码语言:javascript
运行
复制
np.allclose (a, idct2(dct2(a)))
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34890585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档