美文网首页
视频解码一览

视频解码一览

作者: star_星星之火 | 来源:发表于2020-05-19 23:21 被阅读0次

原文出处:https://www.vcodex.com/video-coding-walkthrough/

这里只是简单的翻译了一下,搬运请注明。

本示例说明如何对视频帧进行编码(压缩)和解码(解压缩)。该帧使用简单的运动补偿变换编码器进行处理,类似于早期的MPEG编解码器。但是,基本原理适用于更复杂的编解码器,例如H.264,VP8等。

原始帧取自CIF视频序列,这意味着图1所示的亮度或亮度分量宽352个样本,高288个样本。未显示的红色/蓝色色度分量均为176x144样本。(其实就是4:2:0的抽样,下图未展示色度分量而已)

图2示出了视频序列中的重构的前一帧。已对其进行了编码和解码(=重构),可以看到一些失真。图1和图2之间的差异没有运动补偿,如图3所示。显然,图3中仍然存在大量能量,尤其是在运动区域附近。

图 1 - 输入帧 图 2 - 重建后的参考帧 图 3 - 残差: 没有运动补偿

运动估计以16x16的块大小和半像素精度执行,为清晰起见,将图4所示的向量集叠加在当前帧上。许多向量为零,并显示为点,这意味着该宏块的最佳匹配在参考帧中的相同位置。在移动区域周围,向量指向块从其移动的方向。站在图片左侧的人正在向左侧行走;因此向量指向右边,即他来自哪里。某些矢量似乎不对应于“真实”运动,例如桌子上的那些,但仅表示最佳匹配不在参考系中的同一位置。像这样的“嘈杂”矢量经常出现在图片的参考帧中没有清晰对象特征的区域中。

图 4 - 16x16运动矢量叠加在帧上

图5示出了运动补偿的参考帧,即,每个块根据运动矢量移位的参考帧。行走的人已向左移动,以为当前帧中的同一人提供更好的匹配,而最左边的人的手已向下移动,以提供更好的匹配。从当前帧中减去经过运动补偿的参考帧,即可得到经过运动补偿的残差(图6)。与图3相比,能量明显减少了,特别是在运动区域附近。

图 5 - 运动补偿的参考帧 图 6 - 运动补偿的残差帧

图7显示了原始帧的宏块,取自右图的头部。图8是运动补偿后相同宏块的亮度分量。这称为残差。

图 7 - 原始宏块: 亮度 图 8 - 残差宏块: 亮度

使用离散余弦变换(DCT)对残差宏块内的每个块进行转换。将二维DCT应用于亮度样本的右上8x8块(表1)会产生表2中列出的DCT系数。每个系数的大小如图9所示。请注意,较大的系数聚集在左上角或直流系数。

图 9 - DCT 系数幅度: 右上 8x8 块 表 1 - 残差亮度样本: 右上 8x8 块 表 2 - DCT 系数

使用前向量化器

Qcoeff = round(coeff/Qstep)

其中Qstep是量化器步长,在本示例中Qstep = 12。量化器的输出如表3所示。小数值系数在量化块中变为零,非零输出聚集在左上角(DC)系数周围。

表 3 - 量化系数

从左上角开始,在锯齿形扫描(从左上角开始的Z字形扫描)中对量化块进行重新排序,以产生以下系数列表:

-1、2、1,-1,-1、2、0,-1、1,-1、2,-1,-1、0、0,-1、0、0、0,-1,- 1,0,0,0,0,0,1,0,…(此后的所有零)

处理此数组以产生一系列(运行,水平)对:

(0,-1)(0,2)(0,1)(0,-1)(0,-1)(0,2)(1,-1)(0,1)(0,-1) (0,2)(0,-1)(0,-1)(2,-1)(3,-1)(0,-1)(5,1)(EOB)

每对中的第一个数字表示前面的零的数量,第二个数字表示非零的“级别”。 “ EOB”(块末)表示其余系数为零。

每个(行程,级别)对均被编码为可变长度代码(VLC)。使用MPEG-4 Visual中的可变长度代码表,生成了表4中所示的VLC。

表 4 - 变长编码示例

最终的VLC发出LAST = 1信号,表明这是该块的结尾。该宏块的运动矢量为(0,1),即矢量指向下方。运动矢量X和Y分量分别(差分)编码为(1)和(0010)。

宏块作为一系列VLC传输,包括每个8x8块的宏块头,编码运动矢量和变换系数。

在解码器处,对VLC序列进行解码,以提取每个块的标题参数,编码的运动矢量和(行程,水平)对。通过在每个(级别)之前插入(运行)零来重构64个元素的系数数组。然后对阵列进行排序,以产生与表3相同的8x8块。量化系数使用以下方法重新缩放:

Rcoeff = Qstep.Qcoeff

重新定标或逆量化会产生表5所示的系数块。由于量化过程,该块与原始DCT系数(表2)明显不同。应用逆DCT来创建解码后的残差块(表6),该块与原始残差块(表1)相似但不相同。比较图10中的原始残差块和解码残差块,很明显,由于高频DCT系数通过量化的损失,解码块的高频变化较小。

表 5 - 调整后的系数 表 6 - 解码后的残差亮度样本 图 10 - 原始和解码后的残差块 

解码器重新创建原始运动矢量(0,1)。解码器使用此向量以及它自己的先前解码帧的副本(图2)来重构宏块。完整的解码帧如图11所示。由于进行了量化处理,因此引入了一些失真,例如,在诸如面部和板上书写等详细区域周围,并且沿8x8块边界存在一些明显的边缘。完整的序列被压缩了大约300倍,即编码序列所占的大小小于未压缩视频的大小的1/300。以相对较差的图像质量为代价实现了显着的压缩。

图 11 - 解码后的帧

相关文章

网友评论

      本文标题:视频解码一览

      本文链接:https://www.haomeiwen.com/subject/ujuebxtx.html