我正在尝试实现JPEG压缩(或尽可能接近它),但有些要点我需要明确实际实现。我将解释我目前所知道的以及我在哪里看到的问题,如果有人能够清除它们那就太棒了。
第一步是将图像分割成8x8块。但我不知道最好的方法是这样做的,例如,考虑到必须对色度进行色度采样然后应用DCT,哪种维数阵列最适合用于存储所有这些段。它是3D阵列(存储图像的2D元素的两个维度,然后是颜色通道的一个维度),然后以8或4D阵列的组(具有用于存储每个8x8组的额外维度)或其他方法进行迭代完全。
然后我可能会看到色度下采样的问题,因为一旦色度值的数量减少,阵列的大小就必须改变大小,然后必须将这些大小放入DCT中所有不同大小的阵列同时用于色度和发光。
同样是DCT的想法是它需要8x8组的所有三个颜色通道,然后将这三个值转换为一个值,从而节省空间,或者每次采用一个颜色通道(如果是这样,我不知道)真的明白转换到傅里叶空间如何使压缩更有效率?另外我注意到我为DCT获得的值远远超出0-255的范围,而是更高。据我所知,每个8x8块的这些值将被IJG标准量化矩阵除以不同的熵编码。
我意识到这个问题涉及很多方面并且非常混乱,但如果需要,我可以提供任何其他信息,我们将非常感谢任何帮助。
答案 0 :(得分:2)
JPEG的reference implementation可能是一个好的开始。