改进图像差异计算的效率

文档序号:1957993 发布日期:2021-12-10 浏览:19次 >En<

阅读说明:本技术 改进图像差异计算的效率 (Improving efficiency of image difference calculation ) 是由 M·鲍尔 B·巴里 V·托马二世 于 2019-02-26 设计创作,主要内容包括:本文公开了用于识别图像内的特征的方法、系统、装置和制品。一种示例装置包括:水平成本(HCOST)引擎,其用于将宏块的第一像素行应用于第一HCOST单元的输入,该第一HCOST单元包括多个差异计算器;以及差异计算器引擎,其用于将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器,多个差异计算器中的对应差异计算器用于计算在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的相应的绝对差异和(SAD)值。(Methods, systems, apparatuses, and articles of manufacture for identifying features within an image are disclosed herein. An example apparatus includes: a Horizontal Cost (HCOST) engine to apply a first row of pixels of a macroblock to an input of a first HCOST unit, the first HCOST unit including a plurality of difference calculators; and a difference calculator engine to apply a corresponding line of pixels of a search window of the source image to a corresponding difference calculator of a plurality of difference calculators of the first HCOST unit to calculate a respective Sum of Absolute Difference (SAD) value between (a) the first line of pixels of the macroblock and (b) the corresponding line of pixels of the search window.)

具体实施方式

计算和/或以其他方式确定图像中运动的发生是计算密集的。具体地,在第一时间实例期间,利用参考图像分析源图像以识别参考图像位于其中的源图像内的相对位置。然而,源图像可能是动态的,例如,来自高清晰度(例如,1080p、4k等)源(例如,摄像机(camera)、存储器、数据库等)的实时馈送。因此,在第二时间实例时分析源图像以识别参考图像可以位于其中的源图像内的第二相对位置。与参考图像在第一时间实例和第二时间实例时的像素位置的差异相对应的信息指示对象运动的方向和/或速度。

为了进一步说明,考虑源图像是包括车辆的道路的框架场景,车辆正在其中移动。在第一时间实例期间,没有信息指示车辆是否正在移动(因为没有与可以用于相对位置差异计算的参考图像相关联的先前像素位置)。另外地,没有信息指示车辆正在移动的方向。然而,如果参考图像被选择和/或以其他方式被指定作为车辆的一部分(例如,车辆的一个车轮),则当该相同的参考图像(例如,车轮)位于框架场景的第二(不同)相对位置时,在第二时间实例时确认车辆的运动。另外地,与源图像中感兴趣的对象相关联的方向改变信息可以基于对坐标系(例如,具有+/-x轴像素位置、+/-y轴像素位置和/或+/-z轴像素位置的笛卡尔坐标系)中的相对像素值改变的分析来确定。

鉴于更新后的视频标准,对源图像的改变可能以不断增加的速率发生。例如,4k视频馈送(例如,交通摄像机监视系统,或用于电视广播的4k超高清晰度(UHD))为3,840像素宽(例如,x轴)和2,160像素高(例如,y轴)。另外地,视频摄像机包括对应的帧速率,例如,30帧每秒(fps)、60fps等。在30fps的摄像机的情况下,处理取回和/或以其他方式获取的图像的对应持续时间为30毫秒(ms)。因此,在获取图像的第一时间实例之后,必须搜索该图像并将其与参考图像(例如,车辆车轮的图像)进行比较以确定其相对位置。换言之,获取源图像、将其写入存储器、对其进行后处理(例如,增加/降低亮度级别)、将其从存储器取回、以及围绕源图像移动参考图像(或在一些情况下,移动两个或更多个参考图像)以与图像内的像素/内核进行比较,从而找到图像中的与参考图像最相似的区域。相似程度是通过绝对差异的方式来测量的,但也可以使用其他差异技术(对于30fps的摄像机,在30ms内进行)。在相对最低差异值的情况下,确认匹配与其中检测到最低差异值的像素位置(例如,像素网格的x和y坐标位置)相对应。如本文所使用的,“匹配”是基于相对最低差异值的,即使像素比较未100%匹配。

当识别出在一个或多个感兴趣的图像内的特征时,本文公开的装置、方法、系统和制品改进了计算效率。本文公开的示例包括差异计算器的结构布置和这种差异计算器的分组(数量),其消除了与先前技术相关联的用于识别感兴趣的源图像内的(多个)匹配像素的特定电路。另外地,如下面进一步详细描述的,本文公开的示例减少了识别这种匹配像素的硬件所要求的计算负担。

图1是被构造为以与本专利的教导一致的方式识别图像内的特征的示例图像分析系统100的示意图。在图1所示的示例中,图像分析系统100包括通信地连接到图像(例如,来自一张或多张照片、视频等的图像)源104的示例图像分析器102,该图像源104可以包括(多个)示例摄像机106、(多个)示例数据库108等。在一些示例中,视频源104经由网络110通信地连接到图像分析器102,而在其他示例中,视频源104包括直接连接112。示例图像分析器102可以包括其自己的一个或多个处理资源,和/或在一些示例中,图像分析器102可以占用来自处理资源114的处理服务。示例处理资源114包括但不限于计算机、服务器、基于云的服务器群(例如,Amazon Web Service(AWS)、Rackspace Cloud、Google Cloud、MicrosoftAzure等)、现场可编程门阵列(FPGA)和/或专用集成电路(ASIC)。

基于视频输入数据,示例图像分析器102识别与感兴趣的图像的一个或多个像素和/或部分相关联的位置信息(例如,相对位置信息)。在一些示例中,位置信息指示在感兴趣的图像内的运动,例如,与感兴趣的图像内的子图像(例如,车辆、人等)相关联的运动。

图2是图1的示例图像分析器102的示意图。在图2所示的示例中,示例图像分析器102包括示例硬件评估器202。示例硬件评估器202包括示例搜索区域确定器204、示例差异计算器数量确定器206和示例水平成本(HCOST)数量确定器208。图2的示例图像分析器102还包括示例图像取回器210、示例宏块引擎212、示例搜索区域引擎214、示例排序引擎216、示例差异计算器引擎218、示例桶形移位引擎220、示例反馈引擎222和示例HCOST引擎224。在该示例中,HCOST引擎224实现用于宏块像素应用的单元。用于宏块像素应用的单元可以另外地或可替代地由宏块像素应用单元来实现。在该示例中,差异计算器引擎218实现用于搜索窗口应用的单元。用于搜索窗口应用的单元可以另外地或可替代地由搜索窗口应用单元来实现。在该示例中,差异计算器数量确定器206实现用于确定差异计算器数量的单元。用于确定差异计算器数量的单元可以另外地或可替代地由确定差异计算器数量单元来实现。在该示例中,搜索区域引擎214实现用于搜索区域评估的单元。用于搜索区域评估的单元可以另外地或可替代地由搜索区域评估单元来实现。在该示例中,排序引擎216实现用于排序的单元。用于排序的单元可以另外地或可替代地由排序单元来实现。

本文公开的示例考虑图1和/或图2的示例图像分析器102结合在其中进行搜索的9像素(x方向)乘以9像素(y方向)的搜索区域和3像素乘以3像素的宏块。然而,示例9×9搜索区域和/或示例3×3宏块在本文中是为了方便而非限制进行讨论的。9像素(x方向)乘以9像素(y方向)的示例搜索区域在本文中被称为9×9搜索区域,如图3A中示出的。在图3A所示的示例中,9×9搜索区域302包括x方向304和y方向306。在一些示例中,搜索区域在本文中被称为搜索窗口。搜索区域302的特定像素大小是基于选定的搜索跨度值来确定的,其中搜索跨度值指示将被搜索的宏块位置周围的像素的数量。为了说明,图3A所示的示例包括具有3像素(x方向)乘以3像素(y方向)的大小的宏块308。示例宏块308包括参考像素310(例如,示例宏块308的左上像素),其可以在9×9搜索区域内的搜索实例期间在任何方向上移动三(3)个像素。如下面进一步详细描述的,示例宏块308(例如,上面提到的示例子图像)包括要在数字图像(例如,感兴趣的图像)和/或数字图像的一部分(例如,示例搜索区域302)中搜索的像素。例如,感兴趣的图像可以是具有车辆的场景,其中该场景可以是形成电影或实时图像的许多场景中的一个。继续前述示例,宏块308可以是用于搜索场景的车辆的一部分(例如,车轮)。在车辆的一部分(例如,车轮)在场景中在第一时间处被识别为对应于第一像素位置(例如,感兴趣的图像的左下区域),并且车辆的该部分在场景中在第二时间处被识别为对应于第二像素位置(例如,感兴趣的图像的右下区域)的情况下,可以确定对象移动的指示(例如,车辆正在感兴趣的图像/场景中从左到右行进)。

