在计算机视觉处理系统中并行求解线性方程的方法和装置与流程

文档序号:17662934发布日期:2019-05-15 22:30阅读:266来源:国知局
在计算机视觉处理系统中并行求解线性方程的方法和装置与流程

本公开总体上涉及计算机视觉处理系统,并且更具体地涉及在计算机视觉处理系统中求解线性方程时实现并行处理的方法和装置。



背景技术:

计算机视觉处理系统被设计用于采集和分析静止图像和视频图像,以用于对所采集的图像的内容进行基于机器的评估。在许多情况下,基于机器的评估的目标是识别在所采集的图像/视频记录中发生的活动。一旦识别出所记录的活动,就可以存储有关活动的信息以用于之后的检索和分析,和/或可以在活动附近执行动作。这种动作可以包括与具有某种形式的人工智能的机器人设备相关联的一个或多个伺服电机控制器/致动器的致动。计算机视觉处理系统被广泛地应用于各种应用领域,包括安全监控、质量控制监控、辅助汽车(或其他机动)驾驶、计算机化的客户服务机器人、制造等。



技术实现要素:

根据本公开的一个实施例,提供了一种用于为逐次超松弛处理器准备方程组的装置,包括:标识器,其用于标识所述方程组,方程组中的相应方程与输入图像的相应像素相对应;分区器,其用于将方程组划分成分区,分区包含相互独立的方程子集;以及收集器,其用于基于分区将方程组的子集收集在组中,组中所包括的方程将由逐次超松弛处理器并行求解。

根据本公开的另一实施例,提供了一种或多种非暂时性机器可读存储介质,包括机器可读指令,机器可读指令当被执行时使得一个或多个处理器至少执行以下操作:标识要求解的方程组,方程组中的相应方程与输入图像的相应像素相对应;将方程组划分成分区,分区包含相互独立的方程子集;以及基于分区将方程组的子集置于要由一组逐次超松弛处理器并行求解的组中,由逐次超松弛处理器产生的结果形成输入图像的增强版本。

根据本公开的又一实施例,提供了一种用于为逐次超松弛处理器准备方程的装置,包括:用于标识方程的装置,方程的组中的相应方程与输入图像的相应像素相对应;用于将方程划分成分区的装置,分区包含方程的相互独立的子集;以及用于将方程的子集收集在组中以由逐次超松弛处理器并行求解的装置。

根据本公开的又一实施例,提供了一种用于对与图像数据相关联的一组线性方程进行并行化求解的方法,所述方法包括:通过利用处理器执行指令来标识要求解的方程,方程中的相应方程与图像数据的相应像素相对应;通过利用处理器执行指令来确定方程的相互独立的子集;以及通过利用处理器执行指令来将子集中所包括的方程同时提供给逐次超松弛算法,以便进行并行求解。

附图说明

图1是根据本公开的教导构造的示例性计算机视觉处理系统的框图。

图2是具有示例性方程并行化器的图1的示例性计算机视觉增强器的示例性实施方式的框图。

图3是具有示例性分区器的图2的示例性方程并行化器的示例性实施方式的框图。

图4a、4b、4c、4d和4e是示出将掩模置于由图3的分区器创建的初始化矩阵的元素/单元上的迭代方式的图。

图5是表示可以被执行以实施图3的示例性方程并行化器的示例性机器可读指令的流程图。

图6是表示可以被执行以实施图3的示例性分区器的示例性机器可读指令的流程图。

图7是能够执行图4-6的指令以实施图1和图2的示例性计算机视觉增强器的示例性处理器平台的框图。

这些图不是按比例的。在可能的情况下,在(一个或多个)附图和随附的书面说明书中通篇使用相同的附图标记来指代相同或相似的部分。

具体实施方式

计算机视觉处理系统采集和分析图像和视频数据,以便对采集到的图像/视频数据中所包含的特征执行机器识别。计算机视觉处理的主要目标是使用基于机器的技术以类似于人类头脑能够理解图像和视频信息的方式来理解这些数据。一旦理解了图像/视频中所包含的信息,就可以基于该信息采取任何数量的动作。例如,用于医疗技术的计算机视觉系统包括如下图像处理系统:其采集人体图像、自动识别图像中的疾病指示符、并提供关于可能的诊断的信息。计算机视觉处理系统也可以用于辅助的电机驱动应用中,以检测迎面而来的对象,并采取动作来躲避这些对象。计算机视觉处理系统还可以用于监控建筑物,并在检测到特定描述的入侵者时制定警报。可以使用计算机视觉处理系统的可能应用是广泛的并且正在扩展。

计算机视觉处理领域的一个重要部分在于提高图像识别技术。图像识别已被证明是一个困难的任务,即使是在被分析的图像是详细且照明良好的情况下。当被分析的(多个)图像是颗粒状、有孔(缺少像素数据)、暗、缺乏深度信息等时,任务变得更加困难。当由多个相机在不同位置拍摄的二维图像用于尝试标识和/或得出关于移动(或静止)对象的一个或多个结论时,计算机视觉专家面临的挑战进一步加剧。

许多计算机视觉问题(例如上面所标识的那些以及其他问题)是使用线性优化来处理的。线性优化可以用于执行任何数量的图像增强技术,包括孔填充(也被称为深度修复)、光流估计、着色、阿尔法混合等,所有这些技术都有助于图像识别。在一些示例中,使用线性优化的图像增强技术旨在求解由方程“ax=b”表示的大型线性系统,其中“a”表示数据值矩阵,“x”表示向量并且是基于要求解的方程确定的变量。并且“b”表示数据值的向量。逐次超松弛(successiveover-relaxation)是这样一种基于线性优化的技术,其用于使用由具有“ax=b”形式的方程组表示的大型线性系统来求解向量“x”。在一些示例中,与原始(例如,未增强)的图像/视频相关联的一组像素/体素表示一组原始的、未增强的“x”值,并且用大型线性系统求解所得到的“x”值表示增强的“x”值。在一些这样的示例中,增强的“x”值一起形成由原始的、未增强的x值表示的原始图像/视频的增强版本。

