代码之家  ›  专栏  ›  技术社区  ›  lulZghost

把代码从DCT变换成逆离散余弦变换?

  •  0
  • lulZghost  · 技术社区  · 6 年前

    对于一个项目,我必须演示jpeg压缩,因此使用dctii和idct进行转换。我不知道如何实现这个公式。但我找到了一个网站,提供Java代码和在线IDE进行测试。 https://ide.geeksforgeeks.org/FnC3bRJEAr 在这里你可以看到代码。

    formula for DCT formula for IDCT

    (来自维基百科/jpeg的公式)

    那么,必须对代码做什么更改呢?

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Alain Merigot    6 年前

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

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

    sum = sum + ck*cl*dct1;
    

    其中,ck和cl按第24-34行计算,但k和l

    并在第49行中抑制ci*cj

    顺便说一下,这个Java代码是非常低效的。预先计算math.sqrt(2)、math.sqrt(n)并将cosine放到一个表中,它至少快3倍。

        2
  •  0
  •   user3344003    6 年前

    你的求和是做矩阵乘法。将8x8数据矩阵乘以8x8 DCT矩阵。

    DCT矩阵是正交的,所以它的逆矩阵是转置矩阵。

    因此,您应该能够通过交换u和v来反转。