【转】H264编码格式介绍

上一篇 / 下一篇  2010-01-15 22:29:34

H264编码格式介绍
 
一、前言

H.264标准是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像专家组)的联合视频组(JVT,Joint Video Team)开发的标准,也称为MPEG-4 Part 10,“高级视频编码”。在相同的重建图像质量下,H.264比H.263节约50%左右的码率。因其更高的压缩比、更好的IP和无线网络信道的适应性,在数字视频通信和存储领域得到越来越广泛的应用。同时也要注意,H.264获得优越性能的代价是计算复杂度增加,据估计,编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。以下介绍的是在H.264标准中P桢的内部编码宏模块的预测方式。

H.264标准中的内部预测创造了一种从前面已编过码的一幅或多幅图像幀中预测新幀的模型。此模型是通过在参考幀中替换样本的方法做出来的(运动补偿预测)。AVC编码使用基于块的运动补偿。从H.261标准制定以来,每一个主要的视频标准都采用这个原理。H.264与以往标准的重要区别是:支持一定范围的图像块尺寸(可小到4x4)和更细的分像素运动矢量(在亮度组件中为1/4像素)。
H.264具有较强的抗误码特性,可适应丢包率高、干扰严重的信道中的视频传输。
H.264支持不同网络资源下的分级编码传输,从而获得平稳的图像质量。
H.264能适应于不同网络中的视频传输,网络亲和性好。
H.264的基本系统无需使用版权,具有开放的性质,能很好地适应IP和无线网络的使用,这对目前的因特网传输多媒体信息、移动网中传输宽带信息等都具有重要的意义。

二、树型构造的运动补偿

AVC编码支持从16x16到4x4范围尺寸的运动补偿块,在这个范围中亮度样本可有多个选择。每个图像宏模块亮度组件可以按4种方式分开(如图1所示):16x16、 16x8、8x16 和 8x8。每一个被分的子区是宏模块的一部分。如果选择了8x8的模式,每一个8x8模块被按4种模式分成多个子块(如图2所示):8x8、 8x4、4x8 和 4*4 (被称作宏模块子区)。这种模块区和模块子区在每个宏模块产生大量的组合。这种划分宏模块为各种尺寸的动态子模块的方法被称作树型运动补偿。

每一个区和子区要求由各自的运动矢量描述。每一个运动矢量都要被编码和发送;除此之外,所选的区需在压缩的比特流中编码。选择了大的区域意味着用少量的比特数据去描述运动矢量和区域类型。然而,经过补偿后的运动的画面还有大量的运动细节描写。选择小的区的划分会在使用运动补偿后产生少量的编码。因此,选择分区的尺寸大小具有显著的意义。总之,大的分区适合均匀的区域,小的分区适合描述细节。在宏模块中每一个显示组件的分辨率是亮度组件的一半,每一个显示被按同一方式分成亮度元素。

H.264与先前的标准相似,对残差采用基于块的变换编码,但变换是整数操作而不是实数运算,其过程和DCT基本相似。这种方法的优点在于:在编码器中和解码器中允许精度相同的变换和反变换,便于使用简单的定点运算方式。也就是说,这里没有“反变换误差”。 变换的单位是4x4块,而不是以往常用的8x8块。由于用于变换块的尺寸缩小,运动物体的划分更精确,这样,不但变换计算量比较小,而且在运动物体边缘处的衔接误差也大为减小。为了使小尺寸块的变换方式对图像中较大面积的平滑区域不产生块之间的灰度差异,可对帧内宏块亮度数据的16个4x4块的DC系数(每个小块一个,共16个)进行第二次4x4块的变换,对色度数据的4个4x4块的DC系数(每个小块一个,共4个)进行2x2块的变换。

H.264为了提高码率控制的能力,量化步长的变化的幅度控制在12.5%左右,而不是以不变的增幅变化。变换系数幅度的归一化被放在反量化过程中处理,以减少计算的复杂性。为了强调彩色的逼真性,对色度系数采用了较小量化步长。

三、分像素运动矢量

在每一幀的内部大块区域编码中可通过参照幀中相同区域的编码预测。两个相对比区域(运动矢量)所具有的漂移,像素分辨率在像素位置参考图中不存在,并且用内部和临近的样本创造他们。图3给出了1个例子,一个4X4的子区在现有幀中从临近的参考图的相应区域中预测出来,如果运动矢量的水平和垂直参数是一个完整的相关样本,在实际存在的参照块(灰色点)产生,如果一个或两个矢量元素是片断值,在参考幀(白点)调整样本和内部插入的预测样本(灰点)产生。

图3整数和分数样本预测