逐次超松弛是一种迭代技术,其中每次迭代都集中于求解方程组的单个方程,并且每次迭代都受到前面迭代结果的影响。当在图像/视频增强的情况下使用时,确定与图像/视频数据的每个像素/体素相对应的方程。与第一像素/体素相对应的方程的解不仅依赖于第一像素/体素数据,而且依赖于相邻像素/体素数据值。由于这些依赖关系,与所有像素/体素相对应的方程不能并行求解,而是必须迭代求解。不幸的是,逐次超松弛过程的迭代性质使得逐次超松弛过程是一个耗时的过程,其可能不适合在实时图像处理/识别应用中使用。本文使用的体素表示三维空间中的规则网格上的值。体素可以被图像渲染系统用于辅助体积空间在二维空间的可视化。

本文公开的计算机视觉处理系统包括计算机视觉增强器,该计算机视觉增强器具有方程并行化器,该方程并行化器标识可并行求解的线性优化系统的方程。在一些示例中,计算机视觉增强器包括分区器,该分区器将要求解的方程划分成子集。每个子集仅包括相互独立的方程,并且因此可以并行求解。将被并行求解的方程由分区器提供给收集器,该收集器将子集中所包括的相互独立的方程组分组到矩阵的相同区域中,以便传递给一组逐次超松弛处理器。逐次超松弛处理器随后并行求解相互独立的方程,从而大大减少了求解大型线性优化所需的时间。在一些示例中,单个逐次超松弛处理器使用多线程技术来并行求解相互独立的方程。在一些示例中,单指令多数据(simd)处理器并行操作以并行求解相互独立的方程。

本文公开的计算机视觉处理系统能够快速地求解与图像/视频数据相关联的大型线性方程系统。因此,这样公开的计算机视觉处理系统能够将计算机视觉处理用于其中时间极为关键的更多的真实世界应用中。

图1是示例性计算机视觉处理系统100的框图,示例性计算机视觉处理系统100具有一个或多个视频(或静止图像)相机110、示例性计算机视觉增强器120、示例性视频/图像数据分析器130和示例性伺服电机控制器/致动器140,在一些示例中,相机110采集主体的视频(或静止图像)。由相机110采集的视频(或静止图像)数据被提供给计算机视觉增强器120,计算机视觉增强器120应用各种图像处理技术中的任何一种来增强所采集到的视频/图像数据。然后增强的视频/图像数据被提供给计算机视觉分析器,以用于标识在图像/视频数据中所采集的主体,得出关于主体的结论,基于主体的移动来预测主体的未来位置,确定主体的身份,确定是否允许主体访问访问受限制的区域,和/或任何数量的其他附加或替代动作。计算机视觉分析器可以存储信息和/或基于被分析的图像/视频数据来驱动伺服电机致动器。

图2是图1的示例性计算机视觉增强器120的示例性实施方式的框图。计算机视觉增强器120包括示例性图像/视频数据存储装置210、示例性方程并行化器220、一个或多个示例性逐次超松弛处理器230、以及示例性增强控制器240。在一些示例中,图像/视频数据存储装置210以图像/视频数据填充矩阵215的形式从(一个或多个)相机110(参见图1)接收所采集的图像/视频数据以用于存储。增强控制器240标识要应用于图像/视频数据的增强技术,并将所标识的增强技术通知方程并行化器220。例如,如果所采集的图像/视频数据有孔,则增强控制器240可以确定将深度填充应用于图像/数据。如果所采集的图像是高度像素化的,则增强控制器240可以替代地对图像数据应用平滑技术等。基于要应用的增强技术,方程并行化器访问包含所存储的像素/体素数据215的图像/视频数据填充矩阵215,标识与图像/视频数据相对应的线性方程组,并以将允许以并行方式求解一个或多个方程组的方式排列方程。方程组由方程并行化器220提供给逐次超越松弛处理器230以用于并行求解。在一些示例中,将方程提供给逐次超松弛处理器的方式导致所得到的解数据无序。在一些这样的示例中,方程并行化器220像素/体素数据。然后,增强控制器240然后将求解的方程的正确排序结果提供给计算机视觉分析器130(参见图1)。计算机视觉分析器130分析结果并使用信息来执行任何数量的动作,如上所述。

图3是图2的示例性方程并行化器220的示例性实施方式的框图。图3的示例性方程并行化器220包括示例性标识器(identifier)308、用于存储示例性m×n大小的方程填充矩阵311的示例性标识器存储装置310、示例性分区器330、示例性收集器340、用于存储示例性初始化矩阵374的示例性初始化器存储装置372,用于存储示例性m×n大小的重新排列的方程填充矩阵378的示例性收集器存储装置376、示例性重新排序管理器380、以及用于存储示例性m×n大小的重新排序矩阵384和示例性解填充矩阵386的示例性重新排序存储装置382。在一些示例中,分区器330包括示例性矩阵初始化器340、示例性掩蔽器350、示例性值选择器360和示例性值替换器370。在一些示例中,增强控制器240(参见图2)确定要应用于图像/视频数据的增强,并将要应用的技术通知标识器308。标识器308通过访问存储在示例性图像/视频数据存储装置210(参见图2)中的图像/视频数据填充矩阵215来响应通知。基于要应用的增强类型,标识器308标识与图像/视频数据相对应的方程。每个方程对应于存储在图像/视频数据填充矩阵215中的图像/视频数据的像素/体素之一。在一些示例中,方程对应于关于图像/视频数据以及图像/视频数据中所包括的相邻像素/体素之间的关系做出的一组假设。这些假设可以由增强控制器240提供给标识器308。这些假设是基于将被应用于图像/视频数据的增强技术的类型的。在一些示例中,这些假设与相邻像素/体素对彼此具有的影响相关。

由标识器308标识的方程是线性方程,当被求解时,产生图像/视频数据的增强版本。线性方程可以对应于任何数量的图像增强技术,包括平滑、深度填充等。如上所述,线性方程通常采取“ax=b”的形式,其中“a”对应于系数矩阵,并且“b”对应于约束向量。这两者的值至少部分地基于输入图像/视频数据。向量“x”对应于要在线性方程求解过程中估计的未知值的向量。图像/视频数据存储在具有m×n维的图像/视频数据矩阵中。在一些示例中,图像/视频数据是像素或体素数据。标识器308将要求解的方程置于同样具有m×n维的方程填充矩阵311中。方程填充矩阵311的元素中所包含的方程对应于包含图像/视频数据的图像/视频数据填充矩阵215。在一些示例中,存储在图像/视频数据填充矩阵215的元素中的图像/视频数据作为输入提供给存储在方程填充矩阵的对应元素中的(一个或多个)方程。如下文进一步描述的,通过逐次超松弛处理器230求解方程。

