什么是帧间预测?
编码相邻帧的时候,使用已经编码的帧与预测值的差值编码的方式,减少相邻帧图像数据相似的部分。
帧间预测主要包括运动估计(运动搜索方法、运动估计准则、亚像素插值和运动矢量估计)和运动补偿。
对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码。
消除运动图像时间冗余的技术;
帧间预测技术的发展?
帧间预测技术发展经历了条件更新、3D-DPCM、基于像素的运动补偿技术,最终确定为基于块的运动补偿方案。
帧间预测主要详细步骤是什么?
- 运动估计,因为是基于块的预测,那么首先需要找到块的位置,运动估计就是为当前图像的每个像素块在之前已编码的图像找到最最匹配的像素块;
- 运动补偿,根据帧间预测的计算方法以及运动矢量,也即当匹配快到当前快的运动情况,计算得到当前帧的估计;
运动估计
-
基于像素的运动表示
视频画面的运动,是每一个像素按照一定轨迹运动而造成的效果。视频中的运动物体,前后帧每一个像素都有一个运动轨迹。这个轨迹的数学表示方式就是向量,也称为运动矢量。这种基于像素的运动估计,普遍适用,但是数据量大。但是也能提供精确的运动估计,光流技术就是基于像素的运动估计技术之一; -
基于区域的运动表
对于包含多个运动物体的场景,将每帧图像划分为多个区域,是的每个区域恰好标识一个运动物体。适用性小,因为于东物体规则复杂,需要大量信息来表征一块区域; -
基于块的运动表示
基于区域的标识太过于复杂,于是采用规则的像素块,每一个像素块可以视为运动的最小单元,其中的像素运动看成是统一的,这种方式兼顾了复杂度和计算精度,该方法是视频编码标准的核心技术;
理解:
以上三种方式,方法相同,只是选取的对象粒度不同,从像素、块到区域的根本的思想还是判断前后两针数据相同画面的运动轨迹。
运动估计包括:运动搜索方法、运动估计准则、亚像素插值和运动矢量估计。
确定了使用基于块的运动估计方法,接下来就要讨论,基于块的运动估计的详细步骤,其中关键要解决的问题就是,如何从已经编码的帧数据中找出与当前帧的块最匹配的像素块;方法是使用当前帧的像素块,去已编码的帧中逐搜索匹配。
运动搜索方法
- 全局搜索:最简单的将所有可能进行搜索比较,总是能找到搜索范围内的最佳匹配块,但是效率太低。
- 快搜索算法:每种算法的过程各不相同,主要通过尽量避开不太可能是最佳匹配块的位置,从而提升搜索效率。过程就是:
- 确定搜索起始点;
- 判断该点有没有达到最佳匹配块的要求和能不能进一步继续搜索。
- 按照搜索规则,以起始点周围点为新的起始点进行递归搜索。
常见的快速搜索算法有:三步法、二维对数法、交叉法、菱形法等。
利用运动矢量的中心偏置分布特性的三步搜索法、新三步搜索法、四步搜索法、梯度下降算法、钻石型算法、六边形搜索算法;利用运动矢量时空性相关性算法、非对称十字多边形搜索算法、基于时空预测的快速算法、图像增强预测区域搜索算法。
搜索方法有多种,目标是找的快,找的准。
运动估计的准则
一句话概括,就是找到的预测块要与当前快的残差最小,这样就使得需要编码的数据量最少。
运动估计就是在搜索范围内寻找最佳估计块,使得预测块与当前块的残差数据尽量小,这样就保证编码的代价尽量小。对于MxN的像素快,s(x,y)表示当前像素值,z(x,y)表示备选预测像素值,x=1……M,y=1……N。则有下面的运动估计准则:
- SAD(sum of absolute difference):绝对误差。MAE:平均绝对差值
SAD = sum(|s(x,y)-z(x,y)|) MAE = (1/MN)*SAD - SATD
- SSD(sum of squared difference):差值的平方和。MSE:平均平方误差
SSD = sum((s(x,y)-z(x,y)^2)) MSE = (1/MN)*SSD
可以选择上面的估计标准,计算出的值越小,说明编码代价越小。
H.264编码是以GOP分组处理,每个GOP的编码结构有III……、IPP……、IBB……P和分层B帧结构。其中第一种一般不使用,编码效率太低;第二种是属于H.264的基本档次。第三、四种属于主要档次和扩展档次。其中第三种(普通B帧)会产生较大的编码延时。
亚像素插值
在实际场景中,由于物体运动的距离并不一定是像素的整数倍,因此需要将运动估计的精度提升到亚像素级别。H.265/HEVC沿用了上一代标准使用的1/4像素精度运动估计,并进一步发展了其亚像素差值算法。相比于H.264/AVC中的6抽头滤波器(用于半像素精度)以及两点内插(用于1/4像素精度)方法,H.265/HEVC使用了更多的邻近像素点进行亚像素精度插值。
像素插值分为亮度(Y分量)和色度(UV分量)插值。