具体实施方式
本发明提供了一种用于有效并且精确的确定运动矢量的方法和装置,这样在由于人眼跟踪造成的期待图像运动与数字视频中的显示图像运动之间没有或者几乎没有差异。这可以通过使用包括一个时间矢量分割方案来确定运动矢量的递归分级方法来实现。
通常,为了较好的运行运动补偿方法,包括这里所述的递归分级方法,需要对对象运动的特性做两个基本假设:1)运动对象具有惯性,以及2)运动对象很大。惯性假设暗示着对于一个时间矢量采样间隔(就是,数字视频中的帧速率)来说,运动矢量逐渐的发生变化。较大对象的假设暗示着对于一个空间矢量采样间隔来说,运动矢量仅是逐渐变化,就是说,矢量场是平滑的,并且具有较少的边缘运动不连续。
递归分级方法的目标是通过将一个源相关窗口应用到第一图像帧和将一个目标相关窗口应用到下一图像帧,并且放置目标相关窗口,从而获得目标相关窗口与源相关窗口之间的最佳匹配,也就是,源相关窗口的内容与目标相关窗口的内容尽可能的相同,从而找到一个运动矢量。同时,执行源相关窗口和目标相关窗口之间的匹配所需的计算量尽可能的少,而仍然搜索全部矢量空间限制。为了实现这些目标,递归分级算法使用了图像帧的多种分辨率级别。首先确定最低分辨率级别的最佳运动矢量,这是通过将先前的最高分辨率级别的最佳运动矢量向下投射到最低的分辨率级别,对其进行测试,并且更新一个或者多个。然后将该最佳运动矢量向上传输到一个更高的分辨率级别,在那进行一些调整并且确定一个新的最佳运动矢量。该新的最佳运动矢量继续向上传输到另一个更高的分辨率级别,在那进行一些调整并且确定另一个新的运动矢量。该处理一直重复进行直到达到了最高的,原始的分辨率级别,并且为原始分辨率级别确定了一个最佳运动矢量为止。
图1表明了一个递归分级处理(100)的执行。假设已经生成了图像帧的多种分辨率级别。如图1所示,确定一个运动矢量的递归分级处理(100)开始于将一个先前图像帧的运动矢量向下投射到一个最低的分辨率级别(步骤102)。产生一组更新矢量并且进行测试从而找到最低分辨率级别上的最佳运动矢量(步骤104)。在一个实施例中,这种测试是通过将集中在运动矢量的原点的源相关窗口与集中在每个更新矢量的结束点的目标相关窗口中的相应位置的像素比较来实现的。比较可以,例如通过将每个目标窗口中的每个像素减去源窗口中的相应像素的亮度值来实现。在这种情况下,最佳匹配将通过找到源相关窗口和目标相关窗口对中的绝对差的最小和(SAD)来定义,并且最佳运动矢量将是与该源相关窗口和目标相关窗口对有关的矢量。
在找到了最小SAD以后,选择最佳矢量(步骤106)。然后处理(100)检查是否存在更高的分辨率级别(步骤108)。如果存在更高的分辨率级别,处理将最佳矢量向上传输到下一个更高的分辨率级别(步骤110),并且重复步骤104-108。如果没有更高的分辨率级别,处理前进到步骤112,在那里选择最佳矢量作为运动矢量,并且用于运动补偿,这样完成了当前帧的处理。
该方法的优点在于在一个较低的级别,一个像素的更新等于在下一个较高级别的两个或者多个像素的更新,这取决于两个级别之间的分辨率的差。如果例如存在三个分辨率级别,就是1∶1,1∶2和1∶4,并且在每个级别更新+/-1个像素,那么会聚延迟潜在的降低了四倍。换种说法,使用有效的分辨率分级来加速时间递归会聚。这带来了显著的改进,尤其对于具有高速运动的小对象的帧。
现在将参照附图1-4,通过具有1∶1,1∶2以及1∶4的三个分辨率级别的递归分级方案,4×4像素的图像块栅格为例,详细描述本发明。应当注意附图2-4所示的矢量仅是为了表明该例子,分辨率级别的数目以及每个分辨率级别的矢量数目和/或类型可以根据不同的参数,例如计算成本,质量,处理速度等改变。
图4表明了一个图像块栅格(400),其被分成了4×4像素的图像块(405),其中每个像素被表示为一个圆(410)。黑色的像素(415)表示为每个4×4图像像素块计算运动矢量的位置。从图4可以看出,为每个4×4图像像素块计算一个运动矢量,并且每个4×4图像像素块中的运动矢量原点的位置是相同的。图3表明了分辨率是图4所示的原始像素栅格一半的相同的像素栅格(400)。图2表明了更低分辨率的相同的像素栅格(400),在本实施例中,分辨率是图3所示的分辨率的一半,或者图4所示的分辨率的四分之一。
如图1和图2所示,确定一个运动矢量的递归分级处理开始于将一个先前图像的运动矢量(205)向下投射到最低的分辨率级别(步骤102),在本实施例中是原始分辨率的1∶4,如图2所示。在一个实施例中,在投射之前,滤波该陈旧运动矢量(205),这主要是考虑到邻近像素中含有造成矢量不连续的对象背景边缘的情况。该处理也被称为时间矢量分割并且将在下文中详细描述。滤波输出是一个1∶1级别的新的基础矢量,其接下来向下投射到1∶4的级别。在该序列的第一帧中,就是,当没有先前图像时,处理(100)开始于将零矢量作为陈旧运动矢量。在一个实施例中,当视频中存在场景中断时,就是当两帧之间没有连续性时,也使用零矢量。
图5A表明了一个时间矢量分割处理(500)的一个实施例。如上所述,时间矢量分割处理(500)的目的是给出一个对将被投射到最低分辨率级别的陈旧运动矢量(205)的更好的估计,如图2所示。因此,除了简单的投射一个运动矢量,也对含有多个矢量的邻近区域(550)进行检测,如图5B所示。而且,假设矢量的邻近区域(550)包括一个对象/背景边缘。时间矢量分割处理(500)试图在选择一个最佳的运动矢量之前,将与对象有关的运动矢量和与背景有关的运动矢量分离,这将进一步改进选择处理。
如图5A所示,处理(500)开始于从一个先前的图像帧获得一组邻近矢量(550)。图5B所示的组(550)包括九个矢量,每个矢量都指向一个图像块(560)。在本实施例中,使用九个邻近图像块(560)来定义邻近矢量,但是仅有其中的五个(以X形排列的V1-V5)用于在这里所述的执行当中计算。但是,读者会意识到可以选择任意数目的矢量,并且邻近图像块可以具有多种不同的形状。五个邻近矢量的设定和图像块的方形的设定仅是为了示例的目的。
然后处理将邻近矢量(550)的组分割成两个族(步骤504)。在一个执行当中,分割通过确定哪两个矢量彼此分离最远,并且使用这两个矢量作为两个族的源矢量来执行。当已经确定了族的两个源矢量以后,每个剩余的矢量就根据其靠近的族的源矢量,被分成两个族中的一个。
接下来,处理为每个族确定一个代表矢量(步骤506)。确定代表矢量的目的是找到现存的每个族的最佳的代表矢量。在一个执行当中,代表矢量被确定为在每个族中与所有其它的矢量距离最小的矢量。最小距离可以,例如通过确定一个族中的每个矢量与该族中的所有其它矢量之间的距离并且将距离相加来计算。具有最小的总距离的矢量被选择作为代表矢量。
当已经找到了两个代表矢量时,处理确定当图像块移动每个代表矢量所定义的距离和方向时,哪个代表矢量提供了最佳的匹配(步骤508)。这可以,例如通过使用两个相关窗口来进行,其中一个相关窗口集中在该矢量的原点,另一个集中在该矢量的结束点,并且确定两个相关窗口中的像素的绝对值的最小和(SAD)。下面将详细的描述如何进行操作,但是为了图5A的目的,重要的结果在于为两个代表矢量中的一个找到一个最佳的匹配。然后处理选择具有最佳匹配的代表矢量作为候选矢量(步骤510)。选定的矢量接下来被向下投射到最低的分辨率级别,然后处理结束。最佳的匹配矢量表示对向矢量,其他的矢量表示背景矢量。
上述的分割帮助解决了围绕较小的边缘细节的对象/背景矢量的不连续,例如一辆运动汽车上的引擎罩。分割也可以在不包含任何对象边缘的邻近区域上同样进行,因为多数矢量位于同一族当中,并且其它的族将仅含有一个或者一些“外部”矢量。
返回来参考图1和图2,在滤波矢量已经投射到最低的分辨率级别以后,生成了一组更新矢量(210a-210f)并且测试这些更新矢量从而找到与陈旧滤波投射运动矢量之间相差+/-1个像素或者+/-2个像素的最小SAD。在图2中,表明了六个更新矢量(210a-210f),由于水平方向的移动通常大于垂直方向的移动,因此两个用于水平方向上的+/-1个像素,两个用于水平方向上的+/-2个像素,以及两个用于垂直方向上的+/-1个像素。但是,本领域的技术人员能够理解,可以在与投射矢量(205)相关的任何水平和/或垂直方向上生成任何数目的更新矢量并对其进行测试。在一个执行当中,一个预测的摄影矢量也向下投射1∶4的级别。该摄影矢量将被进一步详细描述。
在一个执行当中,通过将一个图像块的候选矢量指向目标帧中的不同的像素位置来计算SAD,其中候选矢量源于源帧中的相同的图像块位置。对于每个候选矢量,一个矩形的窗口集中目标帧中的每个候选矢量所指向的像素上。一个相应的矩形窗口集中在源帧中候选矢量起源的像素上。然后计算两个窗口中的相应亮度像素,就是,在两个窗口中具有相同相对位置的像素的绝对差对。所有绝对差的总和就是SAD值。SAD值随着窗口的更加匹配而减小,当像素相同时,理想中SAD减小到零。实际上,当然,由于噪声和其他因素的影响,最佳矢量具有非零的SAD,但是最佳矢量将具有候选矢量组中的矢量的最小SAD。
当找到了最小SAD以后,最佳矢量,就是,具有最小SAD(210f)的矢量被选择并且存储在存储器中(步骤106)。然后处理检查是否存在更高的分辨率级别(步骤108)。如上所述,在本实施例中,存在两个更高的分辨率级别,因此处理传输最佳矢量(210f),将其投射到1∶2的分辨率级别上,如图3所示(步骤110)。当最佳矢量已经向上投射到1∶2级别以后(步骤104),围绕着该最佳矢量(210f)生成一组更新矢量(305a-305d)。在该级别上,围绕着向下投射到1∶2分辨率级别上的陈旧1∶1滤波矢量(205)也生成第二组更新矢量(310a-310d)。通过计算所有更新矢量中的最小SAD,如同在1∶4分辨率级别上一样,找到一个新的最佳矢量(305a)。然后选择该最佳更新矢量并且存储在存储器中(步骤106)。
然后处理再次检查是否存在任何更高的分辨率级别(步骤108)。在该点上,在分辨率金字塔中剩余一个更高的分辨率级别,因此处理再次返回到步骤104,其中图3中的1∶2分辨率级别的最佳矢量(305a)被滤波并且向上投射到如图4所示的最高的1∶1分辨率级别上。围绕着投射和滤波的最佳矢量(305a)再次生成一组更新矢量(405a-405d)(步骤104)。在该级别上,围绕着陈旧1∶1滤波矢量也生成第二组更新矢量(410a-410d)。围绕着摄影矢量(415)还生成第三组更新矢量(420a-420d)。
摄影矢量描述了帧内容的整体运动,与完全独立的计算每个图像决位置的本地矢量相反,摄影矢量可以用于协助找到一个更为真实的运动矢量。在几个通常发生的场景当中,由于一帧中每个位置上的摄影移动产生的运动矢量能够利用一个简单的模式轻松预测。例如,在摄像机镜头摇动摄影远处风景的情况下,所有的运动矢量将是相同的,并且等于摄像机的速度。当摄像机镜头移动到位于一个平面上的对象,例如墙面上的一幅画时,将是另外的一个场景。然后所有的运动矢量具有一个辐射方向,并且从图像中央的零增大到图像边缘的最大值。
在一个执行当中,处理试图将一个数学模式应用到使用最小平方算法计算的运动矢量上。摄影运动矢量和数学模型之间的最好的匹配表明上述的一个场景可能正在发生,并且可以使用摄影模式预测矢量作为下一个递归分级矢量估算步骤中的附加候选矢量。考虑到摄影矢量的优势在于递归分级搜索的递归部分是一个本地搜索方法,其可以会聚成一个虚假的本地最小值来代替真实的最小值。摄影预测矢量候选可能潜在的帮助避免虚假本地最小值的检测并且使处理直接前进到真实的最小值。
然后如同在1∶4和1∶2分辨率级别一样,找到新的最佳矢量(405d)(步骤106),并且存储在存储器中。然后处理再次检查是否存在任何更高的分辨率级别(步骤108)。这次不存在更高的分辨率级别,因此处理前进到步骤112,在那里选择出最佳矢量,并且使用该最佳矢量进行运动补偿,这样完成了当前帧的处理。
上述处理是针对帧中的所有4×4像素的图像块进行的,并且根据确定的运动矢量,在源帧和目标帧之间执行帧的内插,从而使由于人眼的跟踪造成的期待图像矢量和显示图像矢量之间存在较小的差异或者根本没有差异。
从上面的讨论可以看到,本发明提供了一个平滑并且精确的矢量场,并且仅使用了非常少的运算量。而且,由于分辨率的多种级别,降低了会聚延迟。与传统的方法相比可以使用更少的分辨率级别,并且由于通过在每个分辨率上测试投射矢量来保证在更高的分辨率级别改变分辨率,更低级别的矢量误差不会被放大。在滤波为一个先前的图像对所确定的运动矢量的过程中执行一个时间矢量的分割能够帮助解决围绕着较小的边缘细节发生对象-背景矢量不连续的问题,例如,一辆移动汽车上的引擎罩,或者类似类型的细节。同时,时间矢量分割不相反的影响不含有对象边缘的图像区域。在该场景中,外部矢量(即,不正确的矢量)或者矢量将从好的矢量中分离出来,因此改过程仍是有利的。
本发明也可以在数字电子电路或者在计算机硬件,固件,软件或者它们的结合当中实现。本发明中的装置可以在实际嵌入到一个计算机可读的存储设备中的计算机程序产品中,通过可编程的处理器的执行来实现;并且,本发明的方法步骤可以通过可编程的处理器通过执行指令程序,操作输入数据和产生输出来实现本发明的功能。本发明也可以在一个可编程系统中执行一个或者多个计算机程序来实现,所述的可编程系统包括至少一个可编程的处理器,至少一个输入设备以及至少一个输出设备,所述的处理器与一个数据存储系统耦和,用于从该系统接收数据和指令,并且向该系统发射数据和指令。每个计算机程序可以在高级流程或者面向对象的编程语言,或者如果需要在汇编或者在机器语言中执行。并且在任何情况下,语言可以是一个编译的或者解释的语言。合适的处理器包括,例如,通用和专用的微处理器。通常,一个处理器将从一个只读存储器和/或一个随机访问存储器接收指令和数据。通常,一个计算机将包括一个或者多个用于存储数据文件的大型存储设备;这样的设备包括磁盘,例如内部的硬盘和可移动盘;磁-光盘;以及光盘。存储设备适于实际的嵌入计算机程序指令和数据,包括所有形式的非易失性存储器,包括,例如半导体存储设备,例如EPROM,EEPROM。以及闪存设备;磁盘,例如内部硬盘和可移动盘;磁-光盘;以及CD-ROM盘。任何前述的盘都可以由ASIC(专用集成电路)补充或者集成到ASIC当中。
图6表明了一个用于执行本发明的计算机系统(600)。该计算机系统(600)仅是图形系统的例子,其中应用了本发明。该计算机系统(600)包括一个中央处理单元(CPU)(610),一个随机访问存储器(RAM)(620),一个只读存储器(ROM)(625),一个或者多个外部设备(630),一个图形控制器(660),主存储器设备(640和650)以及一个数字显示单元(670)。在现有技术中已知,ROM单向的向CPU(610)传送数据和指令,同时通常使用RAM(620)以双向的方式传输数据和指令。CPU(610)通常包括任意数量的处理器。主存储设备(640和650)包括任何合适的计算机可读介质。第二存储介质(680),通常是一个大型存储设备,也与CPU(610)双向耦合并且提供附加的数据存储容量。大型存储设备(680)是一个用于存储含有计算机代码,数据等的程序的计算机可读介质。大型存储设备(680)是一个通常比主存储设备(640,650)速度慢的存储介质,例如硬盘或者磁带。大型存储设备(680)可以是磁盘或者纸带读取器或者其他已知类型的设备。应当理解大型存储设备(680)中的保留的信息在合适的情况下可以以标准方式结合作为虚拟的存储器的RAM(620)的一部分。
CPU(610)也耦合到一个或者多个输入/输出设备(690)上,其包括,但不局限于视频监视器,跟踪球,鼠标,键盘,麦克风,触觉显示器,传感卡读取器,磁或者纸带读取器,输入板,铁笔,语音或者字迹识别器,或者其他已知的输入设备,例如其他的计算机。最后,CPU(610)使用(695)所示的网络连接,选择性的耦合到一个计算机或者无线电通讯网络,例如一个互联网网络或者一个内部网络。利用这样的网络连接,可以预期CPU(610)能够从网络接收信息,或者在执行上述步骤的过程中向网络输出信息。这样的信息,通常被表示为使用CPU(610)执行的指令序列,可以从网络接收以及输出到网络当中,例如以嵌入在载波中的计算机数据信号的形式。上述的设备和材料对于计算机硬件和软件领域的技术人员来说是非常熟悉的。
图形控制器(660)生成图像数据和一个相应的参考信号,并且将其提供给数字显示单元(670)。可以根据,例如从CPU(610)或者外部编码器(未显示)接收的像素数据,生成图像数据。在一个实施例中,图像数据以RGB的形式提供,并且参考符号包括本领域所熟知的VSYNC和HSYNC。但是,应当理解本发明可以以其他形式的数据和/或参考符号执行。例如,图像数据可以包括具有相应的时间参考信号的视频信号数据。
已经描述了本发明的多种执行方式。不论怎样,应当理解不背离本发明的精神和范围内可以做出各种改变。例如除了中间层的分级和时间矢量,向下投射产生的摄影模式矢量也可以用作SAD计算的候选矢量。因此,其他的实施例也包含在后面的权利要求的范围之内。