图3的示例性分区器320将方程分割或划分成可并行求解的方程组。如上所述,与图像数据的示例性第一像素(p1)相对应的第一方程(eq1)可以依赖于与存储在图像/视频数据填充矩阵215中的一个或多个其他像素(p2、p3、p4)相对应的第二、第三、第四(等等)方程(例如,eq2、eq3、eq4)的解。因此,第一方程(方程1)可能无法与第二、第三、第四等方程(eq2、eq3、eq4)中的一个或多个并行求解。需要以非并行方式求解方程(例如,eq1、eq2、eq3、eq4)使得对图像/视频数据填充矩阵215中的图像/视频数据的处理(例如,增强)是耗时的,并且限制了在实时或接近实时的应用中执行增强技术的能力。通过将方程划分成具有相互独立的方程的组(这些相互独立的方程然后可以并行求解),分区器320通过允许图像/视频增强技术实时或接近实时的应用,大大地增强了计算机视觉增强器120(参见图1和图2)的能力。

在一些示例中,示例性矩阵初始化器340初始化具有与方程填充矩阵311相同的维度和与图像/视频数据填充矩阵215相同的维度(例如,“m×n”)的初始化矩阵374。初始化矩阵374的元素都是零值(例如,矩阵的每个元素最初都保持为零)。当矩阵初始化完成时,矩阵初始化器340通知示例性掩蔽器350。掩蔽器350通过标识/选择具有要应用于初始化矩阵的元素的所需形状的掩模来响应通知。掩模形状是基于要解决的图像处理问题来选择的,并且反映图像中的每个像素/体素与其周围像素/体素之间的依赖性/连接性(由矩阵a定义)。更大的掩模覆盖更多的像素/体素并且指示与相邻像素/体素的更强的依赖性。掩模可以有任何需要的形状。每个掩模包括与初始化矩阵374的元素相对应的一组正方形。每个掩模的正方形关于掩模的中心正方形对称。图4a提供了示例性初始化矩阵374和示例性掩模402的图示。掩蔽器350以迭代方式将所选择的掩模402置于初始化矩阵374的元素上,使得在每次迭代期间,掩蔽器350将掩模的中心置于初始化矩阵的元素中的不同元素上。将掩模置于初始化矩阵上使得矩阵的一个或多个元素被掩模402覆盖,并且一个或多个矩阵元素不被掩模402覆盖。在一些示例中,掩蔽器350在第一次迭代期间放置掩模402,其中掩模中心(maskctr)位于初始化矩阵的第一行的第一元素(最左边的元素)上。在第二次迭代期间,掩蔽器350将掩模402向右移动一个矩阵元素,使得掩模中心(maskctr)位于第二矩阵元素之上,第二矩阵元素是矩阵的第一行的第一元素右侧的一个元素并且与第一元素位于同一行(例如,第一行)中。在一些示例中,掩蔽器350在每次迭代期间以所描述的方式继续移动掩模402,直到掩模的中心(maskctr)已被置于初始化矩阵402的第一行的最后一个(最右边)元素之上。此时,掩蔽器350移动掩模中心以覆盖初始化矩阵402的第二行的第一(最左边的)元素。掩蔽器350继续以所描述的方式将掩模的中心置于初始化矩阵的元素之上(例如,在进行到矩阵的下一连续行之前从左到右进行通过每一行的每个元素并且再次以从左到右的方式移动通过下一连续行)。

在一些示例中,除了以上述迭代方式在初始化矩阵374的元素之上移动掩模之外,在每次迭代期间,示例性值选择器360和示例性值替换器370还如下操作以用非负整数值填充初始化矩阵374。在示例性掩蔽器350以迭代方式将掩模402置于初始化矩阵374的元素上之后,掩蔽器350通知值选择器360。值选择器360通过选择将被置于掩模中心(maskctr)所位于的矩阵元素中的值来响应通知。在一些示例中,值选择器360选择非负整数值(例如,0,1,2,...)。在一些这样的示例中,值选择器360选择非负整数值(例如,0,1,2,...)中的最小值(例如,0),条件是非负整数值中的最小值不在掩模402所覆盖的任何矩阵元素中。如果非负整数值的最小值位于掩模402所覆盖的矩阵元素中的一个或多个中,则值选择器360选择非负整数值的下一最小值(例如,1),条件是非负整数值的下一最小值不在初始化矩阵374的被掩模402覆盖的任何元素中。如果非负整数值的下一最小值(例如,1)处于掩模402所覆盖的一个或多个矩阵元素中,则值选择器360选择非负整数值的下一最小值(例如,2)(相比于上一非负整数值(例如,1))。值选择器360以这种方式继续,直到针对掩模中心(maskctr)所覆盖的矩阵元素选择满足条件的非负整数值(例如,是不存在于掩模402所覆盖的任何矩阵元素中的所有可能的非负整数值中的最小值)为止。

图4b示出了示例性初始化矩阵374,其中掩模402的中心以初始化矩阵的第一元素为中心。图4c示出了示例性初始化矩阵374,其中掩模402的中心以初始化矩阵374的第二元素为中心,图4d示出了示例性初始化矩阵374,其中掩模的中心以初始化矩阵的第三元素为中心。当示例性掩蔽器350在第一次迭代期间将掩模置于初始化矩阵374上时(参见图4b),掩模的中心设置在初始化矩阵的第一元素上。然后,示例性值选择器360进行以标识要置于初始化矩阵的第一元素中的值。在第一次迭代中,值选择器最初选择最小非负整数零,并且然后确定值零是否处于在第一次迭代期间被掩模覆盖的矩阵的任何元素中。如可以看出的,值零位于初始化矩阵374在第一次迭代期间被掩模覆盖的若干元素中,使得值选择器360选择下一最小的非负整数值(例如1)(相比于先前评估的非负整数值零)。现在,值选择器360确定掩模402所覆盖的初始化矩阵374的任何元素是否保持值1。在该示例中,掩模所覆盖的矩阵元素中没有一个保持值1。结果,值选择器选择值1以用于置于初始化矩阵374的第一元素中。值选择器360将所选择的值1提供给值替换器370,值替换器370用值1替换当前存储在矩阵的第一元素中的值零。在用值1替换存储在第一元素中的值零之后,值替换器370通知掩蔽器350,掩蔽器350通过使掩模402移动/移位来开始第二迭代,使得初始化矩阵374的第二元素被掩模中心(maskctr)覆盖(参见图4c)。