为了说明所得到的搜索区域,图3B示出了具有位于其中的多个单独参考宏块308的示例搜索区域302。当示例参考像素310在搜索区域302内具有左上方位置时,多个单独参考宏块308以完整宏块(例如,3×3像素宏块)能够在搜索内适合的方式定位。在示例搜索区域302的第一行312中,示例宏块308可以被定位在七(7)个不同的位置,其中示例参考像素310具有第一行312的左上位置,并且完整宏块308在9×9搜索区域302内适合。另外地,宏块的七(7)行(见行313)可以在示例9×9搜索区域302内适合,从而导致(在针对参考宏块的匹配搜索一个或多个附加搜索区域之前)在搜索区域中的四十九(49)个可能的宏块位置需要被评估。在操作中,因为宏块是在感兴趣的图像(示例9×9搜索区域302)中被搜索的参考图像(例如,车辆的车轮),因此搜索区域的49个位置中的每一个都导致像素比较以确定相似程度。像素比较发生在(a)宏块像素与(b)在搜索区域302的相对位置处的感兴趣的图像像素之间。如下文进一步详细描述的,示例49个位置中的每一个位置将导致数值的比较差异值,使得具有相对更接近的总和等于零的差异值被认为是更接近的匹配。

图3C示出了示例宏块308的进一步细节。在图3C所示的示例中,宏块308包括在像素位置(0,0)处的参考像素310,并且宏块308为3像素宽乘以3像素长(高)。图3D示出了示例宏块308的进一步细节,其中第一行314被标记和/或以其他方式指定为参考“R0”,第二行316被标记和/或以其他方式指定为参考“R1”,并且第三行318被标记和/或以其他方式指定为参考“R2”。

在示例图像分析器102的第一操作模式中,示例硬件评估器202确定硬件参数是否是已知。如本文所使用的,硬件参数指代以下各项的示例类型和/或数量:计算机处理单元(CPU)、图形处理单元(GPU)、差异计算器(有时在本文中称为比较绝对差异和(comparisonsum-of-absolute-difference,CSAD)单元)、累加器、水平成本(HCOST)单元、比较单元等。一般而言,图1和/或图2的示例图像分析器102当在部分地通过采用特定硬件配置/布置的特定操作来识别图像内的特征时实现改进的效率。本文公开的示例考虑针对具有特定数量的x方向像素和特定数量的y方向像素的搜索区域的图像处理,但是本文公开的示例不限于此。

例如,在图4所示的示例中示出了当识别图像内的特征时通过本文公开的示例由示例第一比较单元400实现改进的效率。在一些示例中,第一比较单元400是位于图1的示例处理资源114中的硬件,而在一些示例中,第一比较单元400是位于示例图像分析器102中的硬件。在一些示例中,第一比较单元400是专用集成电路(ASIC),而在一些示例中,第一比较单元400是一个或多个现场可编程门阵列(FPGA)资源。在一些示例中,图像分析器102以与输入特性(例如,示例视频源104的分辨率值、像素窗口搜索区域约束/设置、应用的帧速率期望等)一致的方式调用特定的FPGA资源。

在图4所示的示例中,第一比较单元400包括像素输入402,该像素输入402包括来自图1的示例图像(例如,视频)源104和/或图2的示例图像取回器210的像素数据。将像素输入402中的与参考像素相关联的相应的像素输入提供给桶线移位器410作为输入。如下文进一步详细讨论的,示例桶线移位器410以允许在图像分析器102和/或对应的处理资源114的不同时钟周期迭代期间对源图像进行比较和/或差异计算的方式来布置参考像素输入。图3的示例第一比较单元400包括水平成本(HCOST)单元404。继续上面标识出的3×3参考宏块308的示例和示例9×9搜索区域302(出于解释而非限制目的的示例),图4所示的示例比较单元400包括示例第一HCOST单元404A、示例第二HCOST单元404B和示例第三HCOST单元404C(通常在本文中统称为HCOST单元404)。在一些示例中,HCOST单元的数量基于参考宏块的高度,但是可以以不同程度的优化和/或效率来利用其他示例。每个HCOST单元包括一定数量的CSAD单元406(差异计算器)和对应的排序单元408。为了维持对图4所示的示例的结构参考的一致方式,示例第一HCOST单元404A包括相应的第一CSAD单元406A和第一排序单元408A,示例第二HCOST单元404B包括相应的第二CSAD单元406B和第二排序单元408B,并且示例第三HCOST单元404C包括相应的第三CSAD单元406C和第三排序单元408C。

图5示出了对应于图4的示例第一HCOST单元404A的附加细节。在图5所示的示例中,第一HCOST单元404A包括第一CSAD单元502A(标记为CSAD[0])至第七CSAD单元502G(标记为CSAD[6])(CSAD单元在本文通常被统称为CSAD单元502或差异计算器502)。示例第一CSAD单元502A通信地连接到第一加法器504A,该第一加法器504A进而通信地连接到第一累加器506A。示例第一累加器506A包括到示例第一加法器504A的第一反馈路径508A。虽然在图5的示例中未示出,但HCOST单元的所有CSAD单元都包括类似构造的加法器、累加器和反馈路径。用于每个CSAD单元502的每个累加器输出(例如,对应于示例第一CSAD单元502A的示例第一累加器506A的示例第一输出510A)通信地连接到示例排序网络408A。示例排序网络408A包括指示由CSAD单元502中的相应一个计算出的最小绝对差异和(SAD)值的最小SAD输出512。示例排序网络408A还包括指示与最小CSAD值输出512相关联的像素位置值的位置输出514。

如上面所描述的,图2的示例硬件评估器202确定硬件参数是否是已知的。图4的示例第一比较单元400和/或图5的示例第一HCOST单元404A示出了由示例硬件评估器202分析以部分地识别示例图像分析系统100的能力的示例硬件参数。在示例硬件评估器202确定与硬件相关联的细节是未知的(例如,当前硬件参数未位于和/或以其他方式描绘在示例图像分析器102的存储位置中)情况下,示例硬件评估器202识别搜索跨度值(例如,x和y方向上的+/-3个像素)以及宏块大小(例如,x方向上的3个像素,y方向上的3个像素)。示例搜索区域确定器204以与示例等式1A和1B一致的方式计算搜索区域值。

SA(宽度)=(2*x方向上的搜索跨度)+(宏块的宽度)

等式1A

SA(高度)=(2*y方向上的搜索跨度)+(宏块的高度)

等式1B

在等式1A和1B所示的示例中,SA指代是搜索区域宽度或高度,例如,图3A的示例搜索区域宽度值和高度值。为了说明鉴于+/-3个像素的示例搜索跨度和3个像素的宏块宽度,示例等式1揭示了81个像素的搜索区域,其在图3A所示的示例中示出。特别地,81个像素的搜索区域指代相等数量的行和列,因此搜索区域包括九(9)个行和九(9)个列。

虽然示例搜索区域确定器204确定搜索区域具有相等数量的行和列,如图3A中示出的,但存在能够在示例搜索区域(例如,图3A的示例搜索区域302)内适合的有限数量的完整宏块。搜索区域确定器204以与示例等式2一致的方式计算搜索区域内可能的宏块行的数量。

MB行=2*(搜索跨度)+1

等式2

在等式2所示的示例中,因为前述示例包括3个像素的搜索跨度,所以宏块行的数量被计算为值七(7)。图3B中示出了能够在示例搜索区域内适合的可能的宏块行的数量,其中完整的宏块可以被放置在行0(第一行312)至行6(第七行314)内。然而,在示例宏块308B(参见虚线宏块)被这样放置的情况下,示例宏块308B将不在示例搜索区域302内适合:示例宏块308B的参考像素310被放置在第八行316上。换言之,被放置在示例第八行316的任何宏块将导致超出示例搜索区域302的评估边界的丢失像素330的突出部分(overhang)。

在一些示例中,给定实现方式(例如,可用的处理设备)中的CSAD单元的数量是固定的。取决于搜索区域选择,可以在分析工作期间采用不同数量的CSAD单元。在搜索区域超过所需数量的CSAD单元的情况下,本文公开的示例使得能够进行多次迭代以完全搜索感兴趣的搜索区域。在其他示例中,在鉴于可用的CSAD单元的数量而使感兴趣的搜索区域相对较小的情况下,本文公开的示例使得能够在一些CSAD单元保持空闲的情况下进行操作。确定宏块行的数量对于确定在每个HCOST单元内使用的差异计算器(CSAD单元)(例如,图5的示例差异计算器502)的对应数量是重要的。示例差异计算器数量确定器206基于可以在示例搜索区域内适合的宏块行的数量来确定所使用的差异计算器的数量。因为每个差异计算器包括对应的累加器,所以当基于可以在示例搜索区域内适合的宏块行的确定出的数量时,累加器的对应数量也是已知的。示例HCOST数量确定器208基于宏块高度来确定所使用的HCOST单元的数量。在本文讨论的非限制性示例中,因为宏块高度为3个像素,所以HCOST单元的对应数量为三,这些HCOST单元被示为图4的HCOST[0](404A)、HCOST[1](404B)和HCOST[2](404C)。

在一些示例中,硬件评估器202继续基于可用的硬件资源来比较图像,而在一些示例中,硬件评估器202将硬件资源分配为例如FPGA电路。在一些示例中,硬件评估器202调用FPGA电路配置来分配特定数量的HCOST单元、特定数量的差异计算器等。在一些示例中,硬件资源是具有特定数量的HCOST单元和/或差异计算器的一个或多个ASIC。

