所以我正在尝试编写一个简单的bmp到jpeg图像转换器程序。如您所知,jpeg压缩,DCT,量化和熵编码涉及3个主要步骤。我想将在每个中间阶段计算出的值写入文件。
现在我的问题是,在将每个像素的RGB值转换为YUV格式并将其存储到3个单独的2D数组之后,是否在这些数组中的每个数组上计算了DCT?因此,给我3个不同的阵列应用DCT?如果这是正确的,则下一步将是量化与Y,U和V对应的每个数组。然后,必须将熵编码应用于这些2-D数组中的每个数组。
这3个数组如何组合/写入文件,以使其可读取为.jpeg文件?
最佳答案
首先,我建议您下载jpeg specifications。
您必须分别为每个颜色通道计算DCT:因此,对于YUV颜色空间,您必须为每个Y 8x8块计算一个DCT,为U和V通道计算一个DCT。
大多数情况下,对U和V通道进行二次采样:这意味着每个U和V有2或4个Y块。
应用DCT后,您可以量化每个DCT:不同的通道通常需要不同的量化表(jpeg规范建议使用正确的表)。
然后使用霍夫曼算法对量化结果进行编码:您可以将每个色彩通道以交错方式(1至4个Y块后跟1个U和1 V块)或线性模式(首先是所有Y块)转储到jpeg流中,然后是所有U,然后是V)。
jpeg流可能包含RST标签,在丢失字节的情况下,该标签会重新同步解码。
但是,您确实需要具有jpeg规范才能完成此任务。
关于c++ - DCT的输入值是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13436530/