示例性掩蔽器350再次通知示例性值选择器360,示例性值选择器360通过选择要置于初始化矩阵374的第二元素中的值来进行响应。现在参考图4c,值选择器360首先选择最小非负整数值零,并且然后将值零与由掩模402覆盖的初始化矩阵374的元素所保持的值进行比较。值零被保持在由掩模402覆盖的初始化矩阵374的至少一个元素中,使得值选择器360丢弃值零而选择下一最小非负整数值1。值选择器360确定由掩模402覆盖的初始化矩阵360的至少一个元素保持/存储值1,使得值选择器360丢弃值1,而选择下一最小非负整数值2。接下来,值选择器360确定在当前迭代期间由掩模覆盖的初始化矩阵374的元素中没有一个保持/存储值2,并且因此选择要置于第二矩阵元素中的值2。值选择器360将所选择的值2提供给值替换器370,值替换器370通过用值2替换初始化矩阵374的第二元素中的当前存储的值零来进行响应。在用值2替换存储在初始化矩阵374的第二元素中的值零之后,值替换器370通知掩蔽器350,掩蔽器350通过使掩模402移动/移位来开始第三次迭代,使得初始化矩阵374的第三元素被掩模中心(maskctr)覆盖(参见图4d)。掩蔽器350再次通知值选择器360,值选择器360通过选择要置于初始化矩阵374的第三元素中的值来进行响应。

现在参考图4d,值选择器360首先选择最小非负整数值零,然后将值零与由掩模402覆盖的矩阵元素所保持的值进行比较。值零被保持在掩模所覆盖的矩阵元素中的至少一个中,使得值选择器360丢弃值零,而选择下一最小非负整数值1。值选择器360确定在第三次迭代期间由掩模覆盖的矩阵的元素中没有一个保持/存储值1,使得值选择器360选择要置于初始化矩阵374的第三元素中的值1。值1被提供给值替换器370,值替换器370通过用值1来替换初始化矩阵374的第三元素的当前存储的值零来进行响应。

示例性掩蔽器350、示例性值选择器360和示例性值替换器370继续掩蔽初始化矩阵374的元素,并以上述方式选择/替换存储在初始化矩阵374的元素中的值,直到已经执行的迭代次数等于初始化矩阵374的元素的数量(例如,“m×n”),此时初始化矩阵374的所有元素都已填充有如图4e所示的一组非负整数值中的一个。如参考图4e可以看出的是,填充矩阵374包括元素/单元的两个分区(子集),第一分区对应于用值1填充的所有元素/单元,并且第二分区对应于用值2填充的所有元素/单元。因此,可以并行求解与现在填充的初始化矩阵374的具有1的单元相对应的所有方程,并且可以并行求解与现在填充的初始化矩阵374的具有2的单元相对应的所有方程。

再次参考图3,示例性值替换器370将现在填充的初始化矩阵374提供给示例性收集器330。收集器330使用现在填充的初始化矩阵374来重新排列存储在方程填充矩阵311中的方程。在一些示例中,收集器330访问存储在标识器存储装置310中的方程填充矩阵311,并使用方程填充矩阵311来创建重新排列的方程填充矩阵378。在重新排列的方程填充矩阵378中,存储在方程填充矩阵311的元素中的方程已经基于现在填充的初始化矩阵374的内容被重新排列。在一些这样的示例中,在现在填充的初始化矩阵374中具有相同非负整数值的方程填充矩阵311的元素被一起分组在重新排列的方程填充矩阵378中。在一些这样的示例中,方程填充矩阵374的具有值1(其存储在位于现在填充的初始化矩阵374中的相同位置的元素中)的所有元素被一起收集在重新排列的方程填充矩阵378的一组行中。同样,方程填充矩阵311的具有值2(其存储在位于现在填充的初始化矩阵374中的相同位置的元素中)的元素中所存储的所有方程被收集在重新排列的方程填充矩阵374的一组行中。收集器330继续以这种方式收集剩余方程,直到根据现在填充的初始化矩阵374的对应元素已将方程填充矩阵311中的所有方程收集在一起并将其存储在重新排列的方程填充矩阵378中。然后,收集器330向(一个或多个)示例性逐次超松弛处理器230(参见图2)提供重新排列的方程填充矩阵378,其中方程已经按照所描述的方式收集/分组在一起。(一个或多个)逐次超松弛处理器230使用simd处理器、多线程编程等并行地求解重新排列的方程填充矩阵378的同一行中所包含的方程。并行求解重新排列的方程填充矩阵378的同一行中所包含的方程大大减少了求解重新排列的方程填充矩阵378的所有方程所需的处理时间,从而使得计算机视觉增强器120适用于实时计算机视觉处理应用。

在所示示例中,解值由(一个或多个)示例性逐次超松弛处理器230提供给示例性方程并行化器220的示例性重新排序管理器380。在一些示例中,重新排序管理器380将解的值存储在示例性重新排序存储器382中的示例性解填充矩阵386中。重新排序管理器380将包含在解填充矩阵386的元素中的解值移动(重新排序)到在被示例性收集器330收集在一起之前对应方程所占据的元素。在一些示例中,解填充矩阵386(存储为示例性重新排序矩阵384)的最终、重新排序的解值形成增强的图像/视频,该增强的图像/视频随后由增强控制器240发送到示例性计算机视觉分析器130(参见图1),以用于采取以上描述的任何动作。