继续采用图4的示例第一比较单元400和图5的示例HCOST单元(例如,示例第一HCOST单元404A)的示例图像分析器102的示例第一操作模式,示例图像取回器210取回要被分析的感兴趣的候选图像。示例宏块引擎212取回和/或以其他方式选择感兴趣的宏块,其可以包括参考图像或要被搜索的候选图像的图像的一部分。如上面所描述的,候选图像可以是其中具有汽车图像的框架场景,并且示例参考图像可以是该汽车的一部分(例如,汽车的车轮)。示例宏块引擎212标记示例宏块(例如,图3C和图3D的示例宏块308)的行和像素参考。示例搜索区域引擎214从取回的候选图像中选择感兴趣的搜索区域,并标记其行和像素参考(例如,参见图3A和图3B的示例搜索区域302)。

示例搜索区域引擎214识别和/或以其他方式标记示例搜索区域302的候选行,如图6的右手侧示出的。在图6所示的示例中,候选行C0至C6表示示例搜索区域302的特定行,这些特定行可以适合完整的宏块308的示例参考像素310。在图6所示的示例中,候选行C7和C8不包含参考像素310,因为这样做只会导致宏块308在示例搜索区域302内的局部表示(例如,导致丢失像素330的突出部分,如图3B中示出的)。

图7示出了示例图像分析器102的示例第一操作模式时序图700,以及用于本文讨论的示例3像素乘以3像素宏块示例的对应的第一比较单元400操作。在图7所示的示例中,时序图700包括第一HCOST单元(HCOST 0)404A、第二HCOST单元(HCOST 1)404B和第三HCOST单元(HCOST 2)404C。示例时序图700还包括时钟周期的行708(时钟周期0至9),以示出当执行在候选行(例如,C0)与相应的参考行(例如,R0)之间的比较时,相应的HCOST单元的操作。例如,在第一时钟周期(时钟周期0)710期间,示例第一HCOST单元404A将第一参考行R0与示例第一候选行C0内的递增位置进行比较。特别地,当考虑本文讨论的3×3示例时,第一时钟周期调用数量为七(7)个差异计算器(例如,CSAD[0]502A至CSAD[6]502G),来(并行)计算第一参考行R0在示例第一候选行C0上的不同重叠位置处的差异值。

为了示出示例图像分析器102的第一操作模式和示例第一HCOST单元404A的相应的差异计算器的示例操作,图8A示出了在第一候选行C0 802A与参考宏块308的第一参考行R0 804A之间的差异计算的图形表示。特别地,第一差异计算器CSAD[0]502A在第一时钟周期(时钟周期0)期间针对第一候选行C0 802A的像素0、1和2(阴影)计算第一候选行C0 802A与第一参考行R0 804A之间的像素值差异。图8A还示出了关于由第二差异计算器CSAD[1]502B进行的差异计算的第一候选行C0 802B。第二差异计算器CSAD[1]502B在第一时钟周期期间计算在第一候选行C0 802B的像素1、2和3(不同于CSAD[0]502A所关注的像素0、1和2)与参考宏块308的相同的三个像素(R0)之间的像素值差异。换言之,相应的差异计算器(差异计算器CSAD[0]502A至CSAD[6]502G)负责候选行C0从左向右的递增移位,以及每个递增移位的所得到的差异值。为便于解释,在该示例中仅针对第一HCOST单元404A的第一时钟周期解释了图8A的前两个差异计算器。

返回图7所示的示例,虽然上面描述的第一时钟周期710执行了在(a)第一候选行C0与(b)参考宏块的第一行R0 804A之间的像素比较(参见虚线圆圈720),但第二(随后的)时钟周期继续执行对附加的候选行(例如,C1)与参考宏块的附加的行(例如,R1)的像素比较(参见虚线圆圈722)。为了说明,图8B示出了在第二候选行C1 802C与参考宏块308的第二参考行R1 804B之间的差异值计算的图形表示。在该第二时钟周期(时钟周期1)期间,HCOST[0]404A的第一差异计算器CSAD[0]502A计算在第二候选行C1 802C的像素0、1和2与参考宏块308的第二行R1 804B的像素0、1和2之间的像素值差异。然而,因为差异计算器502A需要参考宏块的替代行(例如,R1)(与上面描述的在第一时钟周期期间的第一行R0相比),所以对示例第一比较单元400的输入必须由示例桶线移位器410在该第二时钟周期(时钟周期1)的开始时进行轮换(rotate)。类似地,在该第二时钟周期期间,示例第二差异计算器CSAD[1]502B计算在第二候选行C1 802D的像素1、2和3(向右的递增移位)与第二行R1 804B的相同的三个像素0、1和2之间的像素值差异。如上面所描述的,在上面的图8B中仅示出了差异计算器中的两个(例如,CSAD[0]502A和CSAD[1]502B),但其余的差异计算器(例如,CSAD[2]至CSAD[6]502G)以类似的方式继续计算在从左到右递增移位时在C1与R1之间的差异值。

此时,在第一操作模式的示例操作中,已经发生了两个时钟周期(时钟周期0和时钟周期1)针对参考宏块的两行(R0和R1)处理两个完整的候选行(C0和C1)。然而,尚未在搜索区域(例如,搜索区域302)内分析完整的参考宏块(例如,示例宏块308),并且要求第三个时钟周期(参见图7的虚线圆圈724)来完成对候选行C0、C1和C2的完整扫描和比较。图8C示出了在搜索区域302的第三候选行C2 802E与参考宏块308的第三参考行R2 804C之间的差异计算的图形表示。在该第三时钟周期(时钟周期2)期间,第一差异计算器CSAD[0]502A计算在第三候选行C2 802E的像素0、1和2与参考宏块308的第三行R2 804C的像素0、1和2之间的像素值差异。然而,类似于上面描述的在第一时钟周期(时钟周期0)与第二时钟周期(时钟周期1)之间的转换,从第二时钟周期(时钟周期1)到第三时钟周期(时钟周期2)的这种瞬间转换应用了参考宏块的不同行。因此,对示例第一比较单元400的输入必须由示例桶线移位器410在该第三时钟周期开始时轮换。类似地,在该第三时钟周期期间,示例第二差异计算器CSAD[1]502B计算在第三候选行C2 802F的像素1、2和3(向右的递增移位)之间的像素值差异。此时,在第一操作模式的示例操作中,已经针对候选行在搜索区域内分析了完整的参考宏块308,该候选行的数量等于宏块中的行的数量。在图7所示的示例中,候选行“S”的非重叠集合是示例搜索区域302的完整的搜索区域部分。在图7所示的示例中,候选行的第一完整的非重叠集合被示为“S0”730。

图9是示例搜索区域图900,其示出了在相邻布局中三个单独时间的示例搜索区域302。特别地,示例搜索区域图900包括第一搜索区域部分902(其包括候选行的非重叠集合S0、S3和S6)、第二搜索区域部分904(其包括候选行的非重叠集合S1和S4)以及第三搜索区域部分906(其包括候选行的非重叠集合S2和S5)。在第一搜索区域部分902中示出了候选行的示例第一完整的非重叠集合S0 730,其中S0已经关于参考宏块308对所有候选行C0、C1和C2执行了比较。示例搜索区域引擎214在每个时钟周期之后确定候选行的非重叠集合(S)是否完整。如果候选行的非重叠集合(S)不是完整的,则示例差异计算器引擎218递增一行以进行分析(例如,从C0到C1、从R0到R1等),并且在由示例桶形移位引擎220进行桶形移位轮换之后将像素的新集合作为输入应用于(多个)示例HCOST模块。

值得注意的是,在每个时钟周期结束时,示例反馈引擎222激活用于对应的差异计算器(例如,CSAD[0]502A)的示例反馈路径(例如,图5的反馈路径508A)。一般而言,每个差异计算器(例如,示例第一CSAD单元502A)针对参考宏块的一行(例如,R1)计算差异值,并经由示例反馈路径508A保留先前行(例如,R0)的值(如果有)。因此,当参考块的所有行(例如,R0、R1和R2)已经用于对搜索区域执行比较时,示例排序引擎216将针对每个特定差异计算器的累积的绝对差异和(SAD)值应用于和/或以其他方式提供到示例排序网络408A。

示例排序引擎216确定相对最低值和对应的位置。特别地,示例排序引擎216考虑所有的差异计算器值,以视图找到具有最低相对值的值,该值指示参考宏块图像与候选源图像的最接近匹配。这样的最小值和对应的位置信息被转发到示例运动向量(MV)计算器450,如图4所示的示例中所示。示例MV计算器基于在搜索区域内的宏块的具有最低的累积差异的像素坐标来计算MV,并比较行的非重叠集合(S0至S6)的所有分组以找到绝对最小差异值及其对应的位置。换言之,示例排序引擎216确定在示例搜索区域302内的宏块308的49个可能位置中的哪个位置具有最接近的匹配。鉴于其中宏块308是位于搜索区域302的特定部分中的车辆的车轮的上面公开的示例,这种匹配将识别该车轮的位置。因此,在车轮的先前位置位于感兴趣的图像(例如,搜索区域302)内的不同位置的情况下,该车轮的新位置识别车辆在感兴趣的图像内的运动的发生。

