视频编码器一般是利用像素间的空间相关性和帧间的时间相关性,采用预测编码和变换编码技术来减少视频信号的时空相关性,达到降低视频编码码率、实现数据压缩的目的。尽管目前有多种视频编码标准,但作为一种应用非常广泛的视频编码标准,国际组织“联合视频组”(Joint Video Team,JVT)发布的H.264/AVC及H.265 视频编码标准改进了各种编码工具,提高了网络适应能力和编码鲁棒性,提供了极高的压缩效率。尤其是H.265 标准,由于采用了更新的编码工具,其数据压缩倍率较H.264 提高30% ~50%,并能很好地支持高清和超高清视频图像(4K)的编码[1]。虽然还有其他的视频编码标准,如MPEG-4 和VP9 等,但考虑到H.264/AVC的应用非常广泛,其技术极具代表性,本书以H.264/AVC为视频编码标准,研究视频传输技术。图2-1 为H.264/AVC的编码原理图[2]。
图2-1 H.264/AVC编码原理
从图2-1 可看出,为提高数据压缩效率、降低失真,H.264/AVC在采用预测及变换编码的基础上,进一步利用熵编码提高编码器性能。为便于网络传输,编码器最后输出的是便于网络协议进行封装的网络抽象层单元(Network Abstract Layer Unit,NALU),以提高视频数据的容错能力。
相应的解码过程如图2-2 所示。
图2-2 H.264/AVC解码原理
首先,在H.264/AVC的帧内预测方式中,为4 ×4 亮度子块提供了9 种预测模式,16 ×16 亮度块有4 种预测模式。与其他视频编码标准(如MPEG-4、H.263等)相比,其帧间预测的优点在于块尺寸范围更广、亚像素运动矢量的使用、多参考帧的运用等方面。其在帧间预测中采用树状结构运动补偿,各个16 ×16 的宏块和8 ×8 的子宏块都有4 种分割方式,并采用了亮度1/4 像素精度与色度1/8像素精度模式,以有效地消除帧间时间和空间冗余,提高编码效率。
其次,H.264/AVC对预测残差以4 ×4 块为单位进行离散余弦变换(Discrete Cosine Transform,DCT),将能量集中至变换域的少数系数项上,即变换后的低频部分,以进一步消除视频数据中的空间冗余。一维N点DCT的原理可表示为[3]
其中,xn 为输入时域序列中的第n 项,yk是输出频域序列中的第k项,Ck定义如下:
相应的二维N×N的DCT按下式进行:
(www.xing528.com)
其中,Xij代表视频帧的宏块X中的第i行第j列子宏块的残差值,Ymn是变换结果矩阵Y相应频率点上的DCT系数。为避免变换过程中的浮点运算带来的精度下降、失真增大的问题,H.264/AVC最终采用了如下形式的整数离散余弦变换:
其中,变换矩阵D为
此外,对色度块或16 ×16 的亮度块,需抽取出各个4 ×4 子块的直流系数进行Hadamard 变换,一般是采用4 阶和8 阶的Hadamard 变换,以提高压缩性能。
接下来,为在不降低视频播放主观质量的前提下减少编码长度,提高数据压缩倍率,编码器将适当丢弃一定的高频细节信息。此外,H.264/AVC采用标量量化技术对矩阵Y中的转换系数进行量化,如下式所示:
其中,Yij代表矩阵Y中的转换系数,Zij表示输出的量化系数,Qstep表示量化步长。H.264/AVC中量化参数取1,2,…,52,这意味着量化参数每增加6,则量化步长Qstep增加一倍; Qstep每增加12%,输出的编码码率减少约12%[4]。
预测残差经过变换、量化操作后,编码器将对残差系数进行Zig-Zag之字形重排序。然后采用熵编码进一步减少数据中的统计冗余。H.264 标准中常用的熵编码方法包括基于上下文自适应可变长编码(Context based Adaptive Variable Length Coding,CAVLC)和基于上下文的自适应二进制算术编码(Context based Adaptive Binary Arithmetic Coding,CABAC)。CAVLC针对4 ×4 的块进行编码,并按16 ×16 大小的块输出码流。编码过程包括Zig-Zag排序、参数计算、码表查询和按位写码流等四个部分[5]。图2-3 显示了CAVLC的编码流程。
图2-3 CAVLC编码流程
由于包含了多个基于不同概率模型的码表,CAVLC能计算出与当前编码数据最相符的码表,压缩比率较高,有效地提高了熵编码的效率。相比CAVLC编码算法,CABAC能够使用非整数位码字对符号进行处理,并可根据当前编码内容及先前已编码好的内容,动态选择概率模型来进行编码。此外,CABAC可以实时更新相对应的概率模型,并采用了量化查表、逻辑运算、移位等方法,显著降低了运算的复杂度,提高了编码算法的运算速度。因此,残差数据经CABAC编码后,输出的码字所包含的信息量能够逼近符号的熵率。但CABAC在计算复杂度方面比CAVLC高,这对熵编码的效率产生了一定的负面影响[6]。
最后,H.264/AVC还对指定的4 ×4 宏块引入了环路滤波,以消除数据中的方块效应。本质上,该效应是由量化操作导致的,无法完全消除。总的来说,环路滤波不但增强了预测效果与视频播放的主观质量,而且有效降低了解码器的复杂度。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。