虽然在图2和图3中示出了实施图1的计算机视觉增强器120的示例性方式,但是图2和图3中所示的元素、过程和/或设备中的一个或多个可以被组合、划分、重新排列、省略、消除和/或以任何其它方式来实施。此外,示例性计算机视觉图像/视频数据存储装置210、示例性方程并行化器220、示例性逐次超松弛处理器230、示例性增强控制器240、示例性标识器308、示例性标识器存储装置310、示例性分区器320、示例性收集器330、示例性矩阵初始化器340、示例性掩蔽器350、示例性值选择器360、示例性值替换器370、示例性初始化器存储装置372、示例性重新排序管理器380、示例性收集器存储器376、示例性重新排序存储装置382、和/或更一般地示例性计算机视觉增强器120可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实施。因此,例如,示例性计算机视觉图像/视频数据存储装置210、示例性方程并行化器220、示例性逐次超松弛处理器230、示例性增强控制器240、示例性标识器308、示例性标识器存储装置310、示例性分区器320、示例性收集器330、示例性矩阵初始化器340、示例性掩蔽器350、示例性值选择器360、示例性值替换器370、示例性初始化器存储装置372、示例性收集器存储装置376、示例性重新排序管理器380、示例性重新排序存储装置382、/或更一般地示例性计算机视觉增强器120中的任一项可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)专用集成电路((一个或多个)asic)、(一个或多个)可编程逻辑器件((一个或多个)pld)和/或(一个或多个)现场可编程逻辑器件((一个或多个)fpld)来实施。当阅读本专利用于覆盖纯软件和/或固件实施方式的任何装置或系统权利要求时,示例性计算机视觉增强器120、示例性计算机视觉图像/视频数据存储装置210、示例性方程并行化器220、示例性逐次超松弛处理器230、示例性增强控制器240、示例性标识器308、示例性标识器存储装置310、示例性分区器320、示例性收集器330、示例性矩阵初始化器340、示例性掩蔽器350、示例性值选择器360、示例性值替换器370、示例性重新排序管理器380、示例性收集器存储装置376和/或示例性重新排序存储装置382在此被明确定义为包括非暂时性计算机可读存储器件或存储盘(包括软件和/或固件),例如存储器、数字多功能盘(dvd)、光盘(cd)、蓝光盘等。又进一步地,图1的示例性计算机视觉增强器120可以包括除图2和图3所示的那些元素、过程和/或设备之外或替代图2和图3所示的那些元素、过程和/或设备的一个或多个元素、过程和/或设备,和/或可以包括任何或所有所示元素、过程和设备中的不止一个元素、过程和设备。

表示用于实施图1和图2的计算机视觉增强器120的示例性机器可读指令的流程图在图5和图6中示出。在这些示例中,机器可读指令包括由处理器(例如下面结合图7讨论的示例性处理器平台700中所示的处理器712)执行的程序。程序可以体现在存储在非暂时性计算机可读存储介质(例如cd-rom、软盘、硬盘、数字多功能盘(dvd)、蓝光盘或与处理器712相关联的存储器)上的软件中,但是整个程序和/或其部分可以替代地由除处理器712以外的设备执行,和/或体现在固件或专用硬件中。此外,尽管示例性程序是参考图5和图6中所示的流程图描述的,但可以替代地使用实施示例性计算机视觉增强器120的许多其他方法。例如,可以改变块的执行顺序,和/或可以改变、消除或组合所描述的一些块。另外或者替代地,任何或者所有块可以由一个或多个硬件电路(例如,分立式和/或集成式模拟和/或数字电路、现场可编程门阵列(fpga)、专用集成电路(asic)、比较器、运算放大器(op-amp)、逻辑电路等)来实施,这些硬件电路被构造成在不执行软件或固件的情况下执行对应的操作。

如上所述,图5和图6的示例性过程可以使用存储在非暂时性计算机和/或机器可读介质上的编码指令(例如,计算机和/或机器可读指令)来实施,所述非暂时性计算机和/或机器可读介质例如为硬盘驱动器、闪速存储器、只读存储器、光盘、数字多功能盘、高速缓存、随机存取存储器和/或任何其他存储设备或存储盘,其中信息针对任何持续时间(例如,针对延长的时间段、永久地、针对简短的实例、针对临时缓冲、和/或针对信息的高速缓存)进行存储。如本文所使用的,术语非暂时性计算机可读介质被明确地定义为:包括任何类型的计算机可读存储设备和/或存储盘,并且排除传播信号和排除传输介质。“包括”和“包含”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求列出遵循任何形式的“包括”或“包含”(例如,包含(comprises)、包括(includes)、包含(comprising)、包括(including)等)的任何内容时,可以理解的是,可以存在附加的元素、项等,而不落在对应的权利要求的范围之外。如本文所使用的,当短语“至少”用作权利要求的前序中的过渡术语时,其采用与术语“包含”和“包括”相同的方式是开放式的。

图5的程序500在方框502开始,其中示例性增强控制器240(参见图2)访问存储在示例性图像/视频数据存储装置210中的一组图像/视频数据,并且标识要应用于图像/视频数据的增强技术。如上所述,增强技术可以包括平滑化、深度填充、混合、着色等中的任何技术。图像/视频数据被存储为图像/视频数据矩阵,并且存储在图像/视频矩阵的元素中的图像/视频数据是像素或体素,它们一起形成图像或视频帧。在一些示例中,图像/视频数据矩阵是m×n维。