简要地返回图7所示的示例,其指示示例图像分析器102的第一操作模式,上面公开的示例仅考虑了与HCOST[0]404A相关联的前三个时钟周期(时钟周期0、1和2)。在这三个时钟周期结束时,由图4的示例比较单元400对候选行的第一非重叠集合(S0,其包括候选行C0、C1和C2)进行分析。然而,如图7所示的示例所示,在连续的时钟周期期间以类似的方式调用附加的HCOST单元,以评估候选行的其他非重叠集合(即,S1至S6)。值得注意的是,如上面所描述的,对评估和识别候选行的相应的非重叠集合的相对最低SAD值的每次努力都要求附加的轮换努力和累加器反馈(例如,图5的示例反馈路径508A)努力。换言之,在示例第一HCOST单元(HCOST[0]404A)的前三个时钟周期期间,示例桶线移位器410将作为对HCOST单元的输入的像素从R0轮换到R1(参见时钟周期0到时钟周期1),将作为输入的像素从R1轮换到R2(参见时钟周期1到时钟周期2),然后必须将作为输入的像素从R2轮换回R0(参见时钟周期2到时钟周期3)。参考示例第一操作模式还值得注意的是,图4所示的示例中的示例HCOST单元中的每一个包括对应的排序单元(例如,对应于示例第一HCOST单元404A的示例第一排序单元408A、对应于示例第二HCOST单元404B的示例第二排序单元408B、以及对应于示例第三HCOST单元404C的示例第三排序单元408C)。

为了减少专用于像素轮换和/或反馈路径的处理周期的数量、减少示例比较单元的硬件占用空间、以及通过减少数据移动的量(例如,移除桶形移位器任务,如下面进一步详细描述的)来减少动态功耗,下面公开了示例图像分析器102的第二操作模式以识别图像内的特征。图10是示例第二比较单元1000的示意图。在图10所示的示例中,比较单元1000是位于图1的示例处理资源114中的硬件,而在一些示例中,第二比较单元1000是位于示例图像分析器102中的硬件。在一些示例中,第二比较单元1000是ASIC,而在一些示例中,第二比较单元1000是一个或多个FPGA资源。在一些示例中,图像分析器102以与输入特性(例如,示例视频源104的分辨率值、像素窗口搜索区域约束/设置、应用的帧速率期望等)一致的方式调用特定的FPGA资源。

在图10所示的示例中,第二比较单元1000包括像素输入1002,该像素输入1002包括来自图1的示例视频源104和/或图2的示例图像取回器210的像素数据。图10的示例第二比较单元1000包括HCOST单元1004。继续上面标识出的3×3参考宏块308的示例和示例9×9搜索区域302(出于解释而非限制目的的示例),图10所示的示例第二比较单元1000包括示例第一HCOST单元1004A、示例第二HCOST单元1004B和示例第三HCOST单元1004C(通常在本文中统称为HCOST单元1004)。类似于图4的示例第一比较单元400,图10所示的示例中的HCOST单元的数量基于参考宏块的高度。每个HCOST单元1004包括一定数量的CSAD单元1006。具体地,示例第一HCOST单元1004A包括相应的第一CSAD单元1006A,示例第二HCOST单元1004B包括相应的第二CSAD单元1006B,并且示例第三HCOST单元1004C包括相应的第三CSAD单元1006C。

图11示出了对应于图10的示例第一HCOST单元1004A的附加细节。在图11所示的示例中,第一HCOST单元1004A包括第一CSAD单元1102A(标记为CSAD[0])至第七CSAD单元1102G(标记为CSAD[6])(CSAD单元通常统称为CSAD单元1102或差异计算器1102)。示例第一CSAD单元1102A通信地连接到第一加法器1104A,该第一加法器1104A进而通信地连接到第一累加器1106A。虽然在图11的示例中没有示出,但HCOST单元的所有CSAD单元都包括类似构造的加法器和累加器。示例第一累加器1106A的输出值被路由到示例第一局部SAD线1110A。

不同于图4的示例第一比较单元400,图10所示的示例的相应的HCOST单元1004的输出1003被级联,使得一个HCOST单元的输出提供给随后的HCOST单元作为输入。因此,来自相应的局部SAD线(例如,图11的示例第一局部SAD线1110A)的值被提供给相应的先前SAD线1108(例如,图11的示例第一先前SAD线1108A)作为输入。级联HCOST单元的前述示例硬件配置的至少一个好处是不需要反馈路径(例如,图5的示例反馈路径508A),并且不需要桶形移位器的(多个)轮换努力,从而在评估像素信息时节省计算周期和/或能量。在其中底层硬件包括用于轮换任务的一个或多个桶形移位器的一些示例中,本文公开的示例使得能够绕过(多个)轮换任务和/或以其他方式绕过与这种轮换任务相关联的硬件(例如,绕过(多个)桶形移位器)。换言之,当将SAD值从一个HCOST单元级联到另一HCOST单元时,本文公开的示例绕过轮换宏块的第一像素行。另外地,不同于图4的示例第一比较单元400,图10的示例第二比较单元1000不包括和/或以其他方式消除对桶线移位器(例如,图4的示例桶线移位器410)的需要。因此,结合图10所示的示例第二比较单元1000和图11的示例HCOST单元架构1004减少了计算周期、处理功率和硬件占用空间大小。

为了说明图10的示例第二比较单元1000以及图10和图11的相关联的示例HCOST单元1004(例如,示例第一HCOST单元1004A、示例第二HCOST单元1004B和示例第三HCOST单元1004C)的操作,在图12中示出了示例第二操作模式时序图1200。在图12所示的示例中,时序图1200包括示例第一HCOST单元(HCOST 0)1004A、示例第二HCOST单元(HCOST 1)1004B和示例第三HCOST单元(HCOST 2)1004C。类似于图7所示的示例,图12的示例第二操作模式时序图1200包括时钟周期的行1208(时钟周期0至9),以说明当执行在候选行与参考行之间的比较时相应的HCOST单元的操作。

类似于图7的示例时序图700,在图12所示的示例中,消耗了三个时钟周期来比较来自候选行的第一非重叠集合S0 1230的像素。特别地,示例差异计算器引擎218计算以下各项:(a)在第一时钟周期(时钟周期0)期间在候选行C0与参考行R0之间的像素差异值(参见虚线圆圈1220);(b)在第二时钟周期(时钟周期1)期间在候选行C1与参考行R1之间的像素差异值(参见虚线圆圈1222);以及(c)在第三时钟周期(时钟周期2)期间在候选行C2与参考行R2之间的像素差异值(参见虚线圆圈1224)。与图7所示的示例不同,在这三个时钟周期期间,所有三个HCOST单元都参与比较候选行的第一非重叠集合S0 1230的像素。因此,来自每个参与HCOST单元的SAD值级联到下一HCOST单元,由此消除利用桶形移位器进行像素轮换的任何需要。换言之,示例差异计算器将任何特定的HCOST单元中的相应的差异计算器的输入约束为仅评估宏块的一个像素行。

值得注意的是,在图12所示的示例中的每个示例HCOST单元(以及图10的相关联的第二比较单元1000和图11的相关联的CSAD架构)在所有时钟周期内的比较努力期间仅取一行作为输入。每个HCOST单元的宏块行是恒定的并且减少了数据移动,因此减少了功耗。即,示例第一HCOST单元1004A仅处理参考行R0,示例第二HCOST单元1004B仅处理参考行R1,并且示例第三HCOST单元1004C仅处理参考行R2,由此通过避免对(例如,经由桶形移位器的)像素轮换的任何需要来改进计算效率。

另外地,由于图10的示例第二比较单元1000的级联架构(其避免了在每个HCOST单元内包括冗余的排序单元(例如,图4的各个排序单元408A、408B和408C)的需要(如图4所示的示例中的情况)),因此候选行的所有重叠集合S0至S6最终由最后的HCOST单元(参见图12中的HCOST[2]1004C)确定。相反,因为来自相应的HCOST单元的SAD确定被级联到随后的HCOST单元,所以图10的示例第二比较单元1000仅要求单个排序单元1008。示例单个排序单元1008包括对应的SAD输出1012和位置输出1014,该SAD输出1012和位置输出1014馈送示例MV计算器1050。因此,图10的示例第二比较单元1000的特定架构和图12的相关联的时序图1200进一步促进了计算资源减少、节能和硬件尺寸减小。

图13A中示出了示例图像分析器102的示例第二操作模式和示例HCOST单元的相应的差异计算器的进一步说明。图13A示出了在候选行C0 1302与参考宏块308的第一参考行R0 1304之间的差异计算的图形表示。特别地,示例第一CSAD[0]1002A在第一时钟周期(时钟周期0)期间针对第一候选行C0 1302A的像素0、1和2(阴影)计算候选行C0 1302A与第一参考行R0 1304A之间的像素值差异。图13A还示出了关于由第二差异计算器CSAD[1]1002B进行的差异计算的第一候选行C0 1302B。第二差异计算器CSAD[1]1002B在第一时钟周期期间计算在第一候选行C0 1302B的像素1、2和3(不同于CSAD[0]1002A所关注的像素0、1和2)与参考宏块308的相同的三个像素(R0)之间的像素值差异。

