首页 > 代码库 > H.264学习笔记3——帧间预测

H.264学习笔记3——帧间预测

帧间预测主要包括运动估计(运动搜索方法、运动估计准则、亚像素插值和运动矢量估计)和运动补偿。

对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码。

A、树状结构分块

  H.264的宏块,对于16x16的亮度宏块,可以分成16x16、16x8、8x16和8x8的子块进行帧间预测。对于8x8的块(亚宏块,亮度和色度),往下又可以分成8x8、8x4、4x8、4x4的子块。在运动估计中,每一种分割都需要尝试,并计算出运动搜索结果的代价,选择最小代价的分割方式进行预测编码。

B、运动估计准则

  运动估计就是在搜索范围内寻找最佳估计块,使得预测块与当前块的残差数据尽量小,这样就保证编码的代价尽量小。对于MxN的像素快,s(x,y)表示当前像素值,z(x,y)表示备选预测像素值,x=1……M,y=1……N。则有下面的运动估计准则:

  1、SAD(sum of absolute difference):绝对误差。MAE:平均绝对差值

    SAD = sum(|s(x,y)-z(x,y)|)    MAE = (1/MN)*SAD

  2、SATD

  3、SSD(sum of squared difference):差值的平方和。MSE:平均平方误差

    SSD = sum((s(x,y)-z(x,y)^2))    MSE = (1/MN)*SSD

  可以选择上面的估计标准,计算出的值越小,说明编码代价越小。

C、运动搜索方法

  运动搜索就是在允许的搜索范围(一般是上下左右各一个子块大小)内查找最佳匹配块的过程,主要有全局搜索和快速搜索。

  1、全局搜索:最简单的将所有可能进行搜索比较,总是能找到搜索范围内的最佳匹配块,但是效率太低。

  2、快搜索算法:每种算法的过程各不相同,主要通过尽量避开不太可能是最佳匹配块的位置,从而提升搜索效率。过程就是:

    》1、确定搜索起始点;

    》2、判断该点有没有达到最佳匹配块的要求和能不能进一步继续搜索。

    》3、按照搜索规则,以起始点周围点为新的起始点进行递归搜索。

    常见的快速搜索算法有:三步法、二维对数法、交叉法、菱形法等,具体每种搜索方法可以参考书籍或者百度。

D、树状分级搜索和亚像素估计

  在运动估计时,为了提高估计精度,通常会采用1/2、1/4和1/8的像素精度进行估计,但是全部估计都这样操作会产生很大的性能开销,所以一般采用树状分级搜索。

  树状分级搜索就是在进行在进行运动估计时,先以整像素精度进行搜索,找到最佳匹配块之后,再在该位置周围进行1/2像素精度的搜索找到最佳匹配点。如果有需要的话,可以继续在1/2像素精度的最佳匹配点周围进行1/4像素精度的搜索,寻找最佳匹配点。

  在H.264中,对亮度和色度块的估计,分别支持1/4和1/8像素精度的运动估计。

  1、亮度的1/2和1/4像素插值:

  2、色度的1/8像素插值:

H.264学习笔记3——帧间预测