H.264 像素块预测与运动补偿

关键词:像素块预测 运动补偿 信源编码

一、像素块预测

H.264/ AVC标准中的基本预测技术是基于块,而不是基于对象的。它的编码器是利用混合的编码方案来提高编码效率,这些方案包括高级的预测技术和有效熵编码技术。在运动预测中它使用不同的块的大小进行预测,以树结构的方式来组织预测模式。其主要的特点也包含在多参考帧预测方式和通用B帧的概念上。H.264像素块预测编码包括帧内块预测和帧间块预测,而帧内块预测在H.264中占有极重要的地位。在图像信号压缩编码中,由于亮度信号和色差信号是分别进行处理的,因此,预测又可分亮度信号预测和色差信号预测。下面就两种不同预测方式分别加以讨论。

1. 帧内预测

在H.264/AVC中采用的预测编码方法与在14496-2标准的MPEG-4视频编码规范不同,帧内预测是在变换编码之前进行的。在 H.264/AVC标准的帧内预测中,当前块的抽样值总是利用邻块的抽样值来获取。这样也许会因为在相邻的帧间编码的宏块的运动补偿误差而引起图像误差的扩散。因此,在图像编码过程中还有一种限制帧内编码模式,此时只允许相邻的帧内预测宏块为已知才可以作为其他当前宏块的参考宏块。

H.264根据相邻像素可能有相同的性质,利用相邻像素的相关性,采用了新的帧内(Intra)预测模式。通过当前像素块的左边和上边的像素(已编码重建的像素)进行预测。只对实际值和预测值的差值进行编码,这样就能用较少的比特数来表达帧内编码的像素块信息。在H.264标准中,亮度块可以有9种4×4块和4种16×16块的帧内预测模式,而色度8×8块的4种模式与亮度的4种16×16块的模式相同。对于每个4×4块(除了边缘块特别处置以外),每个像素都可用17个最接近的先前已编码的像素的不同加权和(有的权值可为0)来预测,即此像素所在块的左上角的17个像素。显然,这种帧内预测不是在时间上,而是在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。如图1所示,4×4方块中a、b、…、p 为16个待预测的像素点,而A、B、…、P是已编码的像素。按照所选取的预测参考的点不同,亮度共有9类不同的模式,但色度的帧内预测只有1类模式。

4×4帧内预测方法用于对图像细节部分进行编码,它的基本思路是从不同的方向计算、比较块中各个像素之间的亮度差值,即梯度值。通过选择具有最小预测误差的方向作为最佳的预测方向。下面对其中的预测模式举例说明。如图1所示,其中4×4块中16个抽样值(a~p)是由先前解码邻近宏块抽样值(A~Q)利用各种预测模式预测得来。这种预测模式共有8个方向,加上各像素作平均计算共9种模式。

2. 4×4帧内预测模式编码过程

每个4×4块的帧内预测模式的选择一定会告知解码器,这可能需要很多比特。然而,附近的4×4块的帧内模式是非常相关的。举例来说,如果图 2里的先前编码的4×4块A和B是使用模式2预测的,块C(当前块)的最佳模式很有可能也是模式2。对于每个当前块C,编码器和解码器计算最合适的模式 most_probable_mode。如果A和C都在4×4帧内模式中编码,且都在当前的slice层中,最合适的模式(most_probable_mode)是A和C预测模式的最小量;否则most_probable_mode 被设定成模式2(直流预测)。

编码器为每个4×4块发送一个flag标志,使用最合适的模式use_most_probable_mode。如果flag是“1”,采用参数most_probable_mode。如果flag是“0”,发送另外的一个参数remaining_mode_selector,来指出模式变化。如果remaining_mode_selector比当前的most_probable_mode小,那么预测模式被设定为 remaining_mode_selector;否则预测模式被设定为 remaining_mode_selector+1。这样,remaining_mode_selector只需用8个数值(0到7)表示目前的帧内模式(0到8)。

