图形处理器中的连接组件标记的制作方法

文档序号:9200209阅读:460来源:国知局
图形处理器中的连接组件标记的制作方法
【专利说明】图形处理器中的连接组件标记
【背景技术】
[0001] 计算机视觉应用可以涉及面部、手势以及图像和/或视频中的其它对象的自动识 另1J。利用连接组件标记(Connected Component Labeling,CCL)可以便于实现识别,CCL标 识图像/帧中属于相同对象的部分。传统地,CCL解决方案可能已经在中央处理单元(CPU) 上实现,其中基于CPU的解决方案可能已经遭遇了低效率及功率消耗挑战。尽管更多最近 的CCL解决方案可能已经使用通用图形处理单元(GPGPU)技术来解决这些关注中的一些, 但是仍然存在相当大的改进空间。
【附图说明】
[0002] 通过阅读随后的说明书和所附的权利要求书,并且通过参考随后的附图,实施例 的各个优点对于本领域的技术人员而言将变得显而易见,其中:
[0003] 图1是对根据实施例的连接组件标记(CCL)结果的示例的说明。
[0004] 图2是根据实施例的图形处理器CCL解决方案的示例的框图;
[0005] 图3是根据实施例标记连接组件的方法的示例的流程图;
[0006] 图4A-4C是根据实施例的进行单指令多数据(SIMD)扫描的方法的示例的流程 图;
[0007] 图5是对根据实施例的快速扫描场景的示例的说明;
[0008] 图6是对根据实施例的通用扫描场景的示例的说明;
[0009] 图7是根据实施例的合并连接表的方法的示例的流程图;
[0010] 图8是对根据实施例的标记联合场景的示例的说明;
[0011] 图9是根据实施例将全局CCL表联合到共享存储器的方法的示例的流程图;
[0012] 图10是根据实施例的表平整过程的示例的状态图;
[0013] 图IIA和IIB是根据实施例的表平整阶段的示例的流程图;
[0014] 图12和图13是根据实施例的系统的示例的框图;以及
[0015] 图14是根据实施例的具有小形状因子的系统的示例的框图。
【具体实施方式】
[0016] 图1示出了连接组件标记(CCL)结果20,其中将图像标记为包含背景部分22以 及与图像中的不同组件(例如,对象)相对应的多个其它部分24、26。例如,第一前景部分 24可以与图像中描绘的个体的一个身体部分(例如,面部)相对应,而第二前景部分26可 以与图像中描绘的个体的另一身体部分(例如,手部)相对应。所标记的组件可以与例如 以建筑物、交通工具、景观项目(例如,树、山、地平线)等等或其任意组合为例的对象相对 应。如将更详细讨论的,CCL结果20可以完全由使用提供了提高的效率、更少的处理开销、 减少的功率消耗、延长的电池寿命等等的方法的图形处理器来生成。
[0017] 现在转向图2,示出了图形处理器CCL解决方案,其中获得与图像相关联的数 据28(例如,前景数据、部分标记数据)。在所说明的示例中,图形处理器中的多个线程 30(30a-30n)(例如,图形处理单元/GPU线程)用于进行数据28的单指令多数据(SMD)扫 描32。在此方面,图形处理器可以包括能够针对CCL过程提供实质的并行操作的相对大数 量的执行单元。而且,使用SMD扫描32能够使单个调用激活函数的多个实现,其中函数的 每一个实现可以针对图像的区域/带/片(例如,2x16片)生成连接表34 (34a-34n)。可 以将可以与多个线程30相对应(例如,与可用线程1 :1相对应)的多个连接表34组合到 单级合并过程35中以形成全局CCL表36。结合多个线程30使用单级合并过程35可以通 过利用图形处理器中的所有可用线程来进一步提高效率。
[0018] 全局CCL表36通常可以包含针对图像的每一个像素的数值标记,其中上述标记可 以具有分层数据结构。例如,诸如第一前景部分24(图1)的特定部分的像素标记可以全 部被链接到被分配给该部分中的像素中的一个或多个的"根"标记,其中诸如第二前景部分 26(图1)的另一部分可以全部被链接到被分配给该部分中的像素中的一个或多个的不同 的根标记。此外,经由高效率的平整过程37,全局CCL表36可以被转换为具有全局递增标 记(例如,在根标记当中进行连续标记)的经平整的全局CCL表38(图2)。经平整的全局 CCL表38的全局递增标记可以使随后的计算机视觉处理能够更加有效率。
[0019] 图3示出了标记连接组件的方法40。方法40可以被实现为存储在诸如随机存 取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、闪存等等的机器或者计算机可读 存储介质中的逻辑指令的集合,被实现在例如以可编程逻辑阵列(PLA)、现场可编程门阵列 (FPGA)、复杂可编程逻辑器件(CPLD)为例的可配置逻辑中,被实现在使用例如以专用集成 电路(ASIC)、CM0S或晶体管-晶体管逻辑(TTL)技术或其任意组合为例的固定功能的逻辑 硬件中。例如,可以以一种或多种编程语言的任意组合来编写用于执行在方法40中示出的 操作的计算机程序代码,上述编程语言包括诸如C++等等的面向对象的编程语言以及诸如 "C"编程语言或者类似的编程语言的常规过程编程语言。而且,可以使用本文中提及的电路 技术中的任意一种来实现方法40。
[0020] 所说明的处理块42规定获得与图像相关联的数据,其中该数据可以例如包括前 景数据(例如,指示每一个像素是前景像素还是背景像素的映射/遮蔽)、部分标记数据 (例如,仅针对区域/片的最上面的行和最左边的列的组件标记)等等、或者其任意组合。 数据可以例如从计算机视觉管线中的较前级获得。可以在框44处使用图形处理器中的多 个线程来对数据进行SIMD扫描。
[0021] S頂D扫描
[0022] 图4A例示了可以在框54处做出的关于正在被操作的区域是否是同构的(例如, 同构情况是否存在)的确定。如已经指出的,每一个CPU线程可以对诸如包含像素的顶行 和底行的2x16片的图像的子集进行操作。如果该区域是同构的,则可以在框56处对该区 域使用快速扫描过程以生成针对该区域的本地连接表。否则,所说明的框58对该区域使用 通用扫描过程以生成本地连接表。
[0023] 图4B和图5例示了快速扫描过程可以涉及在框60处针对具有顶行和底行的区域 确定在底行中是否已经标识任何新的连接信息。该新的连接信息可以被认为是标识新组件 和/或在组件的像素之间的新关系的信息。更具体地说,如果确定针对底行的前景遮蔽(例 如,使用"1"指定前景像素并且使用"〇"指定背景像素)与针对顶行的前景遮蔽基本类似, 则可以推断在该底行中还没有标识新的连接信息。在这样的情况下,框62可以将标记从顶 行拷贝到底行中。例如,如在图5的"情况1"场景64中最佳示出的,由于相对应的前景数 据不包含新的连接信息(例如,基本类似),因此可以将标记"3、0、4、4、4、4"从顶行拷贝到 底行。
[0024] 另一方面,如果新的连接信息存在于底行中,则可以在框66处做出关于底行中的 所有像素是否都是前景像素(即,在前景遮蔽中使用"1"来指定)的确定。如果为是,则所 说明的框68在该区域/片中发现最小标记,其中可以在框70处将该最小值分配到该区域 /片中的所有前景像素。在该方面,可以使用分层数据结构,其中将被链接到像素的最低标 记认为是针对正在讨论的像素的"根"标记。
[0025] 因而,在图5的"情况2"场景72中,可以将标记"3"识别为该区域中的最小标记 并且将其分配到所有前景像素(即,在前景遮蔽中使用"1"指定的像素)。框74可以在该 区域的标记和根标记之间形成联合(例如,关联/链路)。因此,所说明的方案可以是向图 像的像素分配标记的相对快速的方案。如果在所说明的框66处确定底行中的所有像素都 不是前景像素,则可以将该区域看作是非同构的,并且扫描过程可以在没有成功地标记该 区域中的所有像素的情况下终止。
[0026] 下面所注释的代码片段示出了实现快速扫描过程的一个方案。
[0027]
[0028]
[0029] 如已经指出的,如果该区域不是同构的,则可以对该区域使用通用扫描过程以生 成本地连接表。图4C和图6例示了一种使用迭代邻域搜索的方案,其中当没有发现新 的最小值时,搜索结束。更具体地说,框76可以规定将顶行中的新根初始化为针对该顶 行的标记,其中在框78处可以将底行中的像素设置到唯一高标记(例如,OxffffffOO、 OxffffffOl、…OxffffffOf)。所说明的框80将先前的新根设置到当前的新根,并且在说 明的框82处将当前的新根设置到邻域最小值。如在图6的邻域最小值场景84中示出的, 可以将每一行与其自身的备份(例如,右移位、没有移位、左移位)进行比较以发现邻域中 的最小标记值。
[0030] 可以在框86处做出关于该根是否已经聚集(例如,新根停止改变)的确定。如果 为否,则可以在框82处重复该邻域最小值搜索。否则,所说明的框88向具有在框78处被 分配的高标记值的剩余像素分配有效标记,其中在框90处可以在先前的新根与当前的新 根之间形成联合。
[0031] 下面所注释的代码片段示出了实现通用扫描过程的一个方案。
[0032]
[0033] 此外,为了避免最小标记经过背景像素(例如,使用最大标记值)的不正确传播, 在每一次最小值计算之后可以重置背景像素。下面所注释的代码片段示出了重置背景像素 的一种方案。
[0034] calcmin_single(matrix < 2,16 > labels, offset_labels, fg_mask)
[0035] {
[0036] labels = pointwise_min(labels, offset_labels);
[0037] //将bg像素保持到最大值以避免最小传播
[0038] //在bg像素之上
[0039] labels, merge (labels, Oxffffffff, fg_mask);
[0040] }
[0041] 单级合并
[0042] 现在返回图3,可以在框46处基于SMD扫描生成与多个线程相对应的多个连接 表。因此,连接表可以包含针对图像中的每一个像素的标记,其中可以认为被链接到层次结 构中的相同根标记的像素代表图像中的相同组件。而且,所
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1