新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > H.264/AVC解码器运动矢量预测模块设计与应用

H.264/AVC解码器运动矢量预测模块设计与应用

作者:时间:2016-12-09来源:网络收藏

H.264/AVC支持3种图像编码模式:帧模式、场模式和宏块自适应帧场(MBAFF)模式。在帧模式下,1幅图像被划分成由16×16宏块组成的帧;H.264是一种高性能的视频编解码技术。目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。本文将探讨在解码的过程中MBAFF模式在P帧和B帧的帧间预测算法和硬件设计。

本文引用地址:http://www.eepw.com.cn/article/201612/328516.htm

1 帧间预测技术

帧间预测是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的,广泛用于普通电视、会议电视、视频电话、高清晰度电视的压缩编码。在图像传输技术中,活动图像特别是电视图像是关注的主要对象。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列,它在时间上比在空间上具有更大的相关性。大多数电视图像相邻帧间细节变化是很小的,即视频图像帧间具有很强的相关性,利用帧所具有的相关性的特点进行帧间编码,可获得比帧内编码高得多的压缩比。在解码时,解码器只需要采用同样的算法先预测出运动矢量的预测值MVp,而后将其与残差MVd相加便可以恢复出运动矢量的实际值MV[1]供运动补偿使用。MVp[1]取决于运动补偿的尺寸和邻近MV的有无。

在帧间预测模式下,宏块有16×16、16×8、8×16、8×8、8×4、4×8、4×4这7种运动矢量的分割方法。为方便描述,把参考宏块相应分割的运动矢量命名为MVLXN[2],参考索引命名为refIdxLXN,当前宏块分割的运动矢量MVpLX[2]就是通过MVLXN和refIdxLXN预测得到的。图1所示为非MBAFF模式时当前宏块分割为16×16的情况,E为当前宏块或宏块分割,A、B、C分别为E的左、上、右上方的3个相对应分割块。因为人眼对图像中静止或活动慢的部分,要求有较高的空间分辨率,而对时间分辨率的要求可低些。这种方法叫帧重复方法,广泛应用于视频电话、视频会议系统中,其图像帧速率一般为1~15帧/秒。

1.1 预测运动矢量MVp的计算

在宏块分割为16×16、8×8、8×4、4×8和4×4时,运动矢量的预测值是由参考宏块分割A、B、C的运动矢量计算得到的:

(1)如果分割B和C不可用,而分割A可用,则会对MVLXB、MVLXC、refIdxLXB、refIdxLXC重新赋值:MVLXB=‘MVLXA、MVLXC=MVLXA、refIdxLXB=refIdxLXA、refIdx-LXC=refIdxLXA。

(2)根据refIdxLXA、refIdxLXB和refIdxLXC的取值计算mvpLX:

①如果分割A、B、C的参考索引refIdxLXA、 refIdxLXB或refIdxLXC中的一个等于当前分割的索引号refIdxLX,则当前分割的矢量预测值由相应分割的运动矢量得到:MVpLX=mvLXN。

②如果分割A、B、C的参考索引refIdxLXA、 refIdxLXB或refIdxLXC都不等于当前分割的索引号refIdxLX,则通过取A、B、C的运动矢量中值得到:

MVpLX[0]=Median(MVLXA[0],MVLXB[0],MVLXC[0])

MVpLX[1]=Median(MVLXA[1],MVLXB[1],MVLXC[1])

运动矢量的预测在当前宏块分割为16×8和8×16的时候会先做如下的判断,如果不满足则通过上述取中值的方法得到预测值:

(1)对于1个宏块被分割成2个16×8子宏块的情况

①计算mbPartIdx等于0的子宏块如图2(a)所示。如果refIdxLXB等于当前分割的refIdxLX,则当前块的矢量预测值由B宏块的相应分割的矢量得到:MVpLX= MVLXB。

②计算mbPartIdx等于1的子宏块如图2所示,如果refIdxLXA等于当前分割的refIdxLX,则当前块的矢量预测值由A宏块的相应分割的矢量得到:MVpLX=MVLXA。

(2)对于1个宏块被分割成2个8×16子宏块的情况:

①计算mbPartIdx等于0的子宏块如图2(b)所示。如果refIdxLXA等于当前分割的refIdxLX,则当前块的矢量预测值由B宏块的相应分割的矢量得到:MVpLX=MVLXA。

②计算mbPartIdx等于1的子宏块如图2(b)所示,如果refIdxLXC等于当前分割的refIdxLX,则当前块的矢量预测值由C宏块的相应分割的矢量得到:MVpLX=MVLXC。

1.2 参考宏块分割的运动矢量MVLXN和参考索引refIdxLXN的计算

在计算参考宏块分割A、B、C的运动矢量MVLXN和参考索引refIdxLXN之前,应先检测分割C是否可用,如果C不可用,则用分割D的信息代替。A、B、C的运动矢量MVLXN和参考索引refIdxLXN的计算:

(1)如果宏块mbAddrN不可用或者宏块mbAddrN为帧内编码,或者mbAddrN相应分割或者子宏块分割的predFlagLX等于0,则对MVLXN置0,对refIdxLXN置-1。

(2)MVLXN为mbAddrN相应宏块分割或者子宏块分割的运动矢量,refIdxLXN为mbAddrN相应宏块分割的参考索引值:

