H.264预测编码之帧间预测

预测编码是视频压缩中最基本的编码工具,常见的预测编码为帧间预测和帧内预测。

视频编码中,主要的冗余信息是时间冗余,其次是空间冗余,视频编码通过帧间预测消除时间冗余,通过帧内预测消除空间冗余。接下来说说帧间预测。

帧间预测就是时域预测,旨在消除时域冗余信息,简单点说就是利用之前编码过的图像来预测要编码的图像。

先说下帧间预测的两个概念:

1、运动估计。

运动估计是寻找当前编码的块在已编码的图像(参考帧)中的最佳对应块,并且计算出对应块的偏移(运动矢量)。

      

图1

P为当前帧,Pr为参考帧,B为当前码块,Br是Pr中与B块相减残差最小的块,Br称为B的最佳匹配块。

B*与B在图像中的坐标位置相同,Br坐标为(Xr,Yr),B*坐标为(Xr,Yr)。Br坐标减去B*的坐标就是运动矢量MV。


2、运动补偿。

运动补偿是根据运动矢量和帧间预测方法,求得当前帧的估计值过程。其实说白了就是将运动矢量参数贴到参考帧上获取当前帧。另外运动补偿是一个过程。

帧间预测工作流程图如下:


图2



图3

图2为帧间预测编码过程,图3是解码过程。


帧间预测包括前向预测,后向预测和双向预测。后向预测和双向预测一般不会在实时应用中使用,例如视频会议,视频电话,比方说有第一帧,第二帧,第三帧,这时如果对第二帧进行后向预测或者双向预测的话,必须先编码第三帧,这样的话势必会产生编码延时,所以实时性不OK。对实时性要求不高的应用可以使用,比如网络视频中就使用了大量的双向预测编码。


运动估计准则:

在运动搜索寻找最佳匹配块的过程中,对于两个块是否匹配得有一个规则判断。目前有以下几种:

1、绝对误差和(SAD)。

2、最小变化域绝对误差和(SATD)。

3、差值平和和(SSD)。

4、平均绝对差值(MAD)。

5、平均平方误差(MSD)。

由于SAD的计算最为简单,只有加减法和绝对值运算,便于硬件实现,该函数在实际中使用最多。


运动搜索算法:

在搜索允许范围内,查找最佳匹配块的过程。

1、全搜索算法。

全局搜索就是把运动搜索范围内的每个可能位置都搜索一遍,此算法复杂度太高,效率低。

2、快速搜索算法。

快速搜索就是避开不太可能的位置,找到最佳匹配块。搜索大致流程为:

a、确定初始搜索点。

b、搜索到某点确定是否是最佳匹配位置若不是继续按照规则递归搜索。


最后说下亚像素预测和重叠块运动补偿(OBMC,Overlapped Block Motion Compensation)

在上面提到的搜索过程中,都是以整像素为但是进行的,为了提高搜索精度,在运动搜索过程中用到了1/2,1/4,1/8像素步长进行搜索。

视频中只包含整数像素点,亚像素点则需要通过插值计算出来,1/2像素由整数点插值得到,1/4像素点由1/2像素点和整像素点通过插值得到。

OBMC主要是为了提高预测精度和降低编码的块效应。块效应的产生主要是由于相邻块编码损伤程度不同,从而产生灰度的跳跃性变化,人眼对灰度的阶跃比较敏感。

在OBMC中,当前编码块包含多个运动矢量,除了自身的,还包含周围的。通过引入一组加权系数,对每个候选的运动预测块加权得到最终的运动预测。另外不是每个宏块采用OBMC都有增益,在编码时给编码块一个是否采用OBMC的标志,可以进一步增加编码的灵活性。


你可能感兴趣的:(视频,编码,h.264,视频编解码,帧间预测)