如上面所描述的,相应的差异计算器(差异计算器CSAD[0]1002A至CSAD[6]1002G)负责候选行C0从左向右的递增移位,以及每个递增移位的所得到的差异值。为便于解释,在该示例中仅针对第一HCOST单元1004A的第一时钟周期解释了图13A的前两个差异计算器。然而,如在图11所示的示例中可以看到的,附加的CSAD单元可以并行操作,附加的CSAD单元中的每一个关注针对感兴趣的候选行的单独的移位像素分组。

返回图12所示的示例,虽然上面所描述的第一时钟周期(时钟周期0)执行了在(a)第一候选行C0与(b)参考宏块的第一行R0 1304A之间的像素的比较(参见虚线圆圈1220),但第二(随后的)时钟周期(时钟周期1)继续执行对附加的候选行(例如,C1)与参考宏块的附加行(例如,R1)的像素比较(参见虚线圆圈1222)。另外地,在第二周期期间,第一行R0仍然与候选行C1进行比较,同时在第二行R1与候选行C1之间进行比较(以此类推,如图12所示)。然而,与图7所示的其中第一操作模式在所有三个时钟周期期间使用相同的HCOST单元评估S0(由此要求经由示例桶形移位器410进行像素轮换)的示例不同,在图12所示的示例中,参考宏块的附加行(例如,R1)和候选行C1采用级联的HCOST单元(参见虚线圆圈1222和相关联的HCOST1 1004B)。

在图13B所示的示例中,示出了从对C0和R0的分析(参见虚线圆圈1220)到对C1和R1的分析(参见虚线圆圈1222)的图形进展。在图13B所示的示例中,第二HCOST单元1004B的第一差异计算器用于评估在第二候选行C1 1302C与参考宏块的第二行R1 1304B之间的像素(例如,单元0、1和2)。类似地,第二HCOST单元1004B的第二差异计算器用于评估在第二候选行C1 1302D的右移的部分(例如,单元1、2和3)与参考宏块的第二行R1 1304B之间的像素。

在图13C所示的示例中,示出了从对C1和R1的分析(参见虚线圆圈1222)到对C2和R2的分析(参见虚线圆圈1224)的图形进展。在图13所示的示例中,第三HCOST单元1004C的第一差异计算器用于评估在第三候选行C2 1302E与参考宏块的第三行R2 1304C之间的像素(例如,单元0、1和2)。类似地,第三HCOST单元1004C的第二差异计算器用于评估在第三候选行C2 1302F的右移的部分(例如,单元1、2和3)与参考宏块的第三行R2 1304C之间的像素。

简要地返回图11所示的示例,在示例搜索区域引擎214确定搜索区域的所有非重叠行都已经被评估并且计算出对应的SAD值之后,示例排序引擎216调用图10的排序单元1008以识别对应的总体最小SAD值,并且经由示例SAD输出1012发送该值。另外地,示例排序单元1008识别与最小SAD值相关联的对应的像素位置信息,并且经由示例位置输出1014发送这种位置信息。因此,关于参考图像所位于的位置的像素位置信息由本文公开的示例确定。此外,可以在稍后的时间期间在对源图像(或视频)的随后的评估中将确定出的位置信息与附加的位置信息进行比较。这种位置信息从一个时间到下一时间的差异确认了对象在源图像内的移动。另外地,对位置信息从一个时间到下一时间的分析允许识别这种移动的方向。

虽然实现图1和图2的图像分析器102的示例方式在图1-13中示出,但图1-13中示出的元件、过程和/或设备中的一个或多个可以以任何其他方式组合、划分、重新布置、省略、消除和/或实现。此外,示例硬件评估器202、示例搜索区域确定器204、示例差异计算器数量确定器206、示例HCOST数量确定器208、示例图像取回器210、示例宏块引擎212、示例搜索区域引擎214、示例排序引擎216、示例差异计算器引擎218、示例桶形移位引擎220、示例反馈引擎222、示例HCOST引擎224、(多个)示例比较单元400、示例差异计算器406、502、示例加法器504、示例累加器506、示例排序网络408、1008、示例最小值计算器450、1050和/或更一般地,图1-13的示例图像分析器102可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例硬件评估器202、示例搜索区域确定器204、示例差异计算器数量确定器206、示例HCOST数量确定器208、示例图像取回器210、示例宏块引擎212、示例搜索区域引擎214、示例排序引擎216、示例差异计算器引擎218、示例桶形移位引擎220、示例反馈引擎222、示例HCOST引擎224、(多个)示例比较单元400、示例差异计算器406、502、示例加法器504、示例累加器506、示例排序网络408、1008、示例最小值计算器450、1050和/或更一般地,图1-13的示例图像分析器102中的任一个可以由一个或多个模拟或数字电路、逻辑电路、可编程处理器、可编程控制器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)来实现。当阅读本专利的装置或系统权利要求中的任一项以涵盖纯软件和/或固件实现方式时,示例硬件评估器202、示例搜索区域确定器204、示例差异计算器数量确定器206、示例HCOST数量确定器208、示例图像取回器210、示例宏块引擎212、示例搜索区域引擎214、示例排序引擎216、示例差异计算器引擎218、示例桶形移位引擎220、示例反馈引擎222、示例HCOST引擎224、(多个)示例比较单元400、示例差异计算器406、502、示例加法器504、示例累加器506、示例排序网络408、1008、示例最小值计算器450、1050和/或更一般地,图1-13的示例图像分析器102中的至少一个在此明确定义为包括非暂时性计算机可读存储设备或存储磁盘,例如,存储器、数字多功能盘(DVD)、压缩盘(CD)、蓝光盘等,其包括软件和/或固件。更进一步,图1和图2的示例图像分析器102可以包括除了或代替图1-13中示出的那些元件、过程和/或设备之外的一个或多个元件、过程和/或设备,和/或可以包括任何或所有所示元件、过程和设备中的多于一个。如本文所使用的,短语“与……通信”包括其变型涵盖直接通信和/或通过一个或多个中间组件的间接通信,并且不要求直接物理(例如,有线)通信和/或持续通信,而是要求另外地包括以周期性间隔、预定间隔、非周期性间隔和/或一次性事件的选择性通信。

图14-16示出了表示用于实现图1-13的图像分析器102的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合的流程图。机器可读指令可以是一个或多个可执行程序或可执行程序的一部分,以供诸如以下结合图17讨论的示例处理器平台1700中示出的处理器1712之类的计算机处理器执行。程序可以体现在存储在非暂时性计算机可读存储介质(例如,CD-ROM、软盘、硬盘驱动器、DVD、蓝光盘或与处理器1712相关联的存储器)上的软件中,但是整个程序和/或其部分可以可替代地由除了处理器1712之外的设备执行和/或体现在固件或专用硬件中。此外,虽然示例程序是参考图14-16中示出的流程图描述的,但可以替代地使用实现示例图像分析器102的许多其他方法。例如,可以改变框的执行次序,和/或可以改变、消除或组合所描述的框中的一些。另外地或可替代地,任何或所有框可以由被构造为在不执行软件或固件的情况下执行对应操作的一个或多个硬件电路(例如,分立和/或集成模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)来实现。

本文描述的机器可读指令可以以压缩格式、加密格式、分段格式、打包格式等中的一种或多种格式存储。本文描述的机器可读指令可以存储为数据(例如,指令的部分、代码的代码表示等),其可以用于创建、制造和/或产生机器可执行指令。例如,机器可读指令可以被分段并存储在一个或多个存储设备和/或计算设备(例如,服务器)上。机器可读指令可能要求安装、修改、适应、更新、组合、补充、配置、解密、解压缩、解包、分发、重新指派等中的一个或多个,以便使其可由计算设备和/或其他机器直接读取和/或执行。例如,机器可读指令可以存储在多个部分中,这些部分被单独压缩、加密并存储在单独的计算设备上,其中这些部分在被解密、解压缩和组合时形成可执行指令集,可执行指令集实现诸如本文描述的那些程序之类的程序。在另一示例中,机器可读指令可以以其可以被计算机读取的状态存储,但是要求添加库(例如,动态链接库(DLL))、软件开发工具包(SDK)、应用编程接口(API)等,以便在特定计算设备或其他设备上执行指令。在另一示例中,在机器可读指令和/或对应程序可以以整体或部分地执行之前,可能需要配置机器可读指令(例如,存储的设置、数据输入、记录的网络地址等)。因此,所公开的机器可读指令和/或程序与机器可读指令和/或程序在被存储或以其他方式静止或传输时的特定格式或状态无关。

如上面所提到的,图14-16的示例过程可以使用存储在非暂时性计算机和/或机器可读介质的可执行指令(例如,计算机和/或机器可读指令)来实现,非暂时性计算机和/或机器可读介质例如硬盘驱动器、闪速存储器、只读存储器、压缩盘、数字多功能盘、高速缓存、随机存取存储器和/或任何其他存储设备或存储盘,其中信息在任何持续时间内存储(例如,在延长的时间段内存储、永久地存储、在简短的时刻内存储、存储用于临时缓冲、和/或存储用于缓存信息)。如本文所使用的,术语“非暂时性计算机可读介质”被明确地定义为包括任何类型的计算机可读存储设备和/或存储盘,并且不包括传播信号且不包括传输介质。

