发明内容
基于此,有必要提供一种带宽的消耗可控的基于运动搜索窗的匹配搜索方法。
一种基于运动搜索窗的匹配搜索方法,包括以下步骤:
针对当前帧的当前宏块,建立第一预设大小的运动搜索窗;
计算各个初始迭代候选点的匹配代价,并将匹配代价最小的所述初始迭代候选点作为初始迭代点;
通过所述初始迭代点在所述运动搜索框中确定出匹配搜索的目标位置;
其中,各个所述初始迭代候选点包括:所述当前宏块、与所述当前宏块的运动向量预测值对应的点、与所述当前宏块相邻的已编码宏块以及所述运动搜索窗的中心位置对应的点。
在其中一个实施例中,所述运动搜索窗的移动方向为当前帧的水平方向,所述基于运动搜索窗的匹配搜索方法还包括:根据所述当前宏块的运动向量预测值确定所述运动搜索窗的移动步长。
在其中一个实施例中,所述根据所述当前宏块的运动向量预测值确定所述运动搜索窗的移动步长的方法为:
建立以所述当前宏块的运动向量预测值所对应的点为中心的第二预设大小的搜索区;
将所述运动搜索窗向右移动16个像素后,判断所述搜索区的点与所述运动搜索窗的位置关系:若所述搜索区的点全部位于所述运动搜索窗的内部,则所述运动搜索窗的移动步长为16;若所述搜索区的最左侧的点位于所述运动搜索窗的外部,则所述运动搜索窗的移动步长为零;若所述搜索区的最右侧的点位于所述运动搜索窗的外部,则所述运动搜索窗的移动步长为32;
其中,所述当前宏块的运动向量预测值为根据与所述当前宏块相邻的已编码宏块的运动向量计算得出的。
在其中一个实施例中,所述通过所述初始迭代点在所述运动搜索框中确定出匹配搜索的目标位置步骤包括:
将所述初始迭代点作为第一搜索模板的中心,计算所述第一搜索模板中的各个点的匹配代价;所述第一搜索模板中的各个点包括所述初始迭代点和以所述初始迭代点为中心并呈田字形对称位于所述初始迭代点周围的八个点,且所述第一搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第一预设距离;
将所述第一搜索模板中的匹配代价最小的点作为第二搜索模板的中心,计算所述第二搜索模板中的各个点的匹配代价;所述第二搜索模板中的各个点包括所述第一搜索模板中的匹配代价最小的点和以所述第一搜索模板中的匹配代价最小的点为中心呈田字形对称位于所述第一搜索模板中的匹配代价最小的点周围的八个点,且所述第二搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第二预设距离;
将所述第二搜索模板中的匹配代价最小的点作为第三搜索模板的中心,计算所述第三搜索模板中的各个点的匹配代价,将所述第三搜索模板中的匹配代价最小的点作为所述目标位置;所述第三搜索模板中的各个点包括所述第二搜索模板中的匹配代价最小的点和以所述第二搜索模板中的匹配代价最小的点为中心呈田字形对称位于所述第二搜索模板中的匹配代价最小的点周围的八个点,且所述第三搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第三预设距离。
在其中一个实施例中,若所述第一搜索模板中的第一位置的点不在所述运动搜索框内,则用所述运动搜索框中的第一替代点替代所述第一搜索模板中的第一位置的点;其中,所述第一替代点为所述运动搜索框中与所述第一搜索模板中的第一位置的点之间的欧氏距离最小的点;
若所述第二搜索模板中的第二位置的点不在所述运动搜索框内,则用所述运动搜索框中的第二替代点替代所述第二搜索模板中的第二位置的点;其中,所述第二替代点为所述运动搜索框中与所述第二搜索模板中的第二位置的点之间的欧氏距离最小的点;
若所述第三搜索模板中的第三位置的点不在所述运动搜索框内,则用所述运动搜索框中的第三替代点替代所述第三搜索模板中的第三位置的点;其中,所述第三替代点为所述运动搜索框中与所述第三搜索模板中的第三位置的点之间的欧氏距离最小的点。
在其中一个实施例中,所述运动搜索窗包括亮度运动搜索窗和色度运动搜索窗,所述亮度运动搜索窗的中心与所述色度运动搜索窗的中心重合,所述色度运动搜索窗的长度和宽度均为所述亮度运动搜索窗的长度和宽度的一半。
本发明还提出一种基于运动搜索窗的匹配搜索系统,包括运动搜索窗建立模块、初始迭代点计算模块和目标位置确定模块;
所述运动搜索窗建立模块,被配置以针对当前帧的当前宏块,建立第一预设大小的运动搜索窗;
所述初始迭代点计算模块,被配置以计算各个初始迭代候选点的匹配代价,并将匹配代价最小的所述初始迭代候选点作为初始迭代点;
所述目标位置确定模块,被配置以通过所述初始迭代点在所述运动搜索框中确定出匹配搜索的目标位置;
其中,各个所述初始迭代候选点包括:所述当前宏块、与所述当前宏块的运动向量预测值对应的点、与所述当前宏块相邻的已编码宏块以及所述搜索窗的中心位置对应的点。
在其中一个实施例中,所述运动搜索窗的移动方向为当前帧的水平方向,所述基于运动搜索窗的匹配搜索系统还包括移动步长计算模块,所述移动步长计算模块,被配置以根据所述当前宏块的运动向量预测值确定所述运动搜索窗的移动步长。
在其中一个实施例中,所述移动步长计算模块根据所述当前宏块的运动向量预测值确定所述运动搜索窗的移动步长的方法为:
建立以所述当前宏块的运动向量预测值所对应的点为中心的第二预设大小的搜索区;
将所述运动搜索窗向右移动16个像素后,判断所述搜索区的点与所述运动搜索窗的位置关系:若所述搜索区的点全部位于所述运动搜索窗的内部,则所述运动搜索窗的移动步长为16;若所述搜索区的最左侧的点位于所述运动搜索窗的外部,则所述运动搜索窗的移动步长为零;若所述搜索区的最右侧的点位于所述运动搜索窗的外部,则所述运动搜索窗的移动步长为32;
其中,所述当前宏块的运动向量预测值为根据与所述当前宏块相邻的已编码宏块的运动向量计算得出的。
在其中一个实施例中,所述目标位置确定模块通过所述初始迭代点在所述运动搜索框中确定出匹配搜索的目标位置的方法为:
将所述初始迭代点作为第一搜索模板的中心,计算所述第一搜索模板中的各个点的匹配代价;所述第一搜索模板中的各个点包括所述初始迭代点和以所述初始迭代点为中心并呈田字形对称位于所述初始迭代点四周的八个点,且所述第一搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第一预设距离;
将所述第一搜索模板中的匹配代价最小的点作为第二搜索模板的中心,计算所述第二搜索模板中的各个点的匹配代价;所述第二搜索模板中的各个点包括所述第一搜索模板中的匹配代价最小的点和以所述第一搜索模板中的匹配代价最小的点为中心呈田字形对称位于所述第一搜索模板中的匹配代价最小的点四周的八个点,且所述第二搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第二预设距离;
将所述第二搜索模板中的匹配代价最小的点作为第三搜索模板的中心,计算所述第三搜索模板中的各个点的匹配代价,将所述第三搜索模板中的匹配代价最小的点作为所述目标位置;所述第三搜索模板中的各个点包括所述第二搜索模板中的匹配代价最小的点和以所述第二搜索模板中的匹配代价最小的点为中心呈田字形对称位于所述第二搜索模板中的匹配代价最小的点四周的八个点,且所述第三搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第三预设距离。
在其中一个实施例中,所述目标位置确定模块还被配置为:
若所述第一搜索模板中的第一位置的点不在所述运动搜索框内,则用所述运动搜索框中的第一替代点替代所述第一搜索模板中的第一位置的点;其中,所述第一替代点为所述运动搜索框中与所述第一搜索模板中的第一位置的点之间的欧氏距离最小的点;
若所述第二搜索模板中的第二位置的点不在所述运动搜索框内,则用所述运动搜索框中的第二替代点替代所述第二搜索模板中的第二位置的点;其中,所述第二替代点为所述运动搜索框中与所述第二搜索模板中的第二位置的点之间的欧氏距离最小的点;
若所述第三搜索模板中的第三位置的点不在所述运动搜索框内,则用所述运动搜索框中的第三替代点替代所述第三搜索模板中的第三位置的点;其中,所述第三替代点为所述运动搜索框中与所述第三搜索模板中的第三位置的点之间的欧氏距离最小的点。
在其中一个实施例中,所述运动搜索窗包括亮度运动搜索窗和色度运动搜索窗,所述亮度运动搜索窗的中心与所述色度运动搜索窗的中心重合,所述亮度运动搜索窗的长度和宽度均为所述色度运动搜索窗的长度和宽度的一半。
上述基于运动搜索窗的匹配搜索方法和系统,建立第一预设大小的运动搜索窗后,将匹配代价最小的初始迭代候选点作为初始迭代点,并通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置,使得匹配搜索不会只在当前宏块附近,且还能够保证所需带宽在可控的范围内。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明基于运动搜索窗的匹配搜索方法和系统的具体实施方式进行说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1,一个实施例中,本发明基于运动搜索窗的匹配搜索方法包括以下步骤:
S100,针对当前帧的当前宏块,建立第一预设大小的运动搜索窗。
可以理解的,视频编码的顺序是按照宏块的光栅扫描顺序进行的,因此在编码一个宏块行的过程中,运动搜索窗的位置实际上也应沿着水平方向有对应的移动。即在编码下一个宏块时,上一个宏块的运动搜索窗所覆盖的范围与下一个宏块的运动搜索窗所覆盖的范围可能有较大重复。本实施例中,运动搜索窗的大小尺寸为大于等于48*48,即第一预设大小为大于等于48*48。且运动搜索窗在移动过程中,大小尺寸保持不变。一般的,运动搜索窗在每个宏块行的开始位置重新初始化,初始化后的位置以每个宏块行的第一个宏块为中心。
一个实施例中,运动搜索窗的移动方向为当前帧的水平方向。可以理解的,将运动搜索窗的移动方向设置成当前帧的水平方向,能够较小整个搜索过程对带宽的消耗,将整个搜索过程对带宽的消耗保持在一个可控的范围内。本发明基于运动搜索窗的匹配搜索方法还可以包括:根据当前宏块的运动向量预测值确定运动搜索窗的移动步长。
参见图2,一个实施例中,根据当前宏块的运动向量预测值确定运动搜索窗的移动步长的方法包括以下步骤:
S110,建立以当前宏块的运动向量预测值所对应的点为中心的第二预设大小的搜索区。
其中,当前宏块的运动向量预测值为根据与当前宏块相邻的已编码宏块的运动向量计算得出的。本实施例中,与当前宏块相邻的已编码宏块可以包括当前宏块左侧的宏块、当前宏块上侧的宏块、当前宏块右上侧的宏块和当前宏块左上侧的宏块。具体的,若当前宏块是宏块行的第一个宏块,运动搜索窗的位置以第一个宏块为中心;否则,计算当前宏块的运动向量预测值,将以计算得出的当前宏块的运动向量预测值为中心的第二预设大小的区域作为搜索区。若与当前宏块相邻的已编码宏块均不存在,则定义当前宏块的运动向量预测值为(0,0)。
本实施例中,搜索区的大小为48*48,即第二预设大小为48*48。
当前宏块的运动向量预测值的具体计算方法可参照H.264的运动向量预测值的计算方法,在此不再详述。
S120,将运动搜索窗向右移动16个像素后,判断搜索区的点与运动搜索窗的位置关系:若搜索区的点全部位于运动搜索窗的内部,则运动搜索窗的移动步长为16;若搜索区的最左侧的点位于运动搜索窗的外部,则运动搜索窗的移动步长为零;若搜索区的最右侧的点位于运动搜索窗的外部,则运动搜索窗的移动步长为32。
参见图5,下侧面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的点全部落在运动搜索窗的内部,因此运动搜索窗的移动步长为16。
参见图6,左下侧的面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的最左侧的点落在运动搜索窗的外部,因此运动搜索窗的移动步长为零。
参见图7,右下侧的面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的最右侧的点落在运动搜索窗的外部,因此运动搜索窗的移动步长为32。
本实施例中,运动搜索窗只做水平向右移动,移动的步长只有0、16和32三种情况,从而进一步减小对带宽的消耗。需要说明的是,若运动搜索窗移动到图像的右边界,则不再移动,直到编码新的宏块行,再重复运动搜索窗在本宏块行的移动动作。
采用上述根据当前宏块的运动向量预测值确定运动搜索窗的移动步长的方法,可以将运动搜索窗的水平移动控制在一个固定的偏移量中,从而减小带宽的消耗。例如,运动搜索窗的大小为112*80,当移动步长为零时,运动搜索窗的缓冲保持不变;当移动步长为16时,运动搜索窗移动的部分为16*80,而其他部分与未移动前的移动搜索窗的部分区域重复,因此,只需从参考帧加载16*80大小区域的数据即可;同理,当移动步长为32时,只需从参考帧加载32*80大小区域的数据即可。
另外,本实施例中的运动搜索窗包括亮度运动搜索窗和色度运动搜索窗。其中,亮度运动搜索窗的中心与色度运动搜索窗的中心重合,且色度运动搜索窗的长度和宽度均为亮度运动搜索窗的长度和宽度的一半。
S200,计算各个初始迭代候选点的匹配代价,并将匹配代价最小的初始迭代候选点作为初始迭代点。
其中,各个初始迭代候选点包括:当前宏块、与当前宏块的运动向量预测值对应的点、与当前宏块相邻的已编码宏块以及搜索窗的中心位置对应的点。本实施例中,与当前宏块相邻的已编码宏块可以包括当前宏块左侧的宏块、当前宏块上侧的宏块、当前宏块右上侧的宏块和当前宏块左上侧的宏块。另外,在计算各个初始迭代候选点的匹配代价的时候,若与当前宏块相邻的已编码宏块中的某个宏块的运动向量不存在,则可以定义该宏块的匹配代价为无限大。
计算出各个初始迭代候选点的匹配代价后,对各初始迭代候选点的匹配代价进行大小比较,将匹配代价最小的初始迭代候选点作为初始迭代点,并执行步骤S300。
S300,通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置。
参见图3,一个实施例中,步骤S300可以包括以下步骤:
S310,将初始迭代点作为第一搜索模板的中心,计算第一搜索模板中的各个点的匹配代价。
其中,第一搜索模板中的各个点包括初始迭代点和以初始迭代点为中心并呈田字形对称位于初始迭代点周围的八个点。且第一搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第一预设距离。本实施例中,第一预设距离可以为8个像素。
例如,若定义初始迭代点的坐标为(0,0),则另外八个点的坐标为(0,8)、(8,8)、(8,0)、(8,-8)、(0,-8)、(-8,-8)、(-8,0)和(-8,8)。第一搜索模板就是由初始迭代点和以初始迭代点为中心并呈田字形对称位于初始迭代点周围的八个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为第二搜索模板的中心。
优选的,若第一搜索模板中的第一位置的点不在运动搜索框内,则用运动搜索框中的第一替代点替代第一搜索模板中的第一位置的点,计算第一替代点的匹配代价。其中,第一替代点为运动搜索框中与第一搜索模板中的第一位置的点之间的欧氏距离最小的点。第一搜索模板中的第一位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第一位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第一位置的点可以指代本步骤中上述9个点中的一个以上的点,而第一替代点也对应为运动搜索框中的一个以上的点,且第一位置的点与第一替代点一一对应。例如,第一搜索模板中有三个点不在运动搜索窗内部,即第一位置的点为三个,则第一替代点的个数也为三个,每个第一替代点与该三个点中的一个点对应。
S320,将第一搜索模板中的匹配代价最小的点作为第二搜索模板的中心,计算第二搜索模板中的各个点的匹配代价。
其中,第二搜索模板中的各个点包括第一搜索模板中的匹配代价最小的点和以第一搜索模板中的匹配代价最小的点为中心并呈田字形对称位于第一搜索模板中的匹配代价最小的点周围的八个点。且第二搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第二预设距离。本实施例中,第二预设距离可以为3个像素。
例如,若定义第一搜索模板中的匹配代价最小的点的坐标为(0,0),则另外八个点的坐标为(0,3)、(3,3)、(3,0)、(3,-3)、(0,-3)、(-3,-3)、(-3,0)和(-3,3)。第二搜索模板就是由本步骤的上述9个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为第三搜索模板的中心。
优选的,若第二搜索模板中的第二位置的点不在运动搜索框内,则用运动搜索框中的第二替代点替代第二搜索模板中的第二位置的点,计算第二替代点的匹配代价。其中,第二替代点为运动搜索框中与第二搜索模板中的第二位置的点之间的欧氏距离最小的点。第二搜索模板中的第二位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第二位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第二位置的点可以指代本步骤中上述9个点中的一个以上的点,而第二替代点也对应为运动搜索框中的一个以上的点,且第二位置的点与第二替代点一一对应。例如,第二搜索模板中有三个点不在运动搜索窗内部,即第二位置的点为三个,则第二替代点的个数也为三个,每个第二替代点与该三个点中的一个点对应。
S330,将第二搜索模板中的匹配代价最小的点作为第三搜索模板的中心,计算第三搜索模板中的各个点的匹配代价,将第三搜索模板中的匹配代价最小的点作为目标位置。
其中,第三搜索模板中的各个点包括第二搜索模板中的匹配代价最小的点和以第二搜索模板中的匹配代价最小的点为中心并呈田字形对称位于第二搜索模板中的匹配代价最小的点周围的八个点。且第三搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第三预设距离。本实施例中,第三预设距离可以为1个像素。
例如,若定义第一搜索模板中的匹配代价最小的点的坐标为(0,0),则另外八个点的坐标为(0,1)、(1,1)、(1,0)、(1,-1)、(0,-1)、(-1,-1)、(-1,0)和(-1,1)。第三搜索模板就是由本步骤的上述9个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为匹配搜索的目标位置。
优选的,若第三搜索模板中的第三位置的点不在运动搜索框内,则用运动搜索框中的第三替代点替代第三搜索模板中的第三位置的点,计算第三替代点的匹配代价。其中,第三替代点为运动搜索框中与第三搜索模板中的第三位置的点之间的欧氏距离最小的点。第三搜索模板中的第三位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第三位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第三位置的点可以指代本步骤中上述9个点中的一个以上的点,而第三替代点也对应为运动搜索框中的一个以上的点,且第三位置的点与第上替代点一一对应。例如,第三搜索模板中有三个点不在运动搜索窗内部,即第三位置的点为三个,则第三替代点的个数也为三个,每个第三替代点与该三个点中的一个点对应。
上述三个搜索模板的相邻两个点的间隔分别为8、3和1,因此采用上述三个模板能够搜索到运动搜索窗中的每一个点。可以理解的,在其他实施例中,还可以采用其他方法通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置,例如四步搜索法、菱形搜索法等。对于采用其他方法通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置的过程,在此不再详述。
上述基于运动搜索窗的匹配搜索方法,建立第一预设大小的运动搜索窗后,将匹配代价最小的初始迭代候选点作为初始迭代点,并通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置,使得匹配搜索不会只在当前宏块附近,且还能够保证所需带宽在可控的范围内。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
基于同一发明构思,本发明实施例提供一种基于运动搜索窗的匹配搜索系统,由于此系统解决问题的原理与前述一种基于运动搜索窗的匹配搜索方法相似,因此,该系统的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
参见图4,一个实施例中,本发明基于运动搜索窗的匹配搜索系统包括运动搜索窗建立模块100、初始迭代点计算模块200和目标位置确定模块300。
运动搜索窗建立模块100,被配置以针对当前帧的当前宏块,建立第一预设大小的运动搜索窗。
可以理解的,视频编码的顺序是按照宏块的光栅扫描顺序进行的,因此在编码一个宏块行的过程中,运动搜索窗的位置实际上也应沿着水平方向有对应的移动。即在编码下一个宏块时,上一个宏块的运动搜索窗所覆盖的范围与下一个宏块的运动搜索窗所覆盖的范围可能有较大重复。本实施例中,运动搜索窗的大小尺寸为大于等于48*48,即第一预设大小为大于等于48*48。且运动搜索窗在移动过程中,大小尺寸保持不变。一般的,运动搜索窗在每个宏块行的开始位置重新初始化,初始化后的位置以每个宏块行的第一个宏块为中心。
一个实施例中,运动搜索窗的移动方向为当前帧的水平方向。可以理解的,将运动搜索窗的移动方向设置成当前帧的水平方向,能够较小整个搜索过程对带宽的消耗,将整个搜索过程对带宽的消耗保持在一个可控的范围内。本发明基于运动搜索窗的匹配搜索系统还可以包括移动步长计算模块400。移动步长计算模块400,被配置以根据当前宏块的运动向量预测值确定运动搜索窗的移动步长。
优选的,移动步长计算模块400根据当前宏块的运动向量预测值确定运动搜索窗的移动步长的方法可以包括以下过程:
首先,建立以当前宏块的运动向量预测值所对应的点为中心的第二预设大小的搜索区。
其中,当前宏块的运动向量预测值为根据与当前宏块相邻的已编码宏块的运动向量计算得出的。本实施例中,与当前宏块相邻的已编码宏块可以包括当前宏块左侧的宏块、当前宏块上侧的宏块、当前宏块右上侧的宏块和当前宏块左上侧的宏块。具体的,若当前宏块是宏块行的第一个宏块,运动搜索窗的位置以第一个宏块为中心;否则,计算当前宏块的运动向量预测值,将以计算得出的当前宏块的运动向量预测值为中心的第二预设大小的区域作为搜索区。若与当前宏块相邻的已编码宏块均不存在,则定义当前宏块的运动向量预测值为(0,0)。
本实施例中,搜索区的大小为48*48,即第二预设大小为48*48。
当前宏块的运动向量预测值的具体计算方法可参照H.264的运动向量预测值的计算方法,在此不再详述。
然后,将运动搜索窗向右移动16个像素后,判断搜索区的点与运动搜索窗的位置关系:若搜索区的点全部位于运动搜索窗的内部,则运动搜索窗的移动步长为16;若搜索区的最左侧的点位于运动搜索窗的外部,则运动搜索窗的移动步长为零;若搜索区的最右侧的点位于运动搜索窗的外部,则运动搜索窗的移动步长为32。
参见图5,下侧面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的点全部落在运动搜索窗的内部,因此运动搜索窗的移动步长为16。
参见图6,左下侧的面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的最左侧的点落在运动搜索窗的外部,因此运动搜索窗的移动步长为零。
参见图7,右下侧的面积较小的实线区域为搜索区,面积较大的实线区域为未移动前的运动搜索窗,虚线区域为移动16个像素后的运动搜索窗。将运动搜索窗向右移动16个像素后,搜索区的最右侧的点落在运动搜索窗的外部,因此运动搜索窗的移动步长为32。
本实施例中,运动搜索窗只做水平向右移动,移动的步长只有0、16和32三种情况,从而进一步减小对带宽的消耗。需要说明的是,若运动搜索窗移动到图像的右边界,则不再移动,直到编码新的宏块行,再重复运动搜索窗在本宏块行的移动动作。
采用上述根据当前宏块的运动向量预测值确定运动搜索窗的移动步长的方法,可以将运动搜索窗的水平移动控制在一个固定的偏移量中,从而减小带宽的消耗。例如,运动搜索窗的大小为112*80,当移动步长为零时,运动搜索窗的缓冲保持不变;当移动步长为16时,运动搜索窗移动的部分为16*80,而其他部分与未移动前的移动搜索窗的部分区域重复,因此,只需从参考帧加载16*80大小区域的数据即可;同理,当移动步长为32时,只需从参考帧加载32*80大小区域的数据即可。
另外,本实施例中的运动搜索窗包括亮度运动搜索窗和色度运动搜索窗。其中,亮度运动搜索窗的中心与色度运动搜索窗的中心重合,且色度运动搜索窗的长度和宽度均为亮度运动搜索窗的长度和宽度的一半。
初始迭代点计算模块200,被配置以计算各个初始迭代候选点的匹配代价,并将匹配代价最小的初始迭代候选点作为初始迭代点。
其中,各个初始迭代候选点包括:当前宏块、与当前宏块的运动向量预测值对应的点、与当前宏块相邻的已编码宏块以及搜索窗的中心位置对应的点。本实施例中,与当前宏块相邻的已编码宏块可以包括当前宏块左侧的宏块、当前宏块上侧的宏块、当前宏块右上侧的宏块和当前宏块左上侧的宏块。另外,在计算各个初始迭代候选点的匹配代价的时候,若与当前宏块相邻的已编码宏块中的某个宏块的运动向量不存在,则可以定义该宏块的匹配代价为无限大。
计算出各个初始迭代候选点的匹配代价后,对各初始迭代候选点的匹配代价进行大小比较,将匹配代价最小的初始迭代候选点作为初始迭代点。
目标位置确定模块300,被配置以通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置。
优选的,一个实施例中,目标位置确定模块300通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置的方法可以包括以下过程:
首先,将初始迭代点作为第一搜索模板的中心,计算第一搜索模板中的各个点的匹配代价。
其中,第一搜索模板中的各个点包括初始迭代点和以初始迭代点为中心并呈田字形对称位于初始迭代点周围的八个点。且第一搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第一预设距离。本实施例中,第一预设距离可以为8个像素。
例如,若定义初始迭代点的坐标为(0,0),则另外八个点的坐标为(0,8)、(8,8)、(8,0)、(8,-8)、(0,-8)、(-8,-8)、(-8,0)和(-8,8)。第一搜索模板就是由初始迭代点和以初始迭代点为中心并呈田字形对称位于初始迭代点周围的八个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为第二搜索模板的中心。
优选的,若第一搜索模板中的第一位置的点不在运动搜索框内,则用运动搜索框中的第一替代点替代第一搜索模板中的第一位置的点,计算第一替代点的匹配代价。其中,第一替代点为运动搜索框中与第一搜索模板中的第一位置的点之间的欧氏距离最小的点。第一搜索模板中的第一位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第一位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第一位置的点可以指代本步骤中上述9个点中的一个以上的点,而第一替代点也对应为运动搜索框中的一个以上的点,且第一位置的点与第一替代点一一对应。例如,第一搜索模板中有三个点不在运动搜索窗内部,即第一位置的点为三个,则第一替代点的个数也为三个,每个第一替代点与该三个点中的一个点对应。
然后,将第一搜索模板中的匹配代价最小的点作为第二搜索模板的中心,计算第二搜索模板中的各个点的匹配代价。
其中,第二搜索模板中的各个点包括第一搜索模板中的匹配代价最小的点和以第一搜索模板中的匹配代价最小的点为中心并呈田字形对称位于第一搜索模板中的匹配代价最小的点周围的八个点。且第二搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第二预设距离。本实施例中,第二预设距离可以为3个像素。
例如,若定义第一搜索模板中的匹配代价最小的点的坐标为(0,0),则另外八个点的坐标为(0,3)、(3,3)、(3,0)、(3,-3)、(0,-3)、(-3,-3)、(-3,0)和(-3,3)。第二搜索模板就是由本步骤的上述9个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为第三搜索模板的中心。
优选的,若第二搜索模板中的第二位置的点不在运动搜索框内,则用运动搜索框中的第二替代点替代第二搜索模板中的第二位置的点,计算第二替代点的匹配代价。其中,第二替代点为运动搜索框中与第二搜索模板中的第二位置的点之间的欧氏距离最小的点。第二搜索模板中的第二位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第二位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第二位置的点可以指代本步骤中上述9个点中的一个以上的点,而第二替代点也对应为运动搜索框中的一个以上的点,且第二位置的点与第二替代点一一对应。例如,第二搜索模板中有三个点不在运动搜索窗内部,即第二位置的点为三个,则第二替代点的个数也为三个,每个第二替代点与该三个点中的一个点对应。
最后,将第二搜索模板中的匹配代价最小的点作为第三搜索模板的中心,计算第三搜索模板中的各个点的匹配代价,将第三搜索模板中的匹配代价最小的点作为目标位置。
其中,第三搜索模板中的各个点包括第二搜索模板中的匹配代价最小的点和以第二搜索模板中的匹配代价最小的点为中心并呈田字形对称位于第二搜索模板中的匹配代价最小的点周围的八个点。且第三搜索模板的各个点中于横轴或竖轴方向上相邻的点之间间隔第三预设距离。本实施例中,第三预设距离可以为1个像素。
例如,若定义第一搜索模板中的匹配代价最小的点的坐标为(0,0),则另外八个点的坐标为(0,1)、(1,1)、(1,0)、(1,-1)、(0,-1)、(-1,-1)、(-1,0)和(-1,1)。第三搜索模板就是由本步骤的上述9个点构成的。计算本步骤中上述9个点的匹配代价,对计算出的匹配代价进行大小比较,然后将匹配代价最小的点作为匹配搜索的目标位置。
优选的,若第三搜索模板中的第三位置的点不在运动搜索框内,则用运动搜索框中的第三替代点替代第三搜索模板中的第三位置的点,计算第三替代点的匹配代价。其中,第三替代点为运动搜索框中与第三搜索模板中的第三位置的点之间的欧氏距离最小的点。第三搜索模板中的第三位置的点为本步骤中上述9个点中的点。
需要说明的是,本实施例中,第一位置的点指代本步骤中上述9个点中的不在运动搜索窗内的点,因此第三位置的点可以指代本步骤中上述9个点中的一个以上的点,而第三替代点也对应为运动搜索框中的一个以上的点,且第三位置的点与第上替代点一一对应。例如,第三搜索模板中有三个点不在运动搜索窗内部,即第三位置的点为三个,则第三替代点的个数也为三个,每个第三替代点与该三个点中的一个点对应。
上述三个搜索模板的相邻两个点的间隔分别为8、3和1,因此采用上述三个模板能够搜索到运动搜索窗中的每一个点。可以理解的,在其他实施例中,还可以采用其他方法通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置,例如四步搜索法、菱形搜索法等。对于采用其他方法通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置的过程,在此不再详述。
上述基于运动搜索窗的匹配搜索系统,建立第一预设大小的运动搜索窗后,将匹配代价最小的初始迭代候选点作为初始迭代点,并通过初始迭代点在运动搜索框中确定出匹配搜索的目标位置,使得匹配搜索不会只在当前宏块附近,且还能够保证所需带宽在可控的范围内。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。