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