主要内容

Blob分析

这个例子展示了如何实现一个单程的8路连接——组件标记算法和执行团的分析。

Blob分析是计算机视觉检测和分析框架连接的像素称为斑点。这个算法可以挑战来实现一个流设计,因为它通常涉及两个或两个以上通过形象。第一遍执行初始标签,和额外的通过连接任何斑点未能正确标示在第一次通过。流设计使用单次的算法和合并标签适用于硬件和blob数据存储在RAM中。这个例子中有一个输出阶段软件读取内存的结果并覆盖到输入视频。这个例子标签blob和分配每个团一个惟一的标识符。每个团都是用不同的颜色画在输出图像。边界框,例子还计算质心和面积1024团的标签。模型可以支持多达1080 p金宝app@60视频。

概述

模型支持硬件软件合作设计的例子。金宝appBlobDetector子系统的硬件部分的设计,并支持HDL代码生成。金宝app在一个通过,这个子系统标签中的每个像素的像素流,合并连接区域,计算质心、区域,每个团的边界框。子系统的输出流标记像素。子系统blob数据存储在RAM中。blob分析完成时,子系统断言data_ready输出端口,以表明blob数据就可以阅读。

逻辑子系统读取外部数据的一次BlobDetector RAM使用blobIndex输入端口为一个地址。这个外部逻辑代表了软件部分的设计,,不支持HDL代码生成。金宝app这部分的设计读取重心,区域,和每个团的边界框,编译成向量叠加使用的子系统,并显示blob数据。

BlobDetector子系统提供了这些配置端口,可以映射到AXI实时软件控制寄存器。

  • GradThresh:阈值用于创建强度图像。

  • AreaThresh:定义一个blob的像素数量。默认设置为1意味着所有处理blob。

  • CloseOp:是否形态学关闭标签之前执行和分析。关闭后可能有用的阈值来填补任何介绍洞。默认情况下,这个信号是高,使关闭。如果你禁用关闭,深色的硬币检测到两个团,而不是单个连接组件。

  • VideoMode:像素流返回的子系统。您可以选择输入视频(0),标记像素(1),或强度阈值(2)后视频。你可以使用这些不同的视频视图进行调试。

BlobDetector子系统返回与相关的控制信号,输出视频和边界框区域,为每个请求和重心blobIndex。该子系统还帮助调试这些输出信号。

  • index_o:团目前的指数回归统计数据。

  • num_o:的气泡数量满足区域阈值。

  • totalNum_o:blob总数检测到当前帧。通过比较num_ototalNum_o,您可以调整输入区域阈值。

  • data_ready_o:显示当前帧的blob数据可以从内存读取。在硬件软件合作设计实现中,您可以将这个信号映射到一个AXI登记,和软件可以调查寄存器的值来决定何时开始读取数据。

Blob探测器

BlobDetector子系统执行一次通过连接组件标签和分析框架。在顶层,子系统包含CCA_Algorithm子系统和缓存的结果。CCA_Algorithm子系统执行标签,blob数据的计算和blob合并。

标记算法

labelandmerge MATLAB功能块执行8路像素标签相对于当前的像素。前可能的标签:标签,标签,左上的标签,右上的标签。函数分配当前像素现有标签优先顺序。如果不存在任何标签,像素是一个前景像素,然后函数分配一个新的标签标签就会递增计数器的当前像素。所示的函数形式一个标签窗口流在当前像素的图,存储在注册之前的标签,和存储在RAM的前一行像素标签。标签被labelandmerge冲出了阻止了。合并操作的详细信息,请参阅合并逻辑部分。

Blob数据计算

cca子系统计算,边界地区,每个团的重心。该操作使用一组蓄电池和公羊。

area_accum子系统增量blob的面积由每个检测到标签通过递增一个内存地址对应的标签。

x_accum和y_accum子系统积累xposypos值从输入端口。的xposypos值的坐标输入帧的像素。使用面积值,累计坐标,计算质心xaccum /区域yaccum /区域。这个计算使用一个单精度互惠1 /区域然后互惠的繁殖xaccumyaccum找到质心坐标。使用本机浮点互惠使精度高和维护高动态范围。生成HDL代码时,编码器实现互惠使用定点逻辑,而不需要浮点FPGA资源。有关更多信息,请参见开始使用HDL编码器原生浮点支持金宝app(高密度脂蛋白编码器)

bbox_store子系统计算边界框。子系统计算左上角的坐标、宽度和高度的通过比较每个标签的坐标与先前缓存的坐标。

合并逻辑

在标签的步骤,检查每个像素使用只有当前行和前一行的标签值。如此集中,意味着标签可能需要进一步修正后的部分blob标识。标签校正可以是一个挑战对于框架和pixel-streaming实现。当初始标签的图显示两个例子需要修正。

左边的图显示当前像素连接两个区域通过前面的标签和右上的标签。右边的图显示当前像素连接两个区域通过前面的标签和标签。当前像素是第一个位置的算法检测到需要合并。当算法检测到一个合并,像素标记为修正。在这两种图,像素都是同一个团的一部分,所以每个像素必须分配相同的标签,1

labelandmerge MATLAB函数块检查合并并返回uint32价值包含两个合并的标签。MergeQueue子系统存储当前行上的任何合并发生。的每一行,cca子系统读取MergeQueue价值观和纠正,重心,蓄电池和边界框的值。合并这两个标签的累积值被添加在一起,分配给一个单独的标签。每个蓄电池子系统有一个2:1的输入多路复用器,使得蓄电池是增加新标签时,或者当一个合并发生。

输出显示

每一帧结束时,模型更新两个视频显示。结果图像视频显示器显示了输入图像的边界框(绿色矩形)和质心(红色十字架)覆盖。标签图像视频显示显示标签的结果合并前阶段。标签图像显示,每个硬币都有不同的标签比其余的硬币。合并阶段纠正这种行为通过合并两个标签。每个团的边界框返回显示每个硬币检测作为一个单独的标签。

实现结果

检查并生成HDL代码中引用这个例子中,您必须HDL编码器™产品。生成HDL代码,使用此命令。

makehdl (“BlobAnalysisHDL / BlobDetector”)

生成的代码是合成Xilinx ZC706 SoC的目标。设计遇到一个200 MHz时间约束。设计使用很少的硬件资源,如表所示。

T = 5 x2表资源使用________ _______ DSP48 7(0.78%) 4827(1.1%)附近地区注册3800 (1.74%)1507 (2.67%)BRAM 25.5 (4.68%)

相关的话题