定义
运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。
MPEG-4采用I-VOP、P-VOP、B-VOP三种帧格式来表征不同的运动补偿类型。它采用了H.263中的半像素搜索(half pixel searching)技术和重叠运动补偿(overlapped motion compensation)技术,同时又引入重复填充(repetitive padding)技术和修改的块(多边形)匹配(modified block (polygon)matching)技术以支持任意形状的VOP区域
运动补偿包括全局运动补偿 和 分块运动补偿两类。 运动补偿是一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻) 差别的方法,具体来说是描述前面一帧(相邻在这里表示在编码关系上的前面,在播放顺序上未必在当前帧前面)的每个小块怎样移动到当前帧中的某个位置去。这种方法经常被视频压缩/视频编解码器用来减少视频序列中的空域冗余。它也可以用来进行去交织(deinterlacing)的操作。 一个视频序列包含一定数量的图片--通常称为帧。相邻的图片通常很相似,也就是说,包含了很多冗余。使用运动补偿的目的是通过消除这种冗余,来提高压缩比。
每组的第一帧(通常是第一帧)在编码的时候不使用运动估计的办法,这种帧称为帧内编码帧(Intra frame)或者I帧。该组中的其它帧使用帧间编码帧(Inter frame),通常是P帧。这种编码方式通常被称为IPPPP,表示编码的时候第一帧是I帧,其它帧是P帧。 在进行预测的时候,不仅仅可以从过去的帧来预测当前帧,还可以使用未来的帧来预测当前帧。当然在编码的时候,未来的帧必须比当前帧更早的编码,也就是说,编码的顺序和播放的顺序是不同的。通常这样的当前帧是使用过去和未来的I帧或者P帧同时进行预测,被称为双向预测帧,即B帧。这种编码方式的编码顺序的一个例子为 IBBPBBPBBPBB。
全局运动补偿
运动模型基本上就是反映摄像机的各种运动,包括平移,旋转,变焦等等。这种模型特别适合对没有运动物体的静止场景的编码。全局运动补偿有下面的一些优点: 该模型仅仅使用少数的参数对全局的运行进行描述,参数所占用的码率基本上可以忽略不计。 该方法不对帧进行分区编码,这避免了分区造成的块效应。 在时间方向的一条直线的点如果在空间方向具有相等的间隔,就对应了在实际空间中连续移动的点。其它的运动估计算法通常会在时间方向引入非连续性。 但是,缺点是,如果场景中有运动物体的话,全局运动补偿就不足以表示了。这时候应该选用其它的方法。
分块运动补偿
每帧被分为若干像素块 (在大多数视频编码标准,如MPEG中,是分为16x16的像素块)。从参考帧的某个位置的等大小的块对当前块进行预测,预测的过程中只有平移,平移的大小被称为运动矢量。 对分块运动补偿来说,运动矢量是模型的必要参数,必须一起编码加入码流中。由于运动矢量之间并不是独立的(例如属于同一个运动物体的相邻两块通常运动的相关性很大),通常使用差分编码来降低码率。这意味着在相邻的运动矢量编码之前对它们作差,只对差分的部分进行编码。使用熵编码对运动矢量的成分进行编码可以进一步消除运动矢量的统计冗余(通常运动矢量的差分集中于0矢量附近)。 运动矢量的值可以是非整数的,此时的运动补偿被称为亚像素精度的运动补偿。这是通过对参考帧像素值进行亚像素级插值,而后进行运动补偿做到的。最简单的亚像素精度运动补偿使用半像素精度,也有使用1/4像素和1/8像素精度的运动补偿算法。更高的亚像素精度可以提高运动补偿的精确度,但是大量的插值操作大大增加了计算复杂度。
缺点
分块运动补偿的一个大缺点在于在块之间引入的非连续性,通常称为块效应。当块效应严重时,解码图像看起来会有像马赛克一样的效果,严重影响视觉质量。另外一个缺点是,当高频分量较大时,会引起振铃效应。关于高频分量,请参见对运动补偿后的残差进行变换的方法: 变换编码。
在块匹配法中,重点研究块匹配准则及搜索方法。
目前有三种常用的匹配准则:
运动估计
两帧之间的物体运动是平移运动,位移量不是很很大,所以会以块作为单位分配运动矢量,在运动估计中采用了大量的参考帧预测来提高精度,当前的待编码块可以在缓存内的所有重建帧中寻找最优的匹配块进行运动补偿,以便很好的去除时间域的冗余度。为每一个块寻求一个运动矢量MV,并进行运动补偿预测编码。在每个分割区域中都有其对应的运动矢量,并对运动矢量以及块的选择方式进行编码和传输。
运动估计ME所表达的运动矢量MV,其研究的内容就是如何加速,有效的获得足够精确的mv,并且把前一帧所得的运动信息通过运动补偿MC来进行变换,量化编码,最后输出。
提高运动估计算法的效率的主要技术有:初始搜索点的选择,匹配准则,和运动搜索策略。
1.运动估计初始点的搜索:
1)直接选择参考帧对应块的中心位置,这种方法简单,但容易陷入局部最优点,如果初始的步长太大,而原点(指待搜索块的中心点在参考帧中的相同位置的对应点)不是最优点时候,可能使快速搜索跳出原点周围的区域,而去搜索较远的点,导致搜索方向的不确定性,陷入局部最优。
2)选择预测的起点,以预测点作为搜索的起点,x264采用的将运动估计矢量和参考帧的左边,上边和右上边的MB的中值MV作为起点进行ME。
2. 匹配准则,
x264中所采用的匹配准则是SAD,SATD. SAD
其余一些准则:
(1)绝对误差和(SAD, Sum of Absolute Difference)准则;
(2)均方误差(MSE, Mean Square Error)准则;
(3)归一化互相关函数(NCCF, Normalized Cross Correlation Function)准则。
如果对每个块的运动矢量进行编码,那么将花费相当数目的比特数,特别是如果选择小尺寸的
块的时候。由于一个运动物体会覆盖多个分块,所以空间域相邻块的运动矢量具有很强的相关性,
因此,每个运动矢量可以根据邻近先前已编码的块进行预测,预测得到的运动矢量用 MVp 表示,当
前矢量和预测矢量之间的差值用 MVD 表示。同时由于物体运动的连续性,运动矢量在时间域也存
在一定相关性,因此也可以用邻近参考帧的运动矢量来预测。
1) 运动矢量空间域预测方式
a、运动矢量中值预测(Median Prediction)
利用与当前块 E 相邻的左边块 A,上边块 B 和右上方的块 C 的运动矢量,取其中值来作为当前
块的预测运动矢量。
设 E 为当前宏块、宏块分割或者亚宏块分割, A 在 E 的左侧,B 在 E 的上方、C 在 E 的右上
方,如果 E 的左侧多于一个块,那么选择最上方的块作为 A,在 E 的上方选择最左侧的块作为 B。
图 3.18 表示所有的块尺寸相同,图 3.19 表示邻近块尺寸不同时作为预测 E 的运动矢量的块的选择。
在预测 E 的过程中遵守以下准则:
1、对于除了块尺寸为 16×8和 8×16 的块来说,MVp是块 A、B 和 C 的运动矢量的中值;
2、 对于 16×8 块来说, 上方的 16×8 块的MVp 根据B预测得到, 下方的 16×8 块的 MVp 根据 A
得到;
3、 对于 8×16 块来说, 左侧的 16×8 块的MVp 根据 A预测得到, 右侧的 16×8 块的 MVp 根据 C
得到;
4、对于不用编码的可跳过去的宏块,16×16 矢量MVp 如第一种情况得到。
2) 运动矢量在时间域预测方式
a、前帧对应块运动矢量预测(Corresponding-block Prediction)
利用前一帧的与当前块相同坐标位置的块的运动矢量来作为当前块的预测运动矢量
所示。
b、时间域的邻近参考帧运动运动矢量预测(Neighboring Reference-frame Prediction)
由于视频序列的连续性,当前块在不同的参考帧中的运动矢量也是有一定的的相干性的假设当前块所在帧的时间为 t,则当在前面的参考帧 t’中搜索当前块的最优匹配块时,可
以利用当前块在参考帧 t’+1 中的运动矢量来估测出当前块在帧他 t’的运动矢量:
在上述运动矢量的四种预测方式中,经过实验证明,空间域的预测更为准确,其中上层块预测
的性能最优,因为其充分利用了不同预测块模式运动矢量之间的相关性。而中值预测性能随着预测
块尺寸的减小而增加,这是因为当前块尺寸越小,相关性越强。
匹配误差函数,可以用各种优化方法进行最小化,这就需要我们开发出高效的运动搜索算法,
主要的几种算法归纳如下:
为当前帧的一个给定块确定最优位移矢量的全局搜索算法方法是:在一个预先定义的搜索区域
内,把它与参考帧中所有的候选块进行比较,并且寻找具有最小匹配误差的一个。这两个块之间的
位移就是所估计的 MV,这样做带来的结果必然导致极大的计算量。
由于在穷尽块匹配算法中搜索相应块的步长不一定是整数,一般来说,为了实现 1/K像素步长,
对参考帧必须进行 K倍内插。与整像素精度搜索相比,半像素精度搜索在估计精度上有很大提高,特别是对于低清晰度视频。
但是,应用分数像素步长,搜索算法的复杂性大大增加,例如,使用半像素搜索,搜索点的总
数比整数像素精度搜索大四倍以上。
那么,如何确定适合运动估计的搜索步长,对于视频编码的帧间编码来说,即使得预测误差最
小化
快速搜索算法和全局搜索算法相比,虽然只能得到次最佳的匹配结果,但在减少运算量方面效
果显著。
1)二维对数搜索法
这种算法的基本思路是采用大菱形搜索模式和小菱形搜索模式,从相应
于零位移的位置开始搜索,每一步试验菱形排列的五个搜索点。下一步,把中心移到前一步找到的
最佳匹配点并重复菱形搜索。当最佳匹配点是中心点或是在最大搜索区域的边界上时,就减小搜索
步长(菱形的半径)。否则步长保持不变。当步长减小到一个像素时就到达了最后一步,并且在这最
后一步检验九个搜索点。初始搜索步长一般设为最大搜索区域的一半。
其后这类算法在搜索模式上又做了比较多的改进,在搜索模式上采用了矩形模式,还有六
边形模式、十字形模式等等。
2)三步搜索法
这种搜索的步长从等于或者略大于最大搜索范围的一半开始。第一步,在起始
点和周围八个 “1”标出的点上计算匹配误差,如果最小匹配误差在起始点出现,则认为没有运动;
第二步,以第一步中匹配误差最小的点(图中起始点箭头指向的“1”)为中心,计算以“2”标出的 8
个点处的匹配误差。注意,在每一步中搜索步长搜都比上一步长减少一半,以得到更准确的估计;
在第三步以后就能得到最终的估计结果,这时从搜索点到中心点的距离为一个像素。
但是,上述一些快速算法更适合用于估计运动幅度比较大的场合,对于部分运动幅度小的场
合,它们容易落入局部最小值而导致匹配精度很差,已经有很多各种各样的视频流证明了这一点。
现在,针对这一缺点,国内外诸多专家学者也提出了相应的应对措施,特别是针对H.264编
码标准要求的一些快速算法的改进,并取得卓越的效果。这种算法通过在每一搜索步骤选择多个搜索结果,基于这些搜索结果之间的
匹配误差的不同得到的最佳搜索点,因而可以很好地解决落入局部最小值的问题。
[8]中提到一种适用于H.264的基于自适应搜索范围的快速运动估计算法,经过实验证明对于
如salesman等中小运动序列,其速度可接近全局搜索算法的400倍,接近三步搜索算法的4倍;而对于
大运动序列,如table tennis,该算法则会自动调节搜索点数以适应复杂的运动。当从总体上考察速度
方面的性能时,可以看到,该算法平均速度是全局搜索算法的287.4倍,三步搜索的2.8倍。
分级搜索算法的基本思想是从最低分辨率开始逐级精度的进行不断优化的运动搜索策略,首先取得两个原始图象帧的金子塔表示,从上到下分辨率逐级变细,从顶端开始,选择一个尺寸比较大的数据块进行一个比较粗略的运动搜索过程,对在此基础上进行亚抽样(即通过降低数据块尺寸(或提高抽样分辨率)和减少搜索范围的办法)进行到下一个较细的级来细化运动矢
量,而一个新的搜索过程可以在上一级搜索到的最优运动矢量周围进行。在亚抽样的过程中也有着
不同的抽样方式和抽样滤波器。这种方法的优点是运算量的下降比例比较大,而且搜索的比较全面。
缺点是由于亚抽样或者滤波器的采用而使内存的需求增加,另外如果场景细节过多可能会容易落入
局部最小点。
由于物体的运动千变万化,很难用一种简单的模型去描述,也很难用一种单一的算法来搜索最
佳运动矢量,因此实际上大多采用多种搜索算法相组合的办法,可以在很大程度上提高预测的有效
性和鲁棒性。