gpt4 book ai didi

c++ - DCT 的输入值是多少?

转载 作者:太空狗 更新时间:2023-10-29 21:25:46 27 4
gpt4 key购买 nike

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

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

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

最佳答案

首先我建议你下载 jpeg specifications .

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

大多数时候 U 和 V channel 被二次采样:这意味着每个 U 和 V 有 2 或 4 个 Y block 。

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

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

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

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

关于c++ - DCT 的输入值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com