H.264/AVC中引入了很多新特征,如:VCL层和NAL层的分离、高精度运动补偿、树状结构运动补偿、多参考帧运动补偿预测等。帧间预测技术,就是根据连续图像之间的相似性,采用运动估计和补偿的方法来消除视频在时间上的冗余。H.264解码代码的复杂度分析显示,计算量最大的部分是帧间预测、帧内预测和去块滤波模块。因为这些模块主要用来计算,控制部分都相对较简单,适合用硬件来实现。同济大学孙士雄在深入分析H.264标准的基础上,介绍了帧间预测技术的原理。 帧间预测解码是根据已编码视频帧或场的信息,基于块的运动补偿模式。一个视频帧或场以宏块为单位进行分解,在编码端,为了提高压缩度,将宏块再进行相应的分解。在解码时,从码流中解析得到这些信息,这些信息一般都是针对宏块分割或亚宏块分割的。如,参考帧序号、MVD(当前块的运动向量残差)、已解码的当前块周围块(A,B,C,D块)的MV、像素残差、当前块位置、预测方向等等。 1、帧间预测模式 帧间预测具有方向性,分为前向、后向预测。单向预测的帧或场称为P帧或P场,具有双向预测的帧或场称为B帧或B场。因P、B帧场的不同,又分为了如下几种预测方式。 (1)Read_MV预测模式 这是帧间预测里最普通的一种预测方式。在这种预测模式下,码流中既有运动向量残差,又有像素残差。在解码的时候,要根据当前块周围的相应的A、B、C和D块的MV信息来预测当前块的运动向量,然后与码流中解出来的MVD(运动向量残差)相加得到MV,再根据此MV到参考帧序号指定的已解码帧中取出相应的像素。如果MV不是整数,则要将取出来的像素进行分像素预测,然后同码流中的像素残差相加,得到的即为帧间预测解出的像素。然后再经过滤波处理,保存在存储器中,以便后续帧用来参考。 (2)直接(Direct)预测模式 这种预测方式为B帧所有,同Read_MV方式不同,它根据连续帧宏块间的特殊性,为了进一步提高压缩比,在码流中不再传输MVD或者像素残差。B_Skip类型,码流中没有向量残差(MVD)和像素残差,需要利用空间或者时间直接预测方式来预测运动向量,得到的像素预测值即为像素重构值;B_Direct类型,码流中有像素残差,但是没有向量残差,预测到的像素值加上像素残差即为像素重构值。在此,又可分为空间直接预测和时间直接预测模式。空间直接预测主要是利用空间上的相邻划分的运动向量对当前块进行预测,而时间直接预测主要是通过将时间上相邻而且在空间上位置相同的8*8划分的运动向量进行重新量化从而达到预测当前块运动向量的目的。 (3)复制模式 这种方式即为P_Skip预测模式,在这种方式中,码流中不提供向量残差和像素残差。它利用空间上的相邻的划分的运动矢量来对当前划分的运动矢量进行预测,由此得到的像素预测值即为像素重构值。它和空间直接预测模式一样,只能将宏块划分为一个16*16或者四个8*8块,在分为8*8块时,每个块又可以被独立的设置成直接预测模式或Read_MV模式。 2、高精度运动补偿 这是H.264独有的一种特性。帧间编码宏块的每个宏块分割及其子分割都是对参考图像中某一相同尺寸区域进行预测得到的。两者之间的差异,对亮度像素采用1/4像素精度来表示,对色度像素采用1/8像素精度来表示,因为相邻图像间差别比较细微,采用这种高精度运动补偿,既可以保持原视频真实性又可以减小码率。由于分像素位置的像素在参考图像中是不存在的,这就必须采用内插运算来计算出来。依据标准,在亮度半像素预测时采用系数为(1,-5,20,20,-5,1)的6抽头滤波器来实现,然后采用双线性滤波器来估计1/4亮度分像素。由此,在预测一个4*4亮度块时,就需要输入一个9*9像素列来实现。根据标准,在对色度进行分像素内插时,利用双线性滤波算法来实现。对于任何允许精度的内插可以由公式(1)来进行计算。可以发现其中用到了乘法运算,根据其特性,在后面的硬件实现中,利用查表法来实现。 Subpixel=((xFrac*yFrac*D+xFrac*(8-yFrac)*B+yFrac*(8-xFrac)*C+(8-xFrac)*(8-yFrac)*A)+32)/64公式(1) 2010年07月09日 |
微信扫码关注公众号