【问题标题】:where is the DCT matrix in Libjpeg?Libjpeg 中的 DCT 矩阵在哪里?
【发布时间】:2015-02-12 19:07:14
【问题描述】:

在 libjpeg 中我无法找到 8x8 DCT 矩阵?如果我没记错的话,这个矩阵对于 8x8 块来说始终是一个常数。它必须在第一行包含 1/sqrt(8) 但这个矩阵在哪里?

【问题讨论】:

    标签: image-processing jpeg libjpeg dct


    【解决方案1】:

    在实际的 JPEG 实现中,DCT 矩阵通常分解为其高斯范式。这给出了一系列矩阵乘法。但是,在正常形式中,这些只涉及对角线和与对角线相邻的值的操作。归一化矩阵中的大多数值都为零,因此您可以省略它们。

    这将 DCT 转换为一系列 8 个并行操作。

    本书描述了矩阵运算的几种转换方式:

    http://www.amazon.com/Compressed-Image-File-Formats-JPEG/dp/0201604434/ref=pd_bxgy_b_img_y

    这本书描述了一种张量方法,理论上更有效,但在实现中往往不是这样

    http://www.amazon.com/JPEG-Compression-Standard-Multimedia-Standards/dp/0442012721/ref=pd_bxgy_b_img_y

    【讨论】:

    • 您好,我有一个提供矩阵乘法等专用 DSP 功能的 c 库。我可以编写自己的矩阵并在那个地方使用它吗?
    • 理论上你可以,但 Libjpeg 代码往往很复杂。你可能会遇到问题。另外,libJpeg 可能会结合量化和 DCT 过程。问题是矩阵乘法不是进行这些变换的一种非常有效的方法(除非您考虑并省略乘以零操作)。
    【解决方案2】:

    它没有。或者,也许它在一个鬼鬼祟祟的地方,但这并不重要。 DCT 的真正实现不是这样工作的,它们是非常专业的代码片段,所有常量都硬编码在其中,它们看起来一点也不像矩阵乘法。从理论的角度来看,将变换视为矩阵乘法有时很有用,但它可以更有效地实现。

    对于 libjpeg 中的 DCT,请参阅文件 jfdctflt.c(或其朋友之一)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2014-05-13
      相关资源
      最近更新 更多