“包括(including)”和“包含(comprising)”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求采用任何形式的“包括(include)”或“包含(comprise)”(例如,包含(comprises)、包括(includes)、包含(comprising)、包括(including)、具有(having)等)作为序言或在任何类型的权利要求引述中时,应理解为可以存在附加元件、项目等,而不会超出对应权利要求或引述的范围。如本文所使用的,当短语“至少”用作例如权利要求的序言中的过渡术语时,其是开放式的,并且与术语“包含”和“包括”是开放式方式相同。例如,术语“和/或”当在以例如A,B和/或C的形式使用时指代A,B,C的任何组合或子集,例如:(1)单独的A,(2)单独的B,(3)单独的C,(4)A与B,(5)A与C,(6)B与C,以及(7)A与B与C。如本文在描述结构、组件、项目、对象和/或事物的上下文中所使用的,短语“A和B中的至少一个”旨在指代包括以下各项中的任何一个的实现方式:(1)至少一个A,(2)至少一个B和(3)至少一个A个至少一个B。类似地,如本文在描述结构、组件、项目、对象和/或事物的上下文中所使用的,短语“A或B中的至少一个”旨在指代包括以下各项中的任何一个的实现方式:(1)至少一个A,(2)至少一个B和(3)至少一个A和至少一个B。如本文在描述过程、指令、动作、活动和/或步骤的实现或执行的上下文中所使用的,短语“A和B中的至少一个”旨在指代包括以下各项中的任何一个的实现方式:(1)至少一个A,(2)至少一个B和(3)至少一个A和至少一个B。类似地,如本文在描述过程、指令、动作、活动和/或步骤的实现或执行的上下文中所使用的,短语“A或B中的至少一个”旨在指代包括以下各项中的任何一个的实现方式:(1)至少一个A,(2)至少一个B和(3)至少一个A和至少一个B。

图14的示例程序1400包括框1402,在框1402中,示例硬件评估器202确定硬件参数是否是已知的。例如,在图像分析器102在先前的场合已经执行了一个或多个分析和定位操作的情况下,可以避免执行底层硬件检测的进一步努力和/或特性化努力。与硬件参数相关联的信息可以存储在示例硬件评估器202的存储器中、存储在示例处理资源114的存储器中、和/或存储在图17的示例处理器平台1700的存储器中。在示例硬件评估器202确定硬件参数是已知的(框1402)(例如,在存储的存储器中可用)的情况下,控制前进到框1418,如下文进一步详细描述的。

在示例硬件评估器202确定硬件参数(例如,包括与图像大小相关的信息)是未知的和/或以其他方式不可用(框1402)的情况下,示例硬件评估器202识别搜索跨度和宏块大小(框1404)。如上面所描述的,在一些示例中,搜索区域的大小和位置取决于图像大小(例如,如果在图像的左下角进行搜索,则搜索区域可能由于到达图像的边界而被截断)。示例搜索区域确定器204以与示例等式1A和1B一致的方式、以及与图像内的参考宏块的图像大小和位置一致的方式,基于识别出的搜索跨度和宏块大小来计算搜索区域(框1406)。非限制性地,可以使用一个或多个附加和/或替代输入来指导(多个)搜索区域操作。在一些示例中,可以使用金字塔连续消除技术来更高效地识别(多个)搜索区域操作,其中可以使用传感器/摄像机输入来更准确地定义图像的要被搜索的特定部分。与例如其中分析图像的预定义部分而不管它们具有改变像素活动的可能性的基于光栅的分析工作(例如,“光栅模式”)相比,这种示例金字塔连续消除技术可以提供更高的分析效率。另外地,示例搜索区域确定器204以与示例等式2一致的方式计算在计算出的搜索区域内可能的宏块行的数量(框1408)。

为了确定要使用的差异计算器(CSAD)的数量,示例差异计算器数量确定器206考虑可以在示例搜索区域内的行内适合的宏块的计算出的数量(框1410)。如上面所描述的,需要的CSAD的数量取决于宏块的宽度和搜索区域的宽度。换言之,在可能的情况下(例如,当这种硬件资源可以适应并行性时),可以通过并行执行像素分析任务来实现一些计算效率。因此,在一些示例中,差异计算器的数量等于可以在示例搜索区域内适合的宏块行的数量。如上面所描述的,差异计算器的不同数量和布置构成了HCOST单元。示例HCOST数量确定器208基于宏块高度来确定HCOST单元的数量(框1412)。在一些示例中,硬件评估器202选择目标硬件结构和/或其他硬件资源(例如,HCOST单元的数量、HCOST单元的特定类型等)(框1416),并基于这种可用的硬件资源来继续比较图像(框1418)。如上面所描述的,在一些示例中,硬件评估器202基于上面标识出的分析来分配所需要的硬件资源(框1416),例如,分配特定的FPGA资源以促进特定数量和/或类型的HCOST单元、CSAD等。

图15示出了与发起框1418的比较活动相关联的附加细节。在图15所示的示例中,结合采用图4的示例第一比较单元400和图5的示例HCOST单元的示例图像分析器102的第一操作模式来描述像素分析和比较。如上面所描述的,示例第一操作模式遵循图7的示例时序图700。示例图像取回器210取回要被分析的感兴趣的候选图像(框1502),并且示例宏块引擎212取回和/或以其他方式选择感兴趣的宏块,该感兴趣的宏块可以包括参考图像或要被搜索的候选图像的图像的一部分(框1504)。一般而言,总是存在至少两个图像,其中在主图像中搜索参考图像。在参考图像内,可以提取将被搜索的一个或多个宏块(例如,可以经由光栅模式提取MB,获得图像坐标的列表等)。因此,从参考图像中提取MB,并从候选图像中选择其中在MB与参考图像之间找到最佳匹配的搜索区域。示例宏块引擎212标记示例宏块(例如,图3C和图3D的示例宏块308)的行和像素参考(框1506),并且示例搜索区域引擎214从取回的候选图像中选择感兴趣的搜索区域并标记其行和像素参考(框1508)(例如,参见图3A和图3B的示例搜索区域302)。示例搜索区域引擎214识别和/或以其他方式标记搜索区域(例如,示例搜索区域302)的候选行(框1510),如图6的右手侧所示。

结合一个HCOST单元(例如,图4和5的示例HCOST单元404A)描述了图15所示的示例,但是图15的示例比较程序1418在给定像素分析任务的情况下适用于任何数量的HCOST单元。示例差异计算器引擎218设置CSAD指针(P)以管理和/或以其他方式控制一个CSAD单元(例如,图5的示例CSAD[0]502A)的输入加载(框1512)。示例差异计算器引擎218将参考像素加载到与指针(P)相关联的CSAD单元(框1514),并将候选像素加载到该相同的CSAD单元(框1516)。示例差异计算器引擎218确定与当前指针(P)相关联的CSAD单元是否是感兴趣的HCOST单元内的最后一个CSAD单元(框1518)。例如,考虑图5第一HCOST单元404A,存在并行操作的七(7)个CSAD单元,其中每个CSAD单元执行对感兴趣的候选行的一部分的比较(例如,第一CSAD单元对应于感兴趣的候选行的位0、1和2,第二CSAD单元对应于感兴趣的候选行的右移的位1、2和3,等等)。如果示例CSAD单元不是感兴趣的HCOST单元的最后一个CSAD单元(框1518),则示例桶形移位引擎220对参考宏块的候选像素进行移位并递增指针(P)(框1520)。然后,控制返回到框1512。

在示例差异计算器引擎218确定最后一个CSAD单元已经加载有输入数据(要比较的像素)的情况下(框1518),示例差异计算器引擎218调用相应的加载的CSAD单元(例如,图5的七(7)个CSAD单元502A至502G)以执行生成绝对差异和(SAD)值的比较(框1522)。示例反馈引擎222为结果添加反馈值(框1524),并且示例搜索区域引擎214确定候选行的非重叠集合是否是完整的(框1526)。如上面所描述的,候选行的非重叠集合指示已经将完整的宏块应用于遍及完整的行宽度的候选行的分组,如图9的示例搜索区域图900所示。如果候选行的非重叠集合不是完整的,则示例差异计算器引擎218递增行计数器(框1528),以使得CSAD单元执行加载并对随后的感兴趣的行进行比较(例如,从候选行C0中的像素的比较移动到候选行C1,参见图7的虚线圆圈722)。示例桶形移位引擎220再次轮换参考像素(框1530),使得将正确的候选行像素与正确的参考行像素进行比较。然后,控制返回到框1512。