3. 亮度信号16×16帧内预测

16×16预测方式是基于在16×16块的基础上,用于对图像中的相对不变的部分进行编码。它只有四种预测方式,分别为垂直预测方式、水平预测方式,直流预测方式和平面预测方式。用一个4×4亮度分量的可选模式,可预测一个宏块的整个16×16亮度分量,有4种模式。

模式0:(垂直预测)由上面的抽样值插补(H);

模式1:(水平预测)由左边的抽样值插补(V);

模式2:(直流预测)由上面的和左侧的抽样值平均数插补(H+V);

模式4:(平面预测)由上面的和左侧的抽样值插补。

线性“平面”可设置由上面和左侧的抽样值H和V插补, 这在平滑的亮度区域效果较好。

4. 色度信号的帧内预测

一个宏块的每个8×8色度分量借助于上面的和左面的已被编码、重建的色度分量抽样值进行预测。由于色度在图像中是相对平坦的,其预测方法与 16×16亮度信号帧内预测相似方式进行。因此也有四种帧内预测模式:垂直预测(模式0),水平预测(模式1),直流预测(模式2)和平面预测(模式 3)。

5. 帧间预测

帧间预测是利用先前已编码帧的图像作为参考图像对当前图像进行预测的一种方式。它把参考图像的抽样点通过运动矢量的补偿作为当前图像抽样值的参考值。H.264/AVC标准中使用了从H.261标准以来主要标准中使用的块结构运动补偿。然而,它与早期标准最大区别在于:①支持多种块结构的预测;②运算精度能精确到1/4像素。

在H.264/AVC标准中还使用了H.263标准中曾使用过的多帧预测的方法,主要思想是增加运动矢量中时间轴的估计参考帧数。在宏块的级别上,允许选择一个或几个前面视频帧作为参考帧。用于运动补偿的多帧预测方式在大多数情况下会明显改善预测增益。

下面我们就以在两种不同类型的片(slice)中使用的帧间预测方式进行讨论。在说明它们之前我们首先介绍树结构的运动补偿,其中主要简述了宏块的分块。

帧间预测用于降低图像的时域相关性,通过采用多帧参考和更小运动预测区域等方法,对下一帧精确预测,从而减少传输的数据量。每个亮度宏块被划分成形状不等的区域,作为运动描述区域。如图4所示,其划分方法有16×16,16×8,8×16,8×8 共4种。当选用8×8方式时,可以进一步划分成8×8,8×4,4×8和4×4共4个子区域。每个区域包含自己的运动向量,每个运动向量和区域选取信息必须通过编码传输。因此,当选用较大区域时,用于表示运动向量和区域选取的数据量减少,但运动补偿后的残差会增大;当选用小区域时,残差减少,预测更精确,但用于表示运动向量和区域选取的数据量增大。大区域适合反映帧间同质部分,小区域适合表现帧间的细节部分。

在H.264中,运动预测的精度也有所改进,对QCIF(144×176像素)格式的图像,使用1/4像素精度;对CIF(288× 352 像素)格式的图像,使用1/8 像素精度。其中,1/4 像素插值是先使用一个6抽头滤波器进行水平和垂直滤波得到半像素插值点,然后对其进行线性插值;而1/8 像素插值是直接使用一个8抽头滤波器进行水平和垂直滤波。

在帧内编码模式下,H.264 对空间系数进行双向预测,而不是对变换后的系数进行预测(见H.263+的先进帧内预测模式)。另外,与H.263+的附录N类似,H.264支持参考帧可选模式,即在编码后续图像时,可以从编码缓存中选择使用前面的参考帧(多于一帧)进行运动估值。

H.264 除了支持I 帧、P 帧和B 帧外,还提出了一种新的图像类型SP 帧,SP帧也是预测编码帧,根据需要可以改变用于该帧预测的图像。SP帧可用于信道速率的改变、视频比特流的切换和码流随机接入等操作,在时变无线信道上的视频通信和流媒体传输中有广泛的应用前景。

