一种适用于H.264的高效块匹配运动估计算法
最新视频压缩标准H.264是由ISO/IEC的运动图像专家组(MPEG)和ITUT的视频编码专家组(VCEG)共同制定的,其主要特点是具有更高的编码效率和更好的网络适应性。在相同重构图像质量下,H.264预测精度达到了1/4像素,与H.263和MPEG―4标准相比能节约50%的码流,但是所带来的结果是,其运算的复杂度是H.263编码复杂度的四倍。运动估计模块是整个编码模块中运算量最大的部分,在JVT的文档中表明运动估计在使用一个参考帧时占整个运算量的70%,在使用五个参考帧时占整个运算量的90%。因此无论在硬件实现还是在软件实现的过程中,运动估计和补偿均占很重要的地位,在一个可行的解决方案中必须对这一部分进行优化和改进。
在深入研究H.264视频编码标准及其运动矢量统计特征的基础上,提出了采用一种基于节点模型的可变形块匹配运动估计算法。实验结果表明,该算法不仅保证了编码器原有的失真特性,而且还大大降低了运算复杂度与实现上的难度。 1 H. 264运动估计算法分析
H.264标准的编码效率之所以比其他标准要高很多,主要是应用了多预测块匹配和多参考帧预测,H.264同时引入了帧间预测和帧内预测,并且采用宏块大小可变的多预测块模式。帧内预测可去除帧内编码的空间冗余,而帧间预测可去除时间上的冗
余度。由于运动图像时间上的连续性,去除时间上的冗余可获得更大的压缩效率,通过运动估计方法去除帧间的冗余,一直是视频编码研究的热点。运动估计方法一般基于块匹配搜索,现有的视频编码标准也都基于DCT(或类DCT)变换。通常将一帧图像按16×16的图像块进行编码。如在编码某一P帧中的一个宏块M时,在参考帧相应位置的一定范围内搜索最为匹配的块R作为宏块中某一块M的参考块,将当前块M减去参考块R即可得到运动估计后的残余矩阵,此残余矩阵经过变换、量化、熵编码即得到该宏块编码后的码流,而运动估计也就是搜索匹配块的过程。 H.264帧间预测采用了不同大小和形状的宏块分割与亚分割方法,支持16×16―4×4的七种预测块模式,如图1所示。对于每一种分割块都有一个对应的运动矢量,编码器将对每个运动矢量和预测块模式标志进行编码和传输,解码器根据预测块模式标志和运动矢量进行宏块解码。 图1 七种预测块模式
编码器对每一种预测块均进行搜索预测,并利用RDO技术得到一个最佳的预测块,使编码预测残差和运动信息所用的比特数最小。因此在块匹配运动估计中,运动估计的精度会对码率产生很大影响,如果能降低计算冗余,那么计算量就会显著降低。全搜索算法以其极高的精度受到广泛关注,但由于其要求对搜索窗内所有点进行匹配,所需运算量十分巨大,很难适应实际应用,特别是实时应用的要求。为了追求较高运动估计精度下的较低运
算量,人们不断地提出各种快速算法。概览这些快速算法,大致可分为以下几类:①通过在搜索窗内按一定规则,仅搜索较少的几个点来降低运算复杂度,经典算法有三步法(3SS)、新三步法(N3SS)[1]、四步法(4SS)[2]等;②通过使用相对较为简单的匹配准则来降低运算复杂度,如最小最大误差等;③通过利用代数不等式排除不可能成为最佳匹配的待搜索点,从而减少匹配点数,降低运算复杂度,如近两年提出的一些快速全搜索算法等。 2 H. 264/AVC运动矢量统计特征分析
在视频序列中,视频对象的运动具有连续的运动特征,因此描述视频序列运动特征的宏块运动矢量间也存在时间和空间上的相关性。而且由于视频序列运动程度的不同,相邻宏块间运动相关性存在非常明显的变化。这一变化对H.264/AVC编码结果的影响可以通过对不同视频序列的宏块编码模式进行的统计来看[3],如表1所示。
可以发现对于运动平滑的视频序列(Bus序列)或视频图像中的平坦区域,宏块大多采用了大编码模式,即16×16、16×8和8×16模式;而对于运动剧烈的视频序列Stefan,编码时更多的宏块则采用了小编码模式,即8×8、8×4、4×8和4×4模式。H.264/AVC采用的七种分块模式可以在视频序列不同的运动程度情况下选择使用,而且可以随着运动程度的变化,相应地调整模块的选择。基于上述分析,本文提出采用一种基于节点模型的可变形块匹配运动估计算法。
3 基于节点模型的运动估计算法 3.1 基于节点的运动表示
在基于节点的块运动模型中,假设在块中所选择的某个数目的控制节点能够自由运动,而且任何中间点的位移可以通过节点的位移内插[4]。令K表示控制节点数目,Bm代表第m个图像块,dm,k表示Bm中控制节点的运动矢量(MV),则块的运动函数可以描述为
式(1)表示作为节点位移的内插块中任意点的位移,如图2所示。内插核m,k(x)取决于Bm中第k个控制节点所期望的对x的贡献。一般使用与相应的节点结构有关的行状函数来设计这种内核。如果采用多节点的模型则可以表征在运动过程中比较复杂的变形。在单节点情况下(在块中心或一个选择的角)的内插核是一个脉冲函数,相当于最临近内插。在三节点(块的任意三个角)和四节点(四个角)情况下的内插函数分别是仿射函数和双线性函数。要对矩形块应用仿射模型,首先要将矩形分成两个三角形,然后再将每个三角形模型转换为三节点模型。 当块的四个角点位置给定后就可以估计出节点的MV,根据关于运动的动态范围和期望估计精度的先验知识可以确定出节点MV合适的搜索范围和搜索步长。而且由于基于节点模型表示中所有的运动参数同等重要,采用整数或半像素精度就可以规定节点的MV。
在这种情况下,每次更新只需要两个K×K矩阵的求逆即可。
在四节点情况下,[H]是一个8×8的矩阵,而[Hxx]和[Hyy]是4×4的矩阵,从而减少了运算复杂度。
本算法的初始值由穷尽搜索块匹配算法提供,考虑到四节点模型,每一个块的每一个角都是一个节点,可以用与每个节点相连的四个块的运动矢量的平均作为这个节点MV的初始估计,然后该初始估计可以由式(5)进行迭代更新。
3.3 搜索中匹配准则的选择在上述块匹配算法中采用不同的匹配准则会获得不尽相同的运动估计结果。采用均方差(MSD)准则的匹配效果优于绝对帧差准则(MAD),但是在H.264视频编/解码系统中,帧间编码是对运动补偿差信号进行编码,所以MAD的计算次数和复杂度将少于MSD,但会在一定程度上牺牲运动估计的性能。基于以上分析以及H.264视频编/解码的特点,本文采用像素差值分类的运动估计匹配准则。
该准则将参考像块中的每一个像素分类为匹配像素和失配像素进行统计[5],在运动搜索中选取参考块中失配像素最少的块作为匹配块,可以对保持当前块与匹配块形状的一致性有较强的约束。具体运算过程如下:
其中,dh、dv为该块的水平和垂直位移矢量。因此可以看出采用这种匹配准则的运动估计体现了最小风险准则,在运动搜索中选取参考块中失配像素最少的块作为匹配块,对保持当前块与匹配块形状的一致性有较强的约束。但在运动搜索范围内,有些位置在本匹配准则下会具有相同的匹配像素数,即有相同的风