基于要应用的增强技术,示例性方程并行化器220(参见图2)的标识器308标识要结合图像/视频数据求解的一组方程(方框504)。在一些示例中,标识器308创建包含具有与图像/视频数据的矩阵相同的维度的方程的矩阵。方程并行化器220的示例性分区器320标识可以并行求解的方程填充矩阵中所包含的方程(方框506)。在分区器320标识要并行处理(例如,求解)的方程之后,方程并行化器220的示例性收集器330以便于将要并行求解的方程同时提供给示例性逐次超松弛处理器230的方式排列所标识的方程(方框508)。在一些示例中,收集器330可以将要被并行求解的方程收集到方程填充矩阵的同一行或行的组。收集器330将(在矩阵中)新排序的方程提供给逐次超松弛处理器230(方框510)。在一些示例中,方程在如下矩阵中被提供给逐次超松弛处理器230:所述矩阵被格式化为使得同一行中所包含的所有方程被并行求解。在一些示例中,这些方程被提供给逐次超松弛处理器230,使得行中的多个行中所包含的所有方程被并行求解。逐次超松弛处理器230求解由方程并行化器220提供的方程(方框512),以产生解数据的矩阵(例如,解填充矩阵386)。在一些示例中,逐次超松弛处理器230被配置为在同一时间(例如,并行地)处理同一行或多行中所包含的方程。示例性逐次超松弛处理器230将解数据的矩阵提供给示例性方程并行化器220的解重新排序管理器380。一旦方程被解出,所得到的解数据表示存储在图像/视频数据存储器210中的原始图像/视频数据的增强版本。解重新排序管理器380重新排列解填充矩阵386中的解数据的顺序,以匹配存储在图像/视频数据存储器210中的图像/视频矩阵215中的图像/体素数据的顺序(方框514)。因此,如果在并行化过程期间,与方程填充矩阵311(参见图3)的第一元素相对应的第一方程从方程填充矩阵311的第一元素移动到方程填充矩阵311的第二元素,则存储在解填充矩阵386的第二元素中的解数据将被移动到重新排序矩阵384的第一元素。存储在重新排序矩阵384中的重新排序的解数据形成增强的图像/视频。此后,由增强控制器240(参见图2)将重新排序的解数据(例如,增强的图像/视频数据)提供给计算机视觉分析器130(参见图1)(方框516),以用于分析图像/视频数据的主体和/或基于图像/视频数据的主体来采取动作。如上所述,基于图像/视频数据的主体来采取动作可以包括任何数量的动作,例如:更新关于主体的情报报告,经由一个或多个伺服电机致动器来驱动一个或多个伺服电机,将关于存在主体的通知提供给安全监控系统等。在增强的图像/视频数据被提供给计算机视觉分析器130之后和/或基于增强的图像采取一个或多个动作之后,程序结束。

图6的程序600表示由示例性方程并行化器220(参见图2和图3)的示例性分区器320(参见图3)执行的示例性操作。图6是图5的程序500的方框506和方框508的示例性实施方式。在一些示例中,程序600在方框602开始,其中示例性矩阵初始化器340(参见图3)初始化具有与图像/视频矩阵215(参见图2)相同的维度(例如,m×n)的矩阵(例如,初始化矩阵374),该矩阵具有全零值(例如,初始化矩阵374的每个元素保持为零)。在一些示例中,矩阵初始化器340还将迭代计数器“i”设置为等于零,并且然后通知示例性掩蔽器350(参见图3)初始化矩阵374的初始化完成。

示例性掩蔽器350(参见图3)通过以值1使迭代计数递增并且然后判断迭代计数“i”是否等于“m×n”来响应通知(方框604)。如果迭代计数“i”不等于m×n,则掩蔽器350定义要应用于初始化矩阵374的元素/单元的掩模,并将掩模置于初始化矩阵上(方框606)。基于要求解的处理问题(例如,要应用的增强类型)来选择掩模,并且掩模反映图像/视频数据中的像素/体素和其周围像素/体素(由矩阵a定义)之间的依赖性/连接性。如上所述,更大的掩模对应于更强的依赖性,并且更小的掩模对应于更弱的依赖性。在方框606,掩蔽器350将掩模置于初始化矩阵374上,使得掩模的中心被设置在初始化矩阵的“第i个”元素/单元上。此外,掩蔽器350向示例性值选择器360通知掩模已经被放置(还在方框606)。值选择器360通过在对应的(例如,第i次”)迭代期间选择要在掩模中心(maskctr)(参见图4a)所驻留的矩阵元素中放置的值来响应通知(方框608)。在一些示例中,值选择器360选择非负整数值(例如,0,1,2,...)。在一些这样的示例中,值选择器360选择非负整数值(例如,0,1,2,...)中的最小值(例如,0),条件是非负整数值中的最小值不在初始化矩阵374的当前被掩模覆盖的任何元素中。如果非负整数值的最小值位于初始化矩阵374的被掩模覆盖的元素中的一个或多个中,则值选择器360选择非负整数值的下一最小值(例如,1),条件是非负整数值的下一最小值不在初始化矩阵374的被掩模覆盖的任何元素中。如果非负整数值的下一最小值(例如,1)处于掩模所覆盖的一个或多个矩阵元素中,则值选择器360选择非负整数值的下一最小值(例如,2)(相比于上一非负整数值(例如,1))。值选择器360以这种方式继续,直到针对初始化矩阵374的被掩模中心(maskctr)覆盖的元素选择了满足条件的非负整数值(例如,是不存在于掩模所覆盖的任何矩阵元素中的所有可能的非负整数值中的最小值)为止。

在选择非负整数值之后,值选择器360将所选择的值1提供给值替换器370,值替换器370用值1替换当前存储在矩阵的第一元素中的值零(方框610)。

在用所选择的值替换存储在“第i个”元素中的零值之后,值替换器370通过判断迭代计数“i”是否等于“m×n”来判断是否要处理初始化矩阵的附加元素(还在方框612)。如果迭代计数“i”不等于“m×n”,则要处理初始化矩阵374的附加元素/单元,并且程序600返回到方框604,在方框604处迭代计数再次递增。重复方框604-610,直到对初始化矩阵的所有元素/单元进行了处理为止。

当已经处理了所有的元素/单元时(例如,“i”=m×n)时,示例性值替换器370将已经用非负整数值填充的初始化矩阵(现在被称为现在填充的初始化矩阵374)提供给示例性收集器330。示例性收集器330使用现在填充的初始化矩阵374来重新排列方程填充矩阵的元素/单元的内容(方框614)。在一些示例中,收集器330使得存储在方程填充矩阵311的元素中的方程基于现在填充的初始化矩阵374的内容被重新排列。在一些这样的示例中,方程填充矩阵311的在填充矩阵中具有相同非负整数值的元素被一起收集/分组在方程填充矩阵311中。在一些这样的示例中,方程填充矩阵311的具有值1(其存储在位于填充矩阵中的相同位置的元素中)的所有元素被一起收集在方程填充矩阵的一组行中。同样,方程填充矩阵311的具有值2(其存储在位于现在填充的初始化矩阵374中的相同位置的元素中)的元素中所存储的所有方程被一起收集在方程填充矩阵311的一组行中。收集器330继续收集剩余的方程,直到已经根据现在填充的矩阵374的对应元素将所有方程收集到一起。在一些示例中,收集器330将重新排列的方程存储在收集器存储器376中的重新排列的方程填充矩阵378中。存储在重新排列的方程填充矩阵378中的方程现在准备好被求解,使得与重新排列的方程填充矩阵378的同一行相对应的方程可以被并行求解,并且程序600结束。

