对于一个项目,我必须演示JPEG压缩以及DCTII和IDCT的转换。我不知道如何执行此公式。但是我找到了一个提供Java代码和在线IDE进行测试的网站。 https://ide.geeksforgeeks.org/FnC3bRJEAr在这里您可以看到代码。
(来自Wikipedia / JPEG的公式)
那么,必须对代码进行哪些更改?
我尝试切换公式中的for循环和变量,但是我得到的值肯定是错误的,其他尝试会导致错误消息。
答案 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来求逆。