将代码从DCT更改为离散余弦逆变换?

时间:2019-01-21 17:53:33

标签: java image compression jpeg dct

对于一个项目,我必须演示JPEG压缩以及DCTII和IDCT的转换。我不知道如何执行此公式。但是我找到了一个提供Java代码和在线IDE进行测试的网站。 https://ide.geeksforgeeks.org/FnC3bRJEAr在这里您可以看到代码。

formula for DCT formula for IDCT

(来自Wikipedia / JPEG的公式)

那么,必须对代码进行哪些更改?

我尝试切换公式中的for循环和变量,但是我得到的值肯定是错误的,其他尝试会导致错误消息。

2 个答案:

答案 0 :(得分:1)

DCT和IDCT之间的唯一区别是考虑了系数。

您应将代码中的第46行替换为

sum = sum + ck*cl*dct1;

其中ck和cl的计算方法如第24-34行,但对于k和l

并在第49行中抑制ci * cj

顺便说一句,此Java代码效率极低。预计算Math.sqrt(2),Math.sqrt(n)并将余弦放在表中,它将至少快3倍。

答案 1 :(得分:0)

您的求和运算正在做矩阵乘法。您将8x8数据矩阵与8x8 DCT矩阵相乘。

DCT矩阵是正交的,因此它的逆就是它的转置。

因此,您应该可以通过交换u和v来求逆。