3

所以我正在尝试编写一个简单的 bmp to jpeg 图像转换器程序。如您所知,jpeg 压缩、DCT、量化和熵编码涉及 3 个主要步骤。我想将在每个中间阶段计算的值写入文件。

现在我的问题是,在我将每个像素的 RGB 值转换为 YUV 格式并将其存储到 3 个单独的二维数组中之后,是否在每个数组上计算 DCT?因此给了我 3 个不同的阵列并应用了 DCT?如果这是正确的,那么下一步就是量化对应于 Y、U 和 V 的每个数组。然后必须对这些二维数组中的每一个应用熵编码。

这 3 个数组如何组合/写入文件,以便它们可以作为 .jpeg 文件读取?

4

1 回答 1

3

首先我建议你下载jpeg 规范

您必须为每个颜色通道单独计算 DCT:因此对于 YUV 颜色空间,您必须为每个 Y 8x8 块计算一个 DCT,一个用于 U 通道,一个用于 V 通道。

大多数情况下,U 和 V 通道被二次采样:这意味着每个 U 和 V 有 2 或 4 个 Y 块。

应用 DCT 后,您可以对每个 DCT 进行量化:不同的通道通常需要不同的量化表(jpeg 规范建议使用正确的表)。

然后使用 Huffman 算法对量化结果进行编码:您可以以交错方式(1 到 4 个 Y 块后跟 1 个 U 和 1 个 V 块)或线性模式(首先是所有 Y 块)将每个颜色通道转储到 jpeg 流,然后是所有的 U,然后是 V)。

jpeg 流可能包含 RST 标签,这些标签在丢失字节的情况下重新同步解码。

但是您确实需要 jpeg 规范才能完成此任务。

于 2012-11-18T01:37:58.260 回答