基于DCT的视频编码过程

DCT based Video Encoding Process

本文关键字:过程 编码 的视频 DCT 基于      更新时间:2023-10-16

我有一些问题,我希望你能澄清。我自学了一个类似于Mpeg2的视频编码过程。步骤如下:

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

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

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

  4. Zigzag编码量化步骤的输出。所以我应该得到一串连续的数字

  5. 运行长度编码(RLE) zigzag算法的输出

  6. Huffman对RLE阶段后的数据进行编码。

  7. 使用预先计算的霍夫曼表中的值进行替换。
  8. 返回步骤2并重复,直到所有通道数据都被编码

  9. 回到步骤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视频,这有助于我理解各个算法,但不知道它们是如何链接在一起形成编码过程的。

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

如果你在RGB而不是YUV中工作,你可能不会得到相同的压缩比和/或质量,但你可以这样做,如果你想。与算法的其余部分相比,色彩空间转换几乎没有繁重的工作量。

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

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

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

2)你不需要RLE,你可以直接使用Huffman Code