在H.264中采用1/4像素或者1/8像素的运动估计,即真正的运动矢量位移可能是以1/4或者 1/8像素为基本单位的。显然,运动矢量位移的精度越高,则帧间剩余误差就越小,传输码率就越低,即压缩比就越高。

H.264采用了6阶FIR滤波器的内插获得1/2像素位置值。当1/2像素值获得后, 1/4像素值可通过线性内插获得, 对于4:1:1的视频格式,亮度信号的1/4 像素精度对应于色度部分的1/8像素的运动矢量,因此需要对色度信号进行1/8像素的内插运算。

理论上,如果将运动补偿的精度增加一倍(例如从整像素精度提高到1/2像素精度),可有0.5bit/Sample的编码增益,但实际验证发现在运动矢量精度超过1/8像素后,系统基本上就没有明显增益了,因此,在H.264中,只采用了1/4像素精度的运动矢量模式,而不是采用1/8像素的精度。

分像素运动矢量补偿与整像素运动矢量补偿相比,前者显著改善了编码复杂性方面的花费,1/4像素的准确度大大超过1/2像素准确度产生的内插分像素样本。内插分像素是这样产生的:在参考幀的亮度组件中,第一个半像素样本产生方式如图4所示。在这个图中,整数像素样本显示为阴灰色,每一个半像素样本调整成2个整数样本像素,整数像素样本内插入用6个限幅相位滤波器,这样是比较复杂的(例如和双线性比较),而半像素样本产生更准确的数据,因此它具有更好的补偿特性。

一旦半像素样本可用,就会通过线性插补产生1/4像素位置。图5所示,两个纵向或横向的半或整取样形成1/4像素位置(如图5中的a、c、I、k和d、f、n、q),这些1/4像素位置在相邻取样间被内插值替换。
剩余的1/4像素位置(图5中的e、g、p和r)由处于对角位置的一对半像素样本间线性地以内插值替换。例如,e在b和h间以内插值替换。

组件中的1/4像素分辨率运动矢量需要色度组件中的第八像素分辨率矢量。在每一个色度组件中,以内插值替换的样本将在整数取样间的1/8间隔产生。在此情况下,将使用线性插补来产生每一个1/8像素色度取样(如图6所示)。每一个子像素位置a是相邻整数像素位置A、B、C和D线性组合而成的。

四、运动矢量预测

如果对每个分区的运动矢量进行编码,就会产生大量的数据,尤其是在选择了较小的分区尺寸时。相邻分区的运动矢量是紧密相关的,每个运动矢量可由相邻的已编码的分区预测。形成预测运动矢量的方法依赖于运动补偿分区的尺寸和相邻矢量的有效性,并概括如下(P区中的宏块)。

假定E为当前的宏块、宏块分区或子分区,A为E左侧的分区或子分区,B是E上方的分区或子分区,C是E右上方的分区或子分区。如果在E的左侧出现多于1个的分区,那么这些分区中最高的部分将按A选择;如果在E的上方出现多于1个的分区,那么这些分区中最左侧的部分将会按B选择。如图7说示,当所有的分区都具有同样的尺寸时(这里为16*16)如何进行相邻分区的选择。图8表示的是,当相邻分区与当前分区E具有不同尺寸时如何进行预测分区的选择。


说明:
(1)对于已传送的分区,不包括16*8和8*16的分区尺寸:MVp是分区A、B、C的运动矢量的中间部分;
(2)对于16*8的分区:上方的16*8的分区的MVp是由B预测而来,下方的16*8的分区的MVp是由A预测而来。
(3)对于8*16的分区:上方的8*16的分区的MVp是由A预测而来,下方的8*16的分区的MVp是由C预测而来。
(4)对于跳过的宏块:一个16*16矢量MVp将如同(1)中所述的情况产生。(例如,就像块以16*16Inter模式进行编码)。

如果图中显示的一个或更多先前已传输的块不可用的话(如在当前的图像或块区之外),那么MVp的选择也应做相应的改变。

在解码器中,预测的矢量MVp以同样的方式形成,并被加上以被解码的矢量偏差MVD。对于一个跳过的宏块,将没有被解码的矢量,因而运动补偿宏块要依靠大量的MVp来产生。

五、应用前景

H.264/MPEG-4的应用范围是非常广阔的,它可以适用于多种网络,其高效的编码性能,H.264/MPEG-4可满足多种应用的需求,目前主要应用在以下领域;基于电缆、卫星、Modem、DST等信道的广播;视频数据在光学或磁性设备上的存储,基于ISDN、以太网、DSL无线及移动网络的公话服务、视频流服务、彩信服务等,除了以上介绍的应用,基于H.264/MPEG-4的平台,还会拥现很多新的应用。

TAG:

 

评分:0

我来说两句

Open Toolbar