图7是能够执行图5和6的指令以实施图2和图3的装置的示例性处理器平台700的框图。处理器平台700可以是,例如服务器、个人计算机、移动设备(例如,手机、智能电话、诸如ipadtm之类的平板电脑)、机器人、无人飞行器(uav)、制造控制处理器或任何其他类型的计算设备。

所示示例的处理器平台700包括处理器712。所示示例的处理器712是硬件。例如,处理器712可以由来自任何期望的家庭或制造商的一个或多个集成电路、逻辑电路、微处理器或控制器来实施。硬件处理器可以是基于半导体(例如,基于硅)的设备。在该示例中,处理器712实施示例性计算机视觉增强器120、示例性方程并行化器220、示例性逐次超松弛处理器230、示例性增强控制器240、示例性标识器308、示例性矩阵初始化器340、示例性掩蔽器350、示例性值选择器360、示例性值替换器370、示例性重新排序管理器380、以及示例性收集器330。

所示示例的处理器712包括本地存储器713(例如,高速缓存)。所示示例的处理器712经由总线718与包括易失性存储器714和非易失性存储器716的主存储器通信。易失性存储器714可以由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、rambus动态随机存取存储器(rdram)和/或任何其他类型的随机存取存储器设备来实施。非易失性存储器716可以由闪速存储器和/或任何其他所需类型的存储器设备来实施。对主存储器714、716的访问由存储器控制器控制。在该示例中,易失性存储器714、非易失性存储器716和/或本地存储器713中的任何一个实施示例性图像/视频数据存储装置210、示例性标识器存储装置310、示例性初始化器存储装置372、示例性收集器存储装置376和示例性重新排序存储装置382中的任何一个。

所示示例的处理器平台700还包括接口电路720。接口电路720可以通过任何类型的接口标准来实施,例如以太网接口、通用串行总线(usb)和/或pciexpress接口。

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

一个或多个输出设备724还连接到所示示例的接口电路720。输出设备724例如可以由显示设备(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器、阴极射线管显示器(crt)、触摸屏、触觉输出设备、打印机和/或扬声器)来实施。因此,所示示例的接口电路720通常包括图形驱动器程序卡、图形驱动器芯片和/或图形驱动器处理器。

所示示例的接口电路720还包括通信设备,例如发射器、接收器、收发器、调制解调器和/或网络接口卡,以便于经由网络726(例如,以太网连接、数字订户线(dsl)、电话线、同轴电缆、蜂窝电话系统等)与外部机器(例如,任何种类的计算设备)交换数据。

所示示例的处理器平台700还包括用于存储软件和/或数据的一个或多个大容量存储设备728。这种大容量存储设备728的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光盘驱动器、raid系统和数字多功能盘(dvd)驱动器。在该示例中,大容量存储器728还可以实施示例性图像/视频数据存储装置210、示例性标识器存储装置310、示例性初始化器存储装置372、示例性收集器存储装置376和示例性重新排序存储装置382中的任何一个。

图5和图6的编码指令732可以存储在大容量存储设备728中、易失性存储器714中、非易失性存储器716中和/或诸如cd或dvd之类的可移动的有形计算机可读存储介质上。

根据以上内容将理解的是,已经公开了减少在计算机视觉处理系统中增强图像/视频数据所需的时间的示例性方法、装置和制造品。所公开的方法、装置和制造品通过将一组线性方程划分成可并行求解的子集来实现处理时间的这种减少。方程的子集被提供给用于并行求解的一组一个或多个逐次超松弛处理器。通过并行求解至少一些方程,图像/视频数据被处理得快得多,从而使得能够在实时和/或接近实时的应用中使用基于逐次超松弛处理器的计算机视觉系统。

本文还公开了以下进一步的示例。

示例1是一种用于为逐次超松弛处理器准备方程组的装置,并且装置包括标识器,该标识器用于标识方程组。方程组中的相应方程对应于输入图像的相应像素。该装置还包括分区器,该分区器用于将方程组划分成分区,分区包含相互独立的方程子集。该装置的收集器基于分区将方程组的子集收集在组中,并且组中所包括的方程要将逐次超松弛处理器并行求解。

示例2是示例1所述的装置,其中,方程组中的相应方程存储在矩阵的相应元素中,并且收集器通过重新定位矩阵中的方程来将方程组的子集收集在组中。

示例3是示例1所述的装置。在示例3中,分区器包括:矩阵初始化器,其用于将矩阵的元素初始化为零;掩蔽器,其用于通过一组迭代逐次地掩蔽矩阵的值;值选择器,其用于基于由掩模掩蔽的元素的子集的值来为矩阵的元素中的相应元素逐次地选择非零值;以及值替换器,其用于用由值选择器选择的非零值替换矩阵的零值。

示例4是示例3所述的装置,其中,掩蔽器通过定义具有形状的掩模并且在相应的迭代期间将掩模的中心置于矩阵的值中的相应值之上来掩蔽矩阵的值。

示例5是示例4所述的装置,其中,形状由像素连接性的类型定义。

示例6是示例3和示例4所述的装置,其中,该矩阵是第一矩阵,并且方程组当由标识器标识时被排列在第二矩阵中。在示例6所述的装置中,第一矩阵和第二矩阵具有相同的维度,并且收集器通过基于分别在第一矩阵的对应位置中所存储的非零值重新定位所述第二矩阵中的方程组中的相应方程来将所述方程组的所述子集收集在组中。

