视频编码标准H.264的核心技术分析
扫描二维码
随时随地手机看文章
标签:熵编码 H.264
H.264/AVC建议是目前最新的视频压缩标准。本文首先简要介绍图像通信中,视频编码标准H.261和H.263建议的基本原理和主要特点。
然后详细分析研究了H.264建议中的关键技术,包括帧内帧间预测编码、去块效应滤波、可变块大小、多帧和亚像素运动估计、整数DCT变换以及新的熵编码等新技术。
前言
图像通信是近年来取得长足发展的现代通信技术,图像压缩的进步则是通信发展中的重要组成部分。国际标准建议H.261的问世,是对图像编码近40年研究成果的总结,解决了可视技术在通信中的应用这一长期困扰人们的问题,覆盖了整个窄带ISDN上视听业务的图像编码,极大地推动了会议电视、电视电话等图像通讯方式的国际化和产业化。随后,ITU在H.261建议的基础上着手极低码率图像压缩的标准,制定了H.263建议,以及最新的H.264/AVC。本文首先对H.261和H.263建议的基本原理进行阐述,然后对新标准H.264/AVC中的新技术进行说明,最后再对H.26x系列标准进行总结。
1 H.261建议的基本原理
每一个图像压缩标准的制定,都针对它最适合的应用目标。H.261是最早定义的视频编码标准。它首次使用了运动补偿预测编码与DCT变换相结合的方法,其视频编码信号的传输速率从64kbps到1.92Mbps,故为p×64K视频编码器(p取值在1~31之间)。H.261主要应用于ISDN网上的视频会议系统,定位在电路交换网络系统。H.261编码器的原理如图1所示。
该建议主要采用CIF图像分辨率格式和QCIF分辨率格式, 以解决不同制式通信间的兼容问题。对于每一个帧间编码的宏块,H.261采用运动补偿的帧间预测算法,消除电视图像时间域上的相关性;对预测误差进行DCT变换以消除图像空间域上的相关性;然后自适应量化DCT系数,以充分利用人的视觉特性;接着进行熵编码,以实现统计匹配编码;最后采用输出缓冲存储器,以平滑数码流,达到输出数码率保持恒定的目的。
该建议的图像帧编码模式包括I,P,B三类。I帧,采用帧内编码方式;P帧,采用帧间编码方式,由I帧或前面的P帧进行运动补偿,再对误差估计进行编码;B帧为双向内插帧不编码传输,而由I帧和P帧或者P帧与PP帧插值重建。H.261不支持双向运动预测以及GOP,每一个帧间编码帧是以它的前一个已编码帧为参考帧。
H.261标准的编码数据结构从高层到底层定义了四个层次,即帧层、片层、宏块层和块层。H.261的运动估值补偿是以宏块为单位进行的。对某宏块是选择帧间还是帧内编码方式,首先需要判断。若它与匹配宏块相关性强,则可采用帧间编码方式,反之,则采用帧内编码方式。
2 H.263建议的基本原理
H.263标准是在H.261标准的基础上建议的。它在低码率条件下,能够在不增加太多复杂度的情况下,获得更高的图像质量。原则上它只需要一半的带宽就可取得与H.261同样的视频质量。目前,H.263标准已经被各种可视电话终端协议广泛采用。
H.263标准基本模式编码器的结构框图与H.261标准相似。同样,采用运动补偿预测减少图像的时间域冗余度;对运动补偿预测的残差场进行离散余弦变换(DCT)编码;利用变长编码(VCL)对量化的DCT系数、运动矢量以及附加信息进行熵编码。
H.263在H.261建议的基础上作了一定的改进。图像尺寸采用QCIF格式,引入了sub-CIF格式,也允许使用CIF格式。采用8×8的DCT变换,宏块统一使用同样的量化步长进行量化,可以是一个宏块使用一个运动矢量,也可以是宏块的每个子块各使用一个运动矢量,因而,具有块运动补偿能力,改善了帧间预测。运动矢量的x向和y向都支持半像素精度,运动估计的搜索窗大小被限制为[-16, +15.5],运动矢量进行差分预测编码传输。编码方式采用二维预测与VLC相结合的编码;类似MPEG-1标准,将所有的图像分为P帧和BP帧。
H.263建议为保证在极低码率条件下获得较好的图像质量,在H.261混合编码的基础上,还采用了无限制的运动矢量模式、语法基算术编码模式、高级预测模式以及PB-帧模式等编码技术。在无限制的运动矢量模式中取消了作为基准的像素必须在编码图像区域内的限制。在高级预测模式中使用了重迭块运动补偿,而且还允许运动矢量穿过运动边界。在PB-帧模式中,B帧通过前一译码P帧和当前的一个译码P帧进行双向预测重建,这样就提高了帧速率但并未明显增加比特数。以上三种方式主要是为了改善帧间预测。基于语法算术编码方式的采用是为了进一步降低传输的比特率。在这种方式中,所有的变长码的编译码运算都用算术编译的运算来代替。提供这些高级编码模式,使得应用者可以在压缩性能和复杂度之间进行均衡和取舍。
3 H.264标准的核心技术及其特点
H.264/AVC是ITU-T和ISO/IEC联合制定的最新编码标准,它最先由ITU-T的VCEG于1997年提出,目标是提出一种更高性能(相对于当时的H.263)的视频编码标准。
与先前的一些编码标准相比,H.264标准继承了H.263和MPEG1/2/4视频标准协议的优点,但在结构上并没有变化,只是在各个主要的功能模块内部使用了一些先进的技术,提高了编码效率。其主要表现在:编码不再是基于8×8的块进行,而是在4×4大小的快上,进行残差的变换编码。所采用的变换编码方式也不再是DCT变换,而是一种整数变换编码。采用了编码效率更高的上下文自适应二进制算术编码(CABAC),同时与之相应的量化过程也有区别。H.264标准具有算法简单易于实现、运算精度高且不溢出、运算速度快、占用内存小、消弱块效应等优点,是一种更为实用有效的图像编码标准。
下面介绍H.264/AVC标准在先前标准之上的新技术。H.264 标准仍采用图像预测和变换编码相结合的编码结构,其编码器的基本结构如图2所示:
编码器的工作过程可根据数据流分为前向通道和重建通道。输入帧Fn的编码,是对原始图像16×16像素的宏块进行编码。宏块编码分为帧内编码和帧间编码。在任何情况下,预测宏块P都由重建帧获得。在帧内编码模式中,P由当前帧中的已编码宏块经解码、重构预测获得,如上图中的uF’n。在帧间编码模式下,P由一个或多个参考帧经运动补偿预测获得,如F’n-1。以预测宏块P与当前宏块Fn的差值作为残差宏块Dn,经变换、量化后得到一串变换参数X。参数X需要进行两方面的处理,一是重排序和熵变换处理,整个过程没有反馈分量,故称为前向通道;二是反量化和逆变换处理,产生宏块D’n,然后与宏块P相加得到重构宏块uF’n,再经过一系列处理得到重建的参考帧F’n,用于下一帧的运动估计,因此称为重建通道。
3.1 帧内预测编码模式
在视频编码中,通常的方法是把整幅图像分为若干宏块,然后对每一个宏块进行编码。在编码时采用Intra或Inter两种模式。在Intra模式中通常直接对宏块进行DCT变换,对变换系数进行熵编码。这样做在一定程度上消除了帧内的空间冗余度,但是由于DCT只是利用了宏块内部像素之间的相关性,而没有考虑相邻宏块间的相关性。H.264引入了Intra预测的方法,利用相邻宏块的相关性对待编码的宏块进行预测,对预测残差进行变换编码,以消除空间冗余。值得注意的是,以前的标准是在变换域中进行预测,而H.264是直接在空间域中进行预测。
3.2 帧间预测编码模式
H.264在运动估计中采了许多新技术,主要包括可变块大小、多帧运动估计、亚像素精度的运动估计以及去块效应滤波等。
⑴ 去块效应滤波
它的作用就是用来消除解码图像中的块效应。块效应产生的原因是各个宏块分别进行量化,这样在相邻宏块的交界处,因量化步长不同而导致原本很接近的像素值重构后产生了较大的差异,形成明显的块边界。去块效应滤波是在4×4的块边界上滤波,使块边界趋于平滑。
⑵ 可变块大小块大小对运动估计的效果是有影响的。将宏块分割成不同尺寸的运动补偿子块称作树状结构运动补偿。宏块的分割和子宏块的分割各包括四种类型,如图3所示。较小的块可以使运动估计更精确,产生较小的运动残差,降低码率。在H.264建议的不同大小的块选择中,可以看出,一个宏块最多可以携带16个不同的运动矢量。配合多帧运动估计,同一宏块中的不同块还可以使用不同的参考帧来进行预测。
图3 运动补偿的宏块分割
顶端:宏块的分割
底端:宏块的子分割
⑶ 多帧运动估计
与以前视频压缩标准中使用的单帧运动估计技术相比,H.264使用的多帧运动估计具有更高的效率,更强的差错稳健性。所谓多帧运动估计是指使用一个或多个参考帧来估计运动矢量,可以防止因某个帧出现错误而影响到后面的帧。但是,这种估计需要更大的内存,更高的运算复杂度。
⑷亚像素精度的运动估计
在H.264中,运动估计的精度由H.263中的半像素提高到像素,并且把像素作为可选项。与半像素精度的运动估计一样, 像素精度的运动估计使用内插得到半像素和像素位置的点。
在H.264的帧间预测编码中,仍可以继续采用三步搜索算法找出与当前宏块最匹配的块。在块匹配中,块的位移与块的中心或块中任何一点的位移是等价的。因此,块的位移可以理解为中心点的位移。在三步算法中,搜索范围为 7,即在上一帧以当前子块为原点,将当前子块在其上下左右距离为7的范围内按一定规则移动,每移动到一个位置,取出同样大小的子块与当前子块进行匹配计算。具体分为以下三步:
①以当前子块为中心,以4为步幅,将图4中标出的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
②以①中求出的最佳子块为中心,例如,x=4,y=0,以2为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置。
③以②中求出的最佳子块为中心,例如,x=4,y=0,以1为步幅,将图中的9个位置为中心的子块与当前子块进行匹配,求出最佳匹配的子块中心位置,它与当前子块中心的位置偏移量即为估计的位移量。
3.3 整数DCT变换
H.264标准中使用4×4的整数DCT变换作为残差宏块的基本变换,这种变换的对象是经过运动补偿预测或者帧内预测后的包含残差数据的4×4块。这类变换是基于DCT变换,但又不同于DCT。
由于DCT变换是实数,量化时需对系数进行四舍五入,从而影响了运算的精度。同时,传统的DCT存在不匹配问题,产生参考帧的偏移,直接影响到重建图像的质量。
H.264建议的整数DCT变换的所有操作都使用整数算法,变换的核心部分主要是加法和移位。在整个变换和量化的过程中,只执行16bit的整数算法和一次乘法操作。只要在H.264建议基础上正确使用相应的反变化,编码器和解码器就不会出现不匹配现象。它的正反变换矩阵分别为
其中的系数基本上都是整数,1/2可以用移位代替。在变换中由于乘法均可由移位运算代替,因此,复杂度降低的同时,也解决了精度问题。
H.264中的宏块大小为16×16,对其中每个4×4大小的块进行上述4×4的DCT变换后,得到16个4×4的变换矩阵。为了进一步提高压缩效率,该建议还允许把每个4×4的变换矩阵中的直流分量DC,单独取出组成一新的4×4矩阵,对此矩阵进行Hardamard变换。宏块的数据传送顺序如图5所示。
3.4 熵编码
H.264建议同时采用了两种熵编码模式:基于上下文的二进制算术编码CABAC,以及可变长编码VLC。VLC编码又包括基于上下文的自适应可变长编码CAVLC。
CABAC方式利用了算术编码的方法,一个符号可以用少于1bit来表示。根据无误码的假设条件下的试验所得的数据可知,在所有码率下,CABAC的表现都强于CAVLC。但是CAVLC的抗误码性要强于CABAC,且运算的复杂度也远远低于CABAC。因此,H.264规定在Baseline Profile 中采用CAVLC,而在Main Profile 中采用CABAC进行熵编码。
4 小结
与以往的视频编码标准相比,H.264建议在其系统结构、运动估计和运动补偿、宏块的变换和量化以及熵编码等各方面都有明显的提高,具有更高的编码效率和更强的网络适应性。在相同的图象质量下,H.264/AVC的算法比以前的标准如H.263或MPEG-4节约了50%左右的码率。H.264的不同Profile既可以应用于实时通信,也可应用于对时延要求不高的其他应用中。此外,该建议增加了NAL层,负责将编码器的输出码流适配到各种类型的网络中,从而对网络传输具有更好的支持功能。同时,它具有较强的抗误码特性,可适应丢包率高、干扰严重的无线信道中的视频传输。因此,H.264支持不同网络资源下的分级编码传输,从而获得平稳的图像质量,能适应于不同网络中的视频传输,网络亲和性好。
在今天的Internet,对多媒体服务的需求呈现快速增长的趋势。由于受无线网络有限的带宽资源和传输能力的限制,目前市场上最终用户大部分是按照流量付费的方式来使用无线网络数据服务的,提高压缩效率是无线视频和多媒体应用的主要目标。 所以H.264/ AVC编码标准成为在多媒体信息服务(MMS)、包交换流服务(PSS)和会话应用方面最有竞争力的候选标准。同时,H.264/AVC没有任何对所有权的限制,是一个公共的开放的标准。因此,增强了各个生产商在制造工艺中对低成本的竞争,使得产品价格迅速下降,让这项技术可以为更多的人服务。