一种视频编码中基于运动矢量预测的搜索方法
技术领域
本发明涉及视频信号编码领域,特别是一种视频编码过程中的运动矢量预测的方法。
技术背景
目前的视频编码技术中,运动矢量(Motion Vector,简称MV)预测是计算运动矢量场的起始点。如果能够有效的预测运动矢量场,那么一方面减少了运动估计的复杂度和计算量,另一方面也有利于去除数据冗余,提高整个系统的编码效率。
但是现有技术中,MV预测一般是利用帧内相邻区域的运动的相似性,把水平,垂直的相邻数据块块MV来预测当前数据块的运动矢量,即为直接MV预测。参考附图1、2所示,假定E为当前的宏块、宏块分区或子分区,A为E左侧的分区或子分区,B是E上方的分区或子分区,C是E右上方的分区或子分区。如果在E的左侧出现多于1个的分区,那么这些分区中最高的部分将按A选择;如果在E的上方出现多于1个的分区,那么这些分区中最左侧的部分将会按B选择。图1表示的是所有的分区都具有同样的尺寸时(这里为16*16)相邻分区的选择。图2表示的是,当相邻分区与当前分区E具有不同尺寸时如何进行预测分区的选择。具体说明如下:
(1)对于已传送的分区,不包括16*8和8*16的分区尺寸:E的预测运动矢量(MVp)是分区A、B、C的运动矢量的均值;
(2)对于16*8的分区:上方的16*8的分区的MVp是由B预测而来,下方的16*8的分区的MVp是由A预测而来。
(3)对于8*16的分区:上方的8*16的分区的MVp是由A预测而来,下方的8*16的分区的MVp是由C预测而来。
(4)对于跳过的宏块:一个16*16矢量MVp将如同(1)中所述的情况产生。(例如,就像块以16*16Inter模式进行编码)。
这样的MV预测方法计算量很小,但是不精确,因此在一个图像中只在很少宏块采用直接MV的预测,大量宏块的MV预测仍然是用传统的运动估计算法来计算。
传统的运动估计算法是建立在运动搜索基础上的,有三步法,四步法等,基本原理是:
首先,采用一个起始的模板,如附图3中的黑点所示,然后计算各点和待预测的块各点的均方差(MSE,Mean Square Error)或绝对误差和(SAD,Sumof Absolute Difference);
然后,将模板中心移到差值最小点,步长减小一半,取新的模板,如附图3中的黑白各半的点所示,重新计算各点的MSE或SAD;
最后,重复前一步骤,如附图3的白点所示,直到满足搜索的终止条件得到预测MV。
传统的各种不同的运动估计算法是采用不同的模板,以减少搜索的计算量,更精细的搜索还会采用全像素和半像素(甚或1/4像素)位置的计算。在视频编码中运动估计算法大约占整个计算量70%,而SAD的计算高达60%,如果采用MSE,那么运算量就更大了。
发明内容
本发明的目的是:针对现有技术的不足,提供一种预测精确、算法简单快速、运算量小的视频编码中基于运动矢量预测的搜索方法。
为了解决上述技术问题,本发明所采取的技术方案是:一种视频编码中基于运动矢量预测的搜索方法,包括如下步骤:
步骤一、获得与所述当前数据块位置相邻的多个数据块的运动矢量;
步骤二、根据所述各个数据块的运动矢量,获得当前数据块的预测运动矢量;
步骤三、以所述当前数据块的预测运动矢量位置为中心,进行小模板的搜索,直至得到局部最优的运动矢量。
所述步骤一中,与当前数据块位置相邻的多个数据块可以包括当前数据块的左方数据块、上方数据块和右上方数据块。
所述步骤二中,当前数据块的预测运动矢量=(2*左方数据块运动矢量+上方数据块运动矢量+右上方数据块运动矢量)/4。
所述步骤二具体可以为根据所述的各个数据块到当前数据块的梯度,获得当前数据块的预测运动矢量。
所述步骤二中,可以分别计算所述的各个数据块到当前数据块的梯度,取梯度最小的数据块的运动矢量为当前数据块的预测运动矢量。
进一步的,所述步骤三可以具体为:
a、以当前数据块的预测运动矢量位置为中心位置,以一个5点的小模板,读取小模板内的数据块的数据,并进行SAD计算;
b、判断所述SAD计算结果最小点是否与中心位置重合,如果是,则跳转至步骤d,否则执行步骤c;
c、取SAD计算结果最小点为新的中心位置,再读取一个5点的小模板内的数据块的数据,并进行SAD计算,然后返回步骤b;
d、所述SAD计算结果最小点与中心位置重合时的中心位置即为局部最优的运动矢量位置。
所述数据块可以为宏块或块。
在上述技术方案中,本发明实现了一种新型快速搜索算法,它利用相邻数据块的相关性,减少了运算复杂度,缩小了当前数据块的搜索范围,从而可以提高内存读取速度,并且在此基础上,采用小模板的搜索计算,可以获得很精确的预测MV和很低的计算量。
附图说明
附图1为现有技术中MV直接预测法相邻数据块大小一致时的示意图;
附图2为现有技术中MV直接预测法相邻数据块大小不一致时的示意图;
附图3为现有技术中运动估计算法的示意图;
附图4为本发明方法的流程图;
附图5为本发明的一种具体实施例中采用小模板搜索的示意图。
具体实施方式
下面将结合说明书附图及具体实施例对本发明作进一步详细说明。
参考附图4,本发明的一种具体实施例提供一种视频编码中基于运动矢量预测的搜索方法,由于目前视频编码的处理过程主要是针对宏块(MacroBlock,MB)或块(Block)进行,一个宏块的大小为16×16像素,其中可分为4个8×8像素的块。因此,本实施例也针对宏块或块进行操作。其步骤如下:
步骤一、获得与所述当前宏块或块位置相邻的多个宏块或块的运动矢量。
其中,相邻的多个宏块或块的取法可以与现有技术中相同,参考附图1、2,所述的当前宏块/块为E,所述的相邻的多个宏块或块包括左方宏块/块A、上方宏块/块B和右上方宏块/块C。当ABC与E的大小不同时,其取法可以参照本说明书技术背景部分的介绍。
步骤二、根据所述各个宏块/块的运动矢量,获得当前宏块/块的预测运动矢量。
具体实施的方法可以有多种,亦可采用现有技术中的方法。
本发明的具体实施例中提供两种较佳的实施方案:
方法一:
取E的预测公式为:MVE=(2*MVA+MVB+MVC)/4。
即E的预测运动矢量MVE由A的运动矢量MVA、B的运动矢量MVB和C的运动矢量MVC计算得到。
这个预测公式由于考虑到了E与其相邻的宏块/块的相关性,因此可以得到较为准确的E的预测运动矢量。
方法二:
是基于梯度计算的预测方法,即根据所述的各个宏块/块到当前宏块/块的梯度,获得当前宏块/块的预测运动矢量。
具体为:分别计算所述的各个宏块/块A、B、C到当前宏块/块E的梯度,取梯度最小的宏块/块的运动矢量为当前宏块/块E的预测运动矢量。
实际实施过程中,可根据不同的图像以及图像的不同位置,选取现有技术的方法,或者本发明提供的两种方法中的一种实施。其预测的准确性略有差别。
步骤三、以所述当前宏块/块的预测运动矢量位置为中心,进行小模板的搜索,直至得到局部最优的运动矢量。
该步骤的目的是在步骤二获得了初步的预测运动矢量的基础上,进行快速的搜索算法,从而搜索获得最优的运动矢量。
取小模板搜索的目的就是为了减少计算量,提高搜索效率,保证搜索的精确性。所述小模板可以采用步长较小,点数较少的模板。如,采用步长为2的3点模板,或者步长为1的5点模板等。当采用步长大于1时,可以参考传统运动估计算法中,减少步长进行搜索。本实施例为了尽可能的提高搜索的精确性,采用了如附图5所示的步长为1的5点的小模板。
其具体搜索过程如下:
第一步,以当前宏块/块的预测运动矢量位置为中心位置,取一个5点的小模板,见图5中,a、b、c、d、e所示的5个宏块/块,且其中,a表示步骤二中所获得的预测运动矢量MVE的位置。
读取该小模板内的a、b、c、d、e宏块/块的数据,并分别进行SAD计算。
第二步,判断所述SAD计算结果最小点是否与中心位置a重合,如果是,则跳转至第四步,否则执行第三步;
第三步,取SAD计算结果最小点为新的中心位置,如新的中心位置为b,则再取一个5点的小模板,即由a、b、g、f、h这5个宏块/块组成。
再读取该小模板内的宏块/块的数据,并分别进行SAD计算,然后返回第二步;
第四步,所述SAD计算结果最小点与中心位置重合时的中心位置即为局部最优的运动矢量位置。
如此,则达到了本次搜索最优运动矢量的目的。
很明显,本发明首先通过相邻宏块/块的相关性,进行初步的运动矢量预测,从而可以获得大致的预测运动矢量的位置,然后再通过小模板的快速搜索算法,再预测位置进行小范围的快速搜索,而获得最优运动矢量。这种方法无疑相对现有技术,既准确,又快速,还可大大减少运算量。实践证明,采用本方法后,由于可以只读取预测运动矢量方向的数据块,因此搜索范围可以缩小为现有技术的1/3~1/4。而其预测精度比单纯的直接MV预测算法要高,计算的复杂度比传统的运动估计算法要低,能很好的满足运动估计的精度和复杂度的折中要求。
虽然上文较详尽地描述了本发明,但是这些描述仅是示意性的而非限制性的。显然,对于普通技术人员而言本发明会以许多方式进行变化。所有这样的变化都属于本发明的范围之内,而不应当被认为偏离本发明的范围。本发明仅受权利要求书的精髓和范围限制。