示例7是示例6所述的装置,其中,收集器通过将方程组中的与第一非零值对应的相应方程置于第二矩阵的第一组行中并且将方程组中的与第二非零值对应的相应方程置于第二矩阵的第二组行中来重新定位方程组中的相应方程。在示例7中,第一组行和第二组行是不同组的行。

示例8是一种或多种非暂时性机器可读存储介质,包括机器可读指令,所述机器可读指令当被执行时使得一个或多个处理器至少标识要求解的方程组。在示例8中,方程组中的相应方程与输入图像的相应像素相对应。示例8的指令还使得一个或多个处理器将方程组划分成分区,分区包含相互独立的方程子集。指令还使得一个或多个处理器基于分区将方程组的子集置于要由一组逐次超松弛处理器并行求解的组中。在示例8中,由逐次超松弛处理器产生的结果形成输入图像的增强版本。

示例9是示例8所述的一种或多种非暂时性机器可读存储介质,其中,方程组被排列在矩阵中,并且通过重新排列矩阵中的方程的位置而将方程组的子集置于组中,使得相同子集中所包括的方程在矩阵中彼此靠近。

示例10是示例8所述的一种或多种非暂时性机器可读存储介质,其中,用于划分方程组的指令包括用于使一个或多个处理器执行以下操作的指令:用零值填充矩阵;基于像素之间的关系来定义掩模;迭代地将掩模置于零值矩阵上,其中,在相应的迭代期间,掩模以矩阵中的零值中的相应零值为中心,在相应的迭代期间,基于由所述掩模对矩阵的覆盖,选择与零值中的相应零值相对应的相应非零值;以及在相应的迭代期间,在矩阵中,用相应的、所选择的非零值替换相应零值。

示例11是示例8-10中的任一项所述的一种或多种非暂时性机器可读存储介质,其中,基于关于像素的假设来标识方程组。

示例12是示例10所述的一种或多种非暂时性机器可读存储介质,其中,掩模的形状是基于像素的连接性的。

示例13是示例10所述的一种或多种非暂时性机器可读存储介质,其中,基于矩阵的未被掩模覆盖的元素来选择相应非零值。

示例14是示例10、示例12和示例13中的任一项所述的一种或多种非暂时性机器可读存储介质,其中,与第一非零值相对应的方程被包括在第一子集中,与第二非零值相对应的方程被包括在第二子集中,并且使得一个或多个处理器将方程的子集置于组中的指令还包括执行如下操作的指令:使得一个或多个处理器将方程的第一子集置于矩阵的第一组行中并将方程的第二子集置于矩阵的第二组行中。

示例15是示例14所述的一种或多种非暂时性机器可读存储介质,其中,指令还使得一个或多个处理器将与矩阵的行相对应的方程的子集作为并行输入提供给该组逐次超松弛处理器。

示例16是一种用于为逐次超松弛处理器准备方程的装置,其包括用于标识方程的装置,其中,方程的组中的相应方程对应于输入图像的相应像素。示例16所述的装置还包括:用于将方程组划分成分区的装置,所述分区包含方程的相互独立的子集;以及用于将方程的子集收集在组中以由逐次超松弛处理器并行求解的装置。

示例17是示例16所述的装置,其中,方程中的相应方程存储在矩阵的相应元素中,并且用于收集的装置通过重新定位矩阵中的方程来将方程的子集收集在组中。

示例18是示例16所述的装置,其中,用于划分的装置包括:用于形成包含零的元素的矩阵的装置;用于通过一组迭代逐次地掩蔽矩阵的元素的装置;用于基于由掩模掩蔽的元素的子集的值来为矩阵的元素中的相应元素逐次地选择非零值的装置;以及用于用值选择器选择的非零值替换矩阵的零值的装置。

示例19是示例18所述的装置,其中,用于逐次地掩蔽矩阵的值的装置定义具有形状的掩模并且在相应的迭代期间将掩模的中心置于矩阵的值中的相应值之上。

示例20是示例19所述的装置,其中,掩模的形状由像素连接性的类型定义。

示例21是示例18-20中的任一项所述的装置,其中,该矩阵是第一矩阵,所述方程当由用于标识的装置标识时被排列在第二矩阵中,所述第一矩阵和所述第二矩阵具有相同的维度,并且用于将方程的子集收集到组中的装置基于分别存储在第一矩阵的对应位置中的非零值来重新定位第二矩阵中的方程组中的相应方程。

示例22是示例21所述的装置,其中,用于收集的装置是通过将方程组中与第一非零值相对应的相应方程置于第二矩阵的第一组行中并且将方程组中与第二非零值相对应的相应方程置于第二矩阵的第二组行中来重新定位方程组中的相应方程的。在示例22中,第一组行和第二组行是不同组的行。

示例23是一种用于对与图像数据相关联的一组线性方程进行并行化求解的方法,并且所述方法包括:通过利用处理器执行指令来标识要求解的方程,方程中的相应方程与图像数据的相应像素相对应;通过利用处理器执行指令来确定方程的相互独立的子集;以及通过利用处理器执行指令来将子集中所包括的方程同时提供给逐次超松弛算法,以便进行并行求解。

示例24是示例22所述的方法,其中,方程被排列在矩阵中,并且通过重新排列矩阵中的方程的位置来将方程的子集置于组中,使得相同子集中所包括的方程在矩阵中彼此靠近。

示例25是示例22所述的方法,其中,确定子集包括:初始化零值矩阵;基于像素的连接性来定义掩模;将掩模置于零值的矩阵上,其中,在一组迭代期间,掩模以矩阵中的零值中的相应零值为中心;在一组迭代中的相应迭代期间,基于掩模对矩阵的覆盖,选择与零值中的相应零值相对应的相应非零值;以及在一组迭代中的相应迭代期间,在矩阵中,用相应的、所选择的非零值替换相应零值。

示例26是一种机器可读介质,其包括代码,该代码当被执行时使得机器实现示例16-22中的任一项所述的装置。

示例27是一种机器可读存储器,其包括机器可读指令,该机器可读指令当被执行时实施任何前述示例中所包括的方法或实现任何前述示例中所包括的装置。

尽管本文公开了某些示例性方法、装置和制造物品,但本专利的覆盖范围不限于此。相反,本专利涵盖了明确落在本专利权利要求范围内的所有方法、装置和制造品。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1