0

我遇到了一些问题,希望您能够澄清。我自学了一个类似于 Mpeg2 的视频编码过程。过程如下:

  1. 将 RGBA 图像拆分为 4 个单独的通道数据存储块。所以一个包含所有 R 值的数组,一个单独的 G 值数组等。

  2. 获取数组并获取一个 8x8 像素数据块,使用离散余弦变换 (DCT) 对其进行变换。

  3. 使用预先计算的量化矩阵量化这个 8x8 块。

  4. 之字形编码量化步骤的输出。所以我应该得到一个连续数字的踪迹。

  5. 运行长度编码 (RLE) 之字形算法的输出。

  6. Huffman 编码 RLE 阶段后的数据。使用预先计算的霍夫曼表中的值替换。

  7. 返回第 2 步并重复,直到所有通道数据都已编码

  8. 返回第 2 步并为每个通道重复

第一个问题是我是否需要将 RGBA 值转换为 YUV+A (YCbCr+A) 值才能使进程正常工作,还是可以继续使用 RGBA?我问,因为 RGBA->YUVA 转换是一个繁重的工作量,我想尽可能避免。

下一个问题。我想知道 RLE 存储应该只运行 0 还是可以扩展到数组中的所有值?请参阅以下示例:

 440000000111 == [2,4][7,0][3,1]   // RLE for all values
 or
 440000000111 == 44[7,0]111        // RLE for 0's only

最后一个问题是关于霍夫曼阶段的单个符号是什么?例如,要替换的符号是 2 或 4 之类的值,还是符号是运行级别对 [2,4]。

感谢您花时间阅读并帮助我。我阅读了许多论文并观看了许多 youtube 视频,这有助于我理解各个算法,但不能帮助我理解它们如何链接在一起以形成代码中的编码过程。

4

2 回答 2

1

(这似乎更像 JPEG 而不是 MPEG-2 - 视频格式更多的是压缩帧之间的差异,而不仅仅是图像压缩)

如果您使用 RGB 而不是 YUV,您可能不会获得相同的压缩率和/或质量,但如果您愿意,您可以这样做。与算法的其余部分相比,色彩空间转换几乎不是繁重的工作量。

通常在这种应用程序中,您会使用零,因为这是您获得大量重复的元素(并且希望在每个块的末尾也有一个可以用单个标记值替换的好数字),而其他系数不是那么重复,但如果你期望其他值的重复,我猜是 YMMV。

是的,您可以将 RLE 对编码为霍夫曼编码中的单个符号。

于 2013-01-18T12:03:30.953 回答
1

1) 是的,您需要转换为 YUV……为了获得更高的压缩比,您需要利用人眼“忽略”显着色彩损失的能力。通常,您将保持 Y 平面的分辨率相同(大概 A 平面也是如此),但将 U 和 V 平面下采样 2x2。例如,如果你在做 640x480,Y 是 640x480,U 和 V 平面是 320x240。此外,您可以为 U/V 平面选择不同的量化。与 DCT 或 DFT 相比,这种转换的成本很小。

2)你不必RLE它,你可以直接霍夫曼编码。

于 2013-01-18T13:28:45.740 回答