在候选行的非重叠集合是完整的和/或以其他方式被评估以确定SAD值的情况下(框1526)(例如,参见图9的S0 730,示出了候选行C0、C1和C2),示例排序引擎216将相应的SAD值应用和/或以其他方式转发到排序网络(框1532),例如,图5的示例排序网络408A。如上面所描述的,示例排序引擎216调用示例排序网络408A来确定相对低值(例如,相对最小SAD值)和该相对低值的对应的位置(例如,低值的像素坐标)(框1534)。示例搜索区域引擎214确定是否存在要评估的一个或多个附加的非重叠行(框1536)(例如,参见图9的候选行的附加的非重叠集合S1至S6),并且如果存在要评估的一个或多个附加的非重叠行,则示例差异计算器引擎218递增行计数器(框1538)以使得感兴趣的搜索区域的随后的行被加载和比较。示例桶形移位引擎220轮换参考像素(框1540),并且控制返回到框1512。然而,在感兴趣的搜索区域的所有非重叠行都已经被评估的情况下(例如,像素被加载并针对搜索区域内的参考块的所有可能位置与参考块进行了比较)(框1536),示例排序引擎216比较非重叠行的所有这种分组以确定总体最小值及其位置(框1542)。换言之,每个S值(例如,S0至S6)表示已经与参考宏块比较的候选行的特定分组的局部最小值。因此,因为参考宏块对应于要识别的图像的部分以用于场景(例如,来自电影场景的帧)内的可能的移动证据,所以只有一个S值可以是绝对最小值。

虽然图15的图像的上述示例比较1418对应于示例图像分析器102的示例第一操作模式,但图16所示的示例程序1418对应于示例图像分析器102的第二操作模式。如上面所描述的,示例第一操作模式调用和/或以其他方式利用图4的示例第一比较单元400和图5的对应的CSAD单元,而示例第二操作模式调用和/或以其他方式利用图10的示例第二比较单元1000的架构和图11的对应的CSAD单元。示例第二操作模式对应于图12的示例时序图1200。

在图16所示的示例中,示例图像取回器210取回要分析的感兴趣的候选图像(框1602),并且示例宏块引擎212取回和/或以其他方式选择感兴趣的宏块,该感兴趣的宏块可以包括参考图像或要被搜索的候选图像的图像的一部分(框1604)。示例宏块引擎212标记示例宏块(例如,图3C和图3D的示例宏块308)的行和像素参考(框1606),并且示例搜索区域引擎214从取回的候选图像中选择感兴趣的搜索区域(例如,参见图3A和图3B的示例搜索区域302)并标记其行和像素参考(框1608)。示例搜索区域引擎214识别和/或以其他方式标记搜索区域(例如,示例搜索区域302)的候选行(框1610),如图6的右手侧所示。

结合给定的比较单元(例如,图10的示例第二比较单元1000)的所有可用的HCOST单元描述了图16所示的示例。如上面所描述的,因为给定的比较单元的所有可用的HCOST单元参与对候选行的示例完整的非重叠集合(例如,S0、S1等)的分析,所以由于绕过了对累加器反馈环路(例如,示例反馈路径508)的任何需要,因此减少了处理占用空间大小和处理周期。示例HCOST引擎224选择HCOST单元(框1612),例如,在进行图10的示例第二比较单元1000的初始迭代时选择第一可用的HCOST单元。示例HCOST引擎224将参考行像素应用于选定的HCOST单元(框1614),例如,宏块的第一行R0。如上面所描述的,当针对感兴趣的搜索区域的所有评估努力从宏块为每个HCOST单元提供单个单元行时,通过部分地移除对桶形移位器电路/硬件的任何需要来实现效率增益。示例HCOST引擎224确定比较单元是否具有尚未被指派对应的参考行输入的附加的HCOST单元(框1616),并且如果比较单元具有附加的HCOST单元,则递增参考行指针(框1618)。然后,控制返回到框1612。

在示例HCOST引擎224确定感兴趣的比较单元的所有可用的HCOST单元都已经被指派有参考输入的情况下(框1616),示例差异计算器引擎218在第一可用行(行0)处开始像素比较分析(框1620)。示例差异计算器引擎218将用于每个可用的HCOST单元的CSAD指针(P)设置为初始值零以识别HCOST单元的第一CSAD单元(框1622)。示例差异计算器引擎218将像素加载到选定的CSAD单元作为输入(框1624),并确定当前的CSAD单元是否是HCOST单元的最后一个单元(框1626)。如果当前的CSAD单元不是最后一个单元,则一个或多个附加的CSAD单元需要被配置有输入像素,以与宏块的对应的参考像素进行最终比较。示例差异计算器引擎218递增指针(P)以指向下一可用的CSAD单元(框1628),并将候选像素行向右移位(框1630)。然后,控制返回到框1624以加载附加的CSAD单元的一个或多个输入。

如果已经向所有CSAD单元提供了候选行像素数据(框1626),则示例差异计算器引擎218针对每个CSAD单元计算差异值以生成局部SAD值(框1632)。示例HCOST引擎224将局部SAD值级联到下一可用的HCOST单元(框1634),由此绕过对累加器反馈电路和与其相关联的相关联的处理周期的任何需要。示例搜索区域引擎214确定候选行的非重叠集合是否是完整的(已评估)(框1636),并且如果候选行的非重叠集合不是完整的,则示例差异计算器引擎218递增行指针以关注下一可用的候选行以进行评估(框1638)(例如,在下一候选行的像素与参考宏块的行之间的比较)。然后,控制返回到框1622。

如果示例搜索区域引擎214确定候选行的非重叠集合是完整的(框1636)(例如,S0,其包括候选行C0、C1和C2),则示例搜索区域引擎214保存对应的局部SAD值(框1640)(在稍后的一个时间对其排序以确定相对最低值)。示例搜索区域引擎214确定是否存在附加的感兴趣的行(框1642),并且如果存在附加的感兴趣的行,则控制返回到框1638。否则,示例排序引擎216对累积/存储的S值(例如,与S0、S1、S2等相关联的局部SAD值)进行排序以识别最低相对值(框1644)。然后,示例排序引擎216确定与最低相对值相关联的对应的位置(例如,感兴趣的场景上的像素坐标)(框1646)。可以从感兴趣的场景的一个时间评估到下一个中使用这种信息,以识别例如视频流的运动和/或运动的方向。

图17是被构造为执行图14-16的指令以实现图1和图2的图像分析器102的示例处理器平台1700的框图。处理器平台1700可以是例如服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,手机、智能电话、诸如iPadTM之类的平板计算机)、个人数字助理(PDA)、互联网设备、DVD播放器、CD播放器、数字录像机、蓝光播放器、游戏控制台、个人录像机、机顶盒或任何其他类型的计算设备。

所示示例的处理器平台1700包括处理器1712。所示示例的处理器1712是硬件。例如,处理器1712可以由来自任何期望系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器来实现。硬件处理器可以是基于半导体(例如,基于硅)的设备。在该示例中,处理器实现示例硬件评估器202、示例搜索区域确定器204、示例差异计算器数量确定器206、示例HCOST数量确定器208、示例图像取回器210、示例宏块引擎212、示例搜索区域引擎214、示例排序引擎216、示例差异计算器引擎218、示例桶形移位引擎220、示例反馈引擎222、示例HCOST引擎224、(多个)示例比较单元400、示例差异计算器406、502、示例加法器504、示例累加器506、示例排序网络408、1008、示例最小值计算器450、1050和/或更一般地,示例图像分析器102。

所示示例的处理器1712包括本地存储器1713(例如,高速缓存)。所示示例的处理器1712经由总线1718与包括易失性存储器1714和非易失性存储器1716的主存储器通信。易失性存储器1714可以通过同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、动态随机存取存储器和/或任何其他类型的随机存取存储器设备来实现。非易失性存储器1716可以由闪速存储器和/或任何其他期望类型的存储器设备来实现。对主存储器1714、1716的访问由存储器控制器控制。

所示示例的处理器平台1700还包括接口电路1720。接口电路1720可以通过任何类型的接口标准(例如,以太网接口、通用串行总线(USB)、接口、近场通信(NFC)接口和/或快速PCI接口)来实现。

在所示示例中,一个或多个输入设备1722连接到接口电路1720。输入设备1722允许用户将数据和/或命令键入到处理器1712中。输入设备可以通过例如音频传感器、麦克风、摄像机(静止或视频)、键盘、按钮、鼠标、触摸屏、触控板、轨迹球、等值点(isopoint)和/或语音识别系统来实现。