MVLXN=MvLX[mbPartIdxN][subMbPartIdxN]

refIdxLXN=RefIdxLX[mbPartIdxN]

(3)在MBAFF模式时,需要对MVLXN和refIdxLXN再做1次计算:

①如果当前宏块为场宏块,而mbAddrN为帧宏块,则:

MVLXN[1]=MVLXN[1]/2

refIdxLXN=refIdxLXN×2

②如果当前宏块为帧宏块,而mbAddrN为场宏块,则:

MVLXN[1]=MVLXN[1]×2

refIdxLXN=refIdxLXN/2

1.3 空间相邻参考宏块分割的选择

在非MBAFF模式时,当前宏块的空间相邻宏块地址A、B、C、D的位置如图3所示。空间参考宏块mbAddrN可以是MbAddrA、MbAddrB、MbAddrC、MbAddrD或者CurrMbAddr。

在MBAFF模式时,当前宏块的空间相邻宏块地址A、B、C、D的位置如图4所示。此时会根据当前宏块是帧宏块或者场宏块currMbFrameFlag以及当前宏块是顶宏块或者底宏块mbIsTopMbFlag来计算1个中间值mbAddrX,并根据mbAddrX的帧场信息mbAddrXFrameFlag来得到最终的参考宏块MbAddrN。参考宏块mbAddrN可以是MbAddrA、MbAddrA+1、MbAddrB、MbAddrB+1、MbAddrC、MbAddrC+1、MbAddrD、MbAddrD+1、CurrMbAddr或者CurrMbAddr-1。

1.4 运动矢量预测所需数据的组织

运动矢量的预测需要当前分割的左边、上边、左上和右上相应分割的MVLXN和refIdxLXN信息来计算得到当前分割的MVLX。1个宏块需要存储16个block的运动矢量MVLX和参考索引refIdxLX,当采用其他分割类型时,每个分割内所有block的运动矢量和参考索引为相同值。

帧间预测按照block存储和使用数据。当前宏块分割的运动矢量和参考索引需要按照block来存储以用于后面宏块的预测。每个分割内所有block的运动矢量和参考索引为相同值,所以参考分割的MVLXN和refIdxLXN的引用也可以按照block来进行。

因为同一分割内所有block的运动矢量和参考索引为相同值,因此,参考分割的MVLXN和refIdx-LXN也就是参考宏块相应的block的MVLX和refIdx-LX。图5(a)~(d)分别表明了当前宏块采用不同划分时A、B、C、D 4个参考块的取值情况。在预测时一般选取A、B、C块对当前的运动矢量进行预测,当C不可用时则选用A、B、D进行预测。在MBAFF模式时,由于参考宏块的位置不同会作相应变化。H.264为了提高码率控制的能力,量化步长的变化的幅度控制在12.5%左右,而不是以不变的增幅变化。变换系数幅度的归一化被放在反量化过程中处理以减少计算的复杂性。为了强调彩色的逼真性,对色度系数采用了较小量化步长。2 直接预测模式和硬件设计

H.264/AVC对运动矢量的重建引入了直接预测模式,在该模式下运动矢量残差没有被传送,只有宏块的预测模式会被传送。解码器根据预测模式以及其余宏块的信息对当前的运动矢量进行恢复。运动矢量的重建流程如图6所示。在直接预测模式下,H.264分别采用3种不同的方式对运动矢量进行重建。

在先前的H.26x系列和MPEG-x系列标准中,都是采用的帧间预测的方式。在H.264中,当编码Intra图像时可用帧内预测。对于每个4×4块(除了边缘块特别处置以外),每个像素都可用17个最接近的先前已编码的像素的不同加权和(有的权值可为0)来预测,即此像素所在块的左上角的17个像素。显然,这种帧内预测不是在时间上,而是在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。

(1)复制模式。在P类型的宏块中,利用空间上相邻分割的运动矢量对当前的运动矢量进行预测。

(2)空间模式。在B类型的宏块中,利用空间上相邻分割的运动矢量对当前的运动矢量进行预测。

(3)时间模式。在B类型的宏块中,通过将时间上相邻而且在空间上位置相同的8×8分割的运动矢量进行重量化来预测出当前的运动矢量。

其中复制模式和空间模式在算法上具有一定的相似性,差别在于复制模式只需要重建1个方向的运动矢量,而空间模式需要重建双向的运动矢量。

2.1 空间模式及复制模式重建算法和硬件设计

在这2种模式下:(1)宏块只能划分成1个16×16分割或者4个8×8分割。在划分成4个8×8时,每1个8×8分割可以独立地被设置成直接模式或者ReadMV模式;(2)计算当前的运动矢量需要借助在空间上相邻分割的运动矢量来对当前分割的运动矢量进行重建。此时运动矢量的预测算法与前面介绍的预测运动矢量的算法基本相同,所不同的是此时宏块中的任意1个分割预测时所使用的相邻块信息均由图7所示的A、B、C、D 4个块预测。

Direct 8×8用A、B、C、D 4个块进行预测。预测的基本算法流程如图8所示。由图可见,在预测时首先检测参考块C是否可用,如不可用,则C块的参数用D块的参数代替;而后利用A、B


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