二、运动补偿

1. 树结构的运动补偿

H.264采用了不同大小和形状的宏块分割与亚分割的方法。一个宏块的16×16亮度值可以按照16×16、16×8、8×16或8×8进行分割;而如果选择了8×8分割,还可以按照8×8、8×4、4×8或4×4进行亚分割,如图5所示。这些宏块分割与亚分割的方法将会使得每个宏块中包含有许多不同大小块。利用各种大小的块进行运动补偿的方法我们将称为树结构的运动补偿(tree structured motion compensation)。宏块分割与亚分割所产生的每一个亮度块都有自己独立的运动矢量。对于宏块中色度值,分割方法是和亮度一样的,但是由于 4∶2∶0采样的关系,色度分割块的大小是亮度分割块的一半,而且当色度块在利用运动矢量时,必须要将它各个分量除以2。其次,H.264可以达到1/4 像素的运动精度,这是通过利用整像素点的亮度值进行内插得到的。内插过程先是通过6抽头的滤波器来获得半像素精度,然后用线性滤波器来获得1/4像素的精度。又由于4∶2∶0采样的关系,色度的运动精度就达到1/8像素,这也是通过线性滤波器插值得到的。由于运动矢量之间也有一定的相关性,所以H.264 就利用已经编码块的运动矢量对当前未编码块的运动矢量进行预测,最后只需要编码和传输实际运动矢量与预测值的差值即可。

再次,H.264还可以采用多参考图像(最多前向和后向各5帧)来进行运动预测,这样可以对周期性运动,平移封闭运动和不断在两个场景间切换的视频流有效果非常好的运动预测。使用了多参考图像,H.264不仅能够提高编码效率,同时也能实现更好的码流误码恢复,但需要增加额外的时延和存储容量。

最后,H.264也在B图像中利用后向运动预测,这和以前的标准是一致的,但不同的是B图像通过加权也能作为其他图像的参考图像。

在H.264/AVC标准中获得运动补偿的块结构大小不再局限于在宏块的基础上,可以从宏块的分块或子分块中获取运动矢量。

每个运动矢量都将会被编码、传送,另外分块方式也必须被编码在数据流中。选择大的分块方式(16×16、16×8或8×16)也许只需要传送很少的比特用于说明运动矢量和分块方式,但是运动补偿后抽样点差值也许将会比较大。选择小的分块方式(8×4或4×4)也许能得到很小运动补偿后抽样点差值,但是要花费很多比特去传输运动矢量和分块方式。因此对于分块的选择将会对压缩效果有着重大的影响。通常,大的分块方式用于帧内均匀的部分,而小的分块方式将有利于图像中细节描述,每个色度块将按照亮度的分块方式进行分块。由于宏块中色度分辨率是亮度分辨率的一半,因此色度块的大小不管在水平还是垂直方向上都只是亮度块的一半。同时,色度块上垂直运动向量和水平运动向量也只是亮度块的一半。

2. 在P类型片中的帧间预测

以往,一般的视频压缩的最高运动估计精度为半像素(half pixel),比如在14496-2标准(即MPEG-4视频编码部分)中的基本补偿技术就是采用半像素精度,采用的内插方法也是简单的双线性内插法,其补偿的质量也是相对于较低的。与上述不同的是,在H.264/AVC标准中的运动估计精度要求达到1/4(quarter pixel)精度。

在H.264/AVC标准中,对于P类型的片编码时可以采用多帧运动补偿预测,也就是超过一个先前编码帧可作为当前帧运动补偿的参考帧。