一个或多个输出设备1724还连接到所示示例的接口电路1720。输出设备1724可以例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT)、就地切换(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器来实现。因此,所示示例的接口电路1720典型地包括图形驱动卡、图形驱动芯片和/或图形驱动处理器。

所示示例的接口电路1720还包括通信设备(例如,发射机、接收机、收发机、调制解调器、住宅网关、无线接入点和/或网络接口),以促进经由网络1726与外部机器(例如,任何种类的计算设备)的数据交换。通信可以经由例如以太网连接、数字订户线(DSL)连接、电话线连接、同轴电缆系统、卫星系统、现场无线系统(line-of-site wireless system)、蜂窝电话系统等。

所示示例的处理器平台1700还包括用于存储软件和/或数据的一个或多个大容量存储设备1728。这种大容量存储设备1728的示例包括软盘驱动器、硬盘驱动器盘、压缩盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字多功能磁盘(DVD)驱动器。

图14-16的机器可执行指令1732可以存储在大容量存储设备1728中、存储在易失性存储器1714中、存储在非易失性存储器1716中、和/或存储在可移除非暂时性计算机可读存储介质(例如,CD或DVD)上。

本文公开的当前描述的方法、系统、装置、制品和设备的附加示例包括以下非限制性配置。以下非限制性示例中的每一个都可以独立存在,或者可以以任何排列或组合与下文和/或贯穿本公开提供的其他示例中的任何一个或多个组合。

示例1包括一种用于改进图像差异计算的效率的装置,该装置包括:水平成本(HCOST)引擎,其用于将宏块的第一像素行应用于第一HCOST单元的输入,该第一HCOST单元包括多个差异计算器;以及差异计算器引擎,其用于将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器,多个差异计算器中的对应差异计算器用于计算在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的相应的绝对差异和(SAD)值。

示例2包括如示例1中定义的装置,还包括:差异计算器数量确定器,其用于基于在源图像的搜索窗口的宽度内适合的宏块的实例的数量来计算差异计算器的数量。

示例3包括如示例1中定义的装置,其中,HCOST引擎用于使得第一HCOST单元将相应的SAD值级联到第二HCOST单元,而不轮换宏块的第一像素行。

示例4包括如示例3中定义的装置,其中,HCOST引擎用于将与第一HCOST单元的多个差异计算器相对应的级联的SAD值路由到第二HCOST单元中的相应的差异计算器的输入。

示例5包括如示例4中定义的装置,其中,差异计算器引擎用于约束第二HCOST单元中的相应的差异计算器的输入,以评估宏块的第二像素行。

示例6包括如示例1中定义的装置,还包括:搜索区域引擎,其用于确定是否已经评估了搜索窗口的所有对应的像素行。

示例7包括如示例6中定义的装置,还包括:排序引擎,其用于比较相应SAD值以识别相应的SAD值中的相对最低的一个。

示例8包括如示例7中定义的装置,其中,相应的SAD值中的相对最低的一个指示在宏块与搜索窗口的图像之间的匹配。

示例9包括如示例7中定义的装置,其中,排序引擎用于识别与相应的SAD值中的相对最低的一个相对应的目标位置。

示例10包括如示例9中定义的装置,其中,排序引擎用于将目标位置识别为搜索窗口的像素坐标。

示例11包括一种非暂时性计算机可读介质,包括计算机可读指令,该指令在被执行时使得至少一个处理器进行以下操作:将宏块的第一像素行应用于第一水平成本(HCOST)单元的输入,该第一HCOST单元包括多个差异计算器;将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器;以及对在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的多个差异计算器中的对应差异计算器的相应的绝对差异和(SAD)值进行级联。

示例12包括如示例11中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:基于在源图像的搜索窗口的宽度内适合的宏块的实例的数量来计算差异计算器的数量。

示例13包括如示例11中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:使得第一HCOST单元将相应的SAD值级联到第二HCOST单元,同时绕过对宏块的第一像素行的轮换。

示例14包括如示例13中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:将与第一HCOST单元的多个差异计算器相对应的级联的SAD值路由到第二HCOST单元中的相应的差异计算器的输入。

示例15包括如示例14中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:约束第二HCOST单元中的相应的差异计算器的输入,以评估宏块的第二像素行。

示例16包括如示例11中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:确定是否已经评估了搜索窗口的所有对应的像素行。

示例17包括如示例16中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:比较相应SAD值以识别相应的SAD值中的相对最低的一个。

示例18包括如示例17中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:基于相应的SAD值中的相对最低的一个,识别在宏块与搜索窗口的图像之间的匹配。

示例19包括如示例17中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:识别与相应的SAD值中的相对最低的一个相对应的目标位置。

示例20包括如示例19中定义的计算机可读介质,其中,指令在被执行时使得至少一个处理器进行以下操作:将目标位置识别为搜索窗口的像素坐标。

示例21包括一种用于改进图像差异计算的效率的计算机实现的方法,该方法包括:通过利用至少一个处理器执行指令,将宏块的第一像素行应用于第一水平成本(HCOST)单元的输入,该第一HCOST单元包括多个差异计算器;通过利用至少一个处理器执行指令,将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器;以及通过利用至少一个处理器执行指令,对在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的多个差异计算器中的对应差异计算器的相应的绝对差异和(SAD)值进行级联。

示例22包括如示例21中定义的方法,还包括:基于在源图像的搜索窗口的宽度内适合的宏块的实例的数量来计算差异计算器的数量。

示例23包括如示例21中定义的方法,还包括:使得第一HCOST单元将相应的SAD值级联到第二HCOST单元,同时绕过对宏块的第一像素行的轮换。

示例24包括如示例23中定义的方法,还包括:将与第一HCOST单元的多个差异计算器相对应的级联的SAD值路由到第二HCOST单元中的相应的差异计算器的输入。

示例25包括如示例24中定义的方法,还包括:约束第二HCOST单元中的相应的差异计算器的输入,以评估宏块的第二像素行。

示例26包括如示例21中定义的方法,还包括:确定是否已经评估了搜索窗口的所有对应的像素行。

示例27包括如示例26中定义的方法,还包括:比较相应SAD值以识别相应的SAD值中的相对最低的一个。

示例28包括如示例27中定义的方法,还包括:基于相应的SAD值中的相对最低的一个,识别在宏块与搜索窗口的图像之间的匹配。

示例29包括如示例27中定义的方法,还包括:识别与相应的SAD值中的相对最低的一个相对应的目标位置。

示例30包括如示例29中定义的方法,还包括:将目标位置识别为搜索窗口的像素坐标。

示例31包括一种用于改进图像差异计算的效率的装置,该装置包括:宏块像素应用单元,其用于将宏块的第一像素行应用于第一水平成本(HCOST)单元的输入,该第一HCOST单元包括多个差异计算器;以及搜索窗口应用单元,其用于将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器,多个差异计算器中的对应差异计算器用于计算在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的相应的绝对差异和(SAD)值。

示例32包括如示例31中定义的装置,还包括:用于确定差异计算器数量的单元,其用于基于在源图像的搜索窗口的宽度内适合的宏块的实例的数量来计算差异计算器的数量。

示例33包括如示例31中定义的装置,其中,宏块像素应用单元用于使得第一HCOST单元将相应的SAD值级联到第二HCOST单元,而不轮换宏块的第一像素行。

示例34包括示例33中定义的装置,其中,宏块像素应用单元用于将与第一HCOST单元的多个差异计算器相对应的级联的SAD值路由到第二HCOST单元中的相应的差异计算器的输入。

示例35包括如示例34中定义的装置,其中,搜索窗口应用单元用于约束第二HCOST单元中的相应的差异计算器的输入,以评估宏块的第二像素行。

示例36包括如示例31中定义的装置,还包括:用于搜索区域评估的单元,其用于确定是否已经评估了搜索窗口的所有对应的像素行。

示例37包括如示例36中定义的装置,还包括:排序单元,其用于比较相应SAD值以识别相应的SAD值中的相对最低的一个。

示例38包括如示例37中定义的装置,其中,相应的SAD值中的相对最低的一个指示在宏块与搜索窗口的图像之间的匹配。

示例39包括如示例37中定义的装置,其中,排序单元用于识别与相应的SAD值中的相对最低的一个相对应的目标位置。

示例40包括如示例39中定义的装置,其中,排序单元用于将目标位置识别为搜索窗口的像素坐标。

示例计算机可读介质包括:第一指令,其在被执行时使得机器对第二指令进行分发、配置、组装、安装、实例化、取回、解压缩和解密中的至少一项以供执行;第二指令,其在被执行时使得机器进行以下操作:将宏块的第一像素行应用于第一水平成本(HCOST)单元的输入,该第一HCOST单元包括多个差异计算器;将源图像的搜索窗口的对应的像素行应用于第一HCOST单元的多个差异计算器中的对应差异计算器;以及对在(a)宏块的第一像素行与(b)搜索窗口的对应的像素行之间的多个差异计算器中的对应差异计算器的相应的绝对差异和(SAD)值进行级联。

根据前述内容将认识到的是,已经公开了识别感兴趣的图像内的子图像的示例方法、装置、系统和制品。例如,本文公开的示例促进对感兴趣的图像的对象运动检测,其中感兴趣的图像可以是电影帧和/或受监视活动的实时视频馈送(例如,安全摄像机)。感兴趣的图像(例如,包括具有车轮的汽车的场景)的子图像(例如,汽车的车轮)用于在第一时间搜索感兴趣的图像,并且在子图像由本文公开的示例检测到位于感兴趣的图像内的第二相对位置的情况下,可以确认对象运动。另外地,所公开的方法、装置、系统和制品通过实现避免了对典型地与图像分析相关联的额外像素移位操作的需要的特定硬件配置、时序图和/或过程来改进使用计算设备的效率。例如,本文公开的示例避免和/或以其他方式减少额外的桶形移位电路,并且避免和/或以其他方式减少额外的累加器反馈电路。这种独特的硬件配置和/或过程使得能够改进本文公开的一种或多种图像分析技术中涉及的底层处理资源的效率。

尽管本文已经公开了某些示例方法、装置和制品,但是本专利的覆盖范围不限于此。相反,本专利涵盖完全落入本专利的权利要求范围内的所有方法、装置和制品。

43页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于去除变化场景的红外图像中的余辉的方法和设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!