Libjpeg 中的 DCT 矩阵在哪里?

where is the DCT matrix in Libjpeg?

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

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

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

在实际的 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