我遇到了一些问题,希望您能够澄清。我自学了一个类似于 Mpeg2 的视频编码过程。过程如下:
将 RGBA 图像拆分为 4 个单独的通道数据存储块。所以一个包含所有 R 值的数组,一个单独的 G 值数组等。
获取数组并获取一个 8x8 像素数据块,使用离散余弦变换 (DCT) 对其进行变换。
使用预先计算的量化矩阵量化这个 8x8 块。
之字形编码量化步骤的输出。所以我应该得到一个连续数字的踪迹。
运行长度编码 (RLE) 之字形算法的输出。
Huffman 编码 RLE 阶段后的数据。使用预先计算的霍夫曼表中的值替换。
返回第 2 步并重复,直到所有通道数据都已编码
返回第 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 视频,这有助于我理解各个算法,但不能帮助我理解它们如何链接在一起以形成代码中的编码过程。