多帧预测需要解码器和编码器在缓冲中存贮多帧图像作为参考帧。解码器则利用比特流中参数设置信息内存管理控制操作(memory management control operation)去复制编码器相同的多帧缓冲。同时对于每个运动补偿的16×16、16×8、8×16或8×8块及其子块需传送参考索引参数,用于确定该块或子块参考帧在缓存中的位置。P类型片预测方式是与宏块中块相对应的,也即是与前面所介绍宏块中分块相对的。在P类型片中预测模式不仅仅只有表中所描述6种类型,还可以包括帧内预测模式。另外对于P_8×8类型预测方式,它是对应于8×8块的预测,还可以有子分块上预测模式。

对于P帧中不同预测模式分类可见JM中函数interpret_mb_mode_P,在其中它把当前宏块的分块方式及其模式存入到 currMB数据结构中,以便在函数readMotionInfoFromNAL获取当前块的运动矢量,在 readCBPandCoeffsFromNAL函数中获得预测差值。

3. 在B类型的片中帧间预测

与先前图像编码标准相比,在H.264/AVC标准中B类型片的概念得到推广,最大特点是由B类型片所组成B帧可以作为其他图像的参考帧。 B类型片与P类型片最本质的区别是在B类型片中宏块或其子块的预测值是通过两个不同运动补偿值加权平均后取得的。B类型片使用两组不同参考图像,分别为 list0(前向参考图像集)和list1(后向参考图像集)。

在B类型片中,四组不同的宏块预测方式将支持下面四种模式:①直接方式(direct mode):这种方式不需要传送运动矢量等附加信息(side information)。②单向预测方式(inter mode):只需传送1个宏块预测信息。③多假设预测方式(multihypothesis mode):需传送两个宏块预测信息。④帧内预测方式(intra mode)。下面我们分别具体介绍直接预测方式和多假设预测方式。

(1)直接预测方式(direct mode)

直接方式使用双向预测方式,传送预测差值。这种方式前向和后向运动矢量(mv0,mv1)是通过随后的参考图像(RL1)上公共确定宏块(co-located macroblock)的运动矢量(mvc)计算得到的。使用直接预测方式的宏块与公共确定宏块应具有相同的分块。

其中MV0为前向运动矢量,MV1为后向运动矢量,MVC代表着随后帧间图像公共确定块运动矢量。对于先前B帧概念而言,TDD为当前帧前一帧与后一帧相差的时间。TDB为当前B帧图像与前一帧的时差。当使用多帧预测后,这种概念发生变化。TDB为当前帧与其前向参考帧RL0之间的时差,而TDD为前向参考帧RL0与后向参考帧RL1之间的时差。在H.264/AVC标准中,直接预测方式因对预测信号进行混合加权运算,比先前标准中使用平均加权方式得到改善。这种技术最适合音乐电视和电影结尾的使用,它们通常是场景慢慢衰弱的。特别是在电影的结尾,场景逐渐衰弱成黑幕。在先前标准中没有好的压缩方式这种情况很难编码。如果把这种现象编码成PBBB模式,由于平均加权将使得第一和第三个B帧相对于周围的帧内、帧间帧及第二个B帧有较大的图像恶化,而基于帧间相对距离的混合加权方式却可以大大改善。

其中c为当前B帧中宏块或块中抽样值,cp为前向参考图像预测宏块或块中抽样值,cs为后向参考图像预测宏块或块中抽样值。

(2)多假设预测方式(multihypothesis mode)

多假设预测方式需要叠加由两个运动矢量所预测两个宏块预测值。我们把每个块预测值称为假设(hypotheses)。最后预测块通过两个假设的运动矢量得到的预测值平均后得到。多假设预测与双向预测方式不同。双向预测方式只允许前后向预测对线性组合而成。见图8。而多假设预测方式取消这种限制,它可以一个方向上预测对来获取最终的预测值。可以(前向,前向)或(后向,后向)进行预测。

当第一个假设来源于先前参考图像而第二个假设来源于后向参考图像时,多假设预测方式也可以成为双向预测方式。

你可能感兴趣的:(数据结构,mvc,list,TDD,tree,h.264)