首页 > 代码库 > 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——帧间预测