【问题标题】:What are the input values for DCT?DCT 的输入值是多少?
【发布时间】:2012-11-06 08:31:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ compression jpeg dct


    【解决方案1】:

    首先我建议你下载jpeg specifications

    您必须为每个颜色通道单独计算 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 块,然后是所有 U 块,然后是 V)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 2014-06-28
      • 2018-09-22
      • 1970-01-01
      • 2021-10-24
      • 2011-01-24
      • 2013-04-17
      相关资源
      最近更新 更多