JPEG压缩实现问题



我正在尝试实现JPEG压缩(或尽可能接近它),但在实际实现中,我需要澄清一些要点。我将解释我目前所知道的以及我在哪里看到的问题,如果有人能澄清这些问题,那将是非常棒的。

第一步是将图像分割为8x8块。但我不确定实现这一点的最佳方法,例如,考虑到必须对色度进行下采样,然后应用DCT,什么维度的数组最适合用于存储所有这些片段。它是3D阵列(两个维度用于存储图像的2D元素,然后一个维度用于颜色通道),然后以8为一组进行迭代,还是4D阵列(具有用于存储每个8x8组的额外维度),或者完全是另一种方法。

然后,我可能会看到色度下采样的问题,因为一旦色度值的数量减少,阵列的大小就必须改变,然后必须将这些值放入DCT中,DCT不能真正同时获得所有不同大小的色度和发光阵列。

DCT的想法是,它采用8x8组的所有三个颜色通道,然后将三个值转换为一个值,从而节省空间,还是每次只采用一个颜色通道(如果是这样,我真的不明白转换到傅立叶空间如何使压缩更高效)?我还注意到,我得到的DCT值远远超出了0-255的范围,反而要高得多。据我所知,每个8x8块的这些值将被IJG标准量化矩阵除以,然后进行不同的熵编码。

我知道这个问题涉及很多领域,而且很混乱,但如果需要,我可以提供任何额外的信息,任何帮助都将不胜感激。

Peter Symes的《数字视频压缩》有一章是关于JPEG的,是对压缩的一个很好的介绍。

JPEG的参考实现可能是一个良好的开端。

最新更新