背景技术
H.264是由ITU-T和ISO两个组织的专家为实现视频的更高压缩比,更好的图像质量和良好的网络适应性而提出的视频编码标准。事实证明,H.264编码具有比其他视频压缩标准更节省码流,并且比MPEG-4算法简单的特点。
为了提高编码效率,H.264/AVC采用了许多新的技术,其中一个新技术就是帧间编码采用了基于块匹配的运动估计(BMME,Block—MatchingMotion Estimation)技术。基于块匹配的运动估计的准确性和时间性是影响编码器整体性能的主要因素之一,对图像块进行匹配搜索的计算量很大,它和运动补偿块模式选择部分的处理共占整个编码器运算量的60%左右。所以如何在保证一定图像质量条件下,尽量减少块运动估计的计算量,成为当今研究的一个热点。
H.264视频编码标准的性能很大程度上取决于运动估计,而影响运动估计的主要因素是匹配准则和搜索算法。而搜索中心和搜索范围的确定能够大大提高搜索的效率。因此,很多针对块匹配的快速搜索算法被相继提出来。块匹配运动估计的基本原理是将当前帧分割成互不重叠的小块(如大小为16×16像素等),然后在参考帧中进行运动搜索,寻找最佳匹配位置作为预测,编码时只编码运动向量与块残差信息,以消除帧间冗余度,降低码率。在块匹配运动估计中,运动估计的精度会对码率产生很大的影响。块匹配法中,最简单、最可靠的方法是全搜索法(FS,Full Search)即穷尽搜索方法,但由于其要求对搜索窗内所有点进行匹配,所需运算量十分巨大,很难适应实际应用,特别是实时应用的要求。于是出现了许多快速搜索算法,最典型的有三步法TSS(Three—step Search)、新三步法NTSS(NewThree-step Search)、二维对数法、菱形搜索法DS(Diamond Search)等。
运动估计算法中常用的匹配准则有以下几种:最小绝对差(MAD)、最小均方差(MSE)和最小绝对误差(SAD)等,由于SAD准则不需要作乘法运算,实现简单、方便、所以使用最多,通常使用SAD准则。
对于硬件设计来说,快速搜索方法需要根据每一步搜索的结果动态调整对存储单元数据的访问区域,硬件开销较大。
具体实施方式
本发明的方法主要依据是:视频图像运动的连续性以及图像中运动物体的整体性,从而导致了同一帧图像中相邻宏块的运动矢量具有高时空相关性,可以根据已编码块的运动矢量来预测当前块的运动矢量。通过相邻块的运动矢量预测搜索中心,使中心进一步偏向全局最优点,在全局最优点附近的小范围内,找到全局最优点的概率将大大提高,从而可以大大提高编码效率。
本发明的方法其流程包括自适应搜索中心的确定、动态调整搜索区域的大小、根据搜索匹配阈值提前中止等步骤,见图2所示。本发明的运动估计方法主要包含以下步骤:
1.获取与当前宏块相邻的四个宏块的运动矢量信息。
在4:2:0的视频编码中,编码以宏块为单位,一个宏块包含1个16×16的亮度块和2个8×8色度块。编码时,按照从左到右,从上到下的顺序一个宏块接着一个宏块进行。假设A,B,C,D为与当前宏块的相邻的左边、上边、左上和右上的四个宏块(见图1),获取这四个宏块相对应的x方向和y方向运动矢量,分别为mvx和mvy。若当前宏块四个相邻宏块中某个宏块不存在,则相应的mvx和mvy设为0。从而得到与当前宏块的左边、上边、左上和右上四个宏块相对应的4组值mvx和mvy。
2.根据上述四个宏块的运动矢量确定搜索中心的x坐标和y坐标,以search_center_x和search_center_y表示。自适应搜索中心的确定是根据图像相邻宏块之间的空间相关性,当前宏块与相邻宏块的运动矢量(motionvector)代表了图像整体的运动方向这一原理进行预测的。
具体可分以下几种情况处理:
(1)四个宏块的mvx或mvy,若0的个数大于2,则search_center_x=0,search_center_y=0;
(2)若四个宏块的mvx或mvy符号均相同,取上述四个块运动矢量的平均值作为搜索中心坐标,即
search_center_x=average(mvx_A+mvx_B+mvx_C+mvx_D),
search_center_y=average(mvy_A+mvy_B+mvy_C+mvy_D);
(3)若四个宏块的运动矢量中,有3个宏块的mvx(或mvy)符号相同,取这三个符号相同的mvx(或mvy)的中间值(即数值大小在三个数中排在中间的那个数)作为搜索中心坐标;
(4)若四个宏块的运动矢量中,X轴运动矢量mvx或Y轴运动矢量mvy符号为2正2负,则搜索中心坐标为(0,0),即search_center_x=0,search_center_y=0。
3.搜索范围(search_range_x,search_range_y)的确定。
为适应不同运动程度的视频图像序列、提高运动估计的性能,采用自适应搜索窗。扩大的搜索窗对于大运动序列,无疑可以进一步提高运动估计的精度,但对于较小运动序列,却是不必要的浪费。显然,如果能够根据序列本身的运动特性,自适应地确定一个搜索范围,使绝大部分最佳匹配点都落于该范围内,则可在保证PSNR方面性能的同时,降低运算量,提高效率。
根据运动区域的特征,特别是对同一物体,由于构成它的宏块具有高度相关的运动矢量,因此如果利用相邻宏块的运动矢量来预测当前宏块的初始运动矢量,那么找到初始搜索中心位置后,就可以使最终得到的运动矢量更接近于全局最优值,甚至优于用全搜索算法找到的运动矢量。
自适应搜索范围的确定是根据图像当前宏块的相邻宏块运动矢量的大小代表了图像整体运动的剧烈程度。在H.264中,宏块的分块方式有16×16,16×8,8×16,8×8,8×4,4×8和4×4等7种方式,运动搜索对每种分块方式独立进行,最终选取其中最佳分块方式下的最佳匹配位置。以下以16×16分块方式为例,设搜索点数为4N2(根据用户输入确定),具体实施步骤为:
1)首先计算上述四个宏块运动矢量的平均值avg_mvx,avg_mvy,即
avg_mvx=average(mvx_A+mvx_B+mvx_C+mvx_D),
avg_mvy=average(mvy_A+mvy_B+mvy_C+mvy_D);
2)根据步骤1)中四个宏块运动矢量平均值avg_mvx,avg_mvy的大小动态确定搜索范围的形状。搜索点数根据用户输入确定需搜索的像素点,假设为4N2点,设x方向搜索范围为search_range_x(其含义为搜索分布在搜索中心左边和右边各search_range_x个像素点),而y方向搜索范围为search_range_y(其含义为搜索分布在搜索中心上边和下边各search_range_y个像素点),则相应的搜索范围与搜索点数的关系应满足:2×search_range_x×2×search_range_y=4N2。搜索时,仍按照行扫描的顺序,即从左到右,从上到下,一个像素点位置接着下一像素点位置进行。
分以下几种情况分别处理:
a.若avg_mvx=0,avg_mvy不为0,则search_range_x=1,search_range_y=N×N;
b.若avg_mvy=0,avg_mvx不为0,则search_range_y=1,search_range_x=N×N;
c.若avg_mvx=0,avg_mvy=0,则search_range_y=N,search_range_x=N;
d.设|avg_mvx|/|avg_mvy|=m/n,则search_range_y=m×a,search_range_x=n×a,其中m×n×a×a=N×N。
4.在步骤3中所述的搜索范围内进行运动搜索,并利用SAD准则进行匹配和提前中止判定。
本发明方法的匹配采用SAD匹配准则,其数学表达式如下:
其中,(i,j)为位移矢量分别在水平、垂直坐标上的分量,fk,fl分别为当前帧和参考帧的像素值,MxN为宏块的分块大小。SAD的计算区域根据搜索分块大小确定,在H.264中,每个宏块可分为16×16,16×8,8×16,8×8,8×4,4×8和4×4等7种分块方式,M,N值根据分块方式确定,如16×8分块方式下,M=16,N=8。根据全搜索在小区域内取得的SAD值来判定该块的时空相关性.这个SAD值也决定了编码所能接受的搜索精度与编码图像质量:即:给定一个值T(可根据该码流的场景复杂度和运动快慢确定),当SAD≤T则认为该块的时空相关性高;SAD>T则认为该块的时空相关性较弱。因此,按照这一方式,对于当前块与相邻块的时空相关性高的搜索,通过SAD≤T判定有效之后直接结束本次搜索;而对于时空相关性比较弱的情况,以少量的计算复杂度为代价,提高该块的搜索精度。
与现有技术相比,本发明提出了一种用于H.264自适应搜索中心和自适应搜索范围的快速运动估计方法,充分利用了图像当前宏块与相邻宏块间的很强的空间相关性,特别是运动矢量间的强相关性,同时充分利用大部分相邻宏块的运动矢量代表了当前宏块基本的运动方向的特点,自适应地确定搜索中心,动态调整搜索范围的形状,能在基本不损失信噪比的前提下,大大提高搜索准确度,降低运算复杂度。试验结果表明,在基本不影响重构图像质量的前提下,本方法平均搜索次数比全搜索方法有很大程度缩小,运算速度大大提高。