算子 BlobDetector2D

Operator Library: Blob

BlobDetector2D 算子可检测二值图像中的对象并确定其属性。该算子的输出是表示每个对象属性的多个数据流。

该算子的功能可以在 VisualApplets 中进行完全模拟。

另请参阅 Library Blob 简介。

一般信息

BlobDetector2D 支持 BoundingBox、Area 以及 Center of Gravity X 和 Y 特性。

[注意] Center of Gravity X 和 Y 不是算子的直接输出

输出端口 CenterX 和 CenterY 实际上提供图像矩 M10 (CenterX) 和 M01 (CenterY)。要提取对象的重心,您 必须将这些矩除以提取的面积:

算子逐行处理传入的图像。由于算子 无法预测未来,后续连接的区域起初可能会显示为独立的区域。因此,本文中单行内连接的像素被称为 对象伪影。BlobDetector2D 算子会检查这些对象 伪影是否与后续行的其他对象伪影重叠。这是为了 确定这些对象是真正独立的,还是属于更大对象的一部分。 算子可处理的对象伪影的最大数量由 LabelCount 参数定义。如果对象伪影的数量超过 LabelCount 的值,将导致数据丢失,并且无法再保证对象结果的完整性。 这称为上下文损坏。 丢失数据的行会标记一个 Line Error 虚拟对象,该对象可通过 ErrorFlag 识别。损坏上下文中的所有后续对象都将被标记为此状态。 一旦通过帧结束或重新启动小程序自动重置上下文,上下文损坏即告结束。 所有错误标志均列在“输出端口”一节中。

在大多数情况下,防止上下文损坏所需的标签数量 等于单行中对象伪影的最大数量。对于 neighborhood = 4 和 neighborhood = 8,所需的精确标签数量 略有不同:

  • 对于 neighborhood = 4,防止上下文损坏所需的标签数量 等于行 N 位置 X 处的任意像素与行 N+1 位置 X 处的像素之间 的对象伪影的最大数量。

  • 对于 neighborhood = 8,防止上下文损坏所需的标签数量 等于行 N 位置 X 处的任意像素与行 N+1 位置 X+1 处的像素之间 的对象伪影的最大数量。

如果您不确定所选的标签数量是否足以满足您的 使用场景,请在模拟中进行检查。

在实例化 BlobDetector2D 模块时,您可以 定义要创建哪些输出端口。通过启用/禁用端口, 相应的特性也会自动启用/禁用。确认 这些端口后,您将无法再更改它们。如果您需要其他输出端口,则必须 实例化另一个 BlobDetector2D 模块。

性能

斑点检测器算子属于少数几个处理速度(即带宽) 取决于图像内容的算子。这些算子在凝聚行内前景像素和背景像素变化较小的图像上 表现最佳。因此,多行中的噪声或大量对象伪影 会显著降低数据吞吐量。不过,这仅适用于包含 极强噪声的图像。

延迟

该算子通过逐行处理输入图像来以最小延迟工作。 一旦对象的末端明确,算子就会立即将对象特征作为输出提供。 因此,对象的输出发生在对象结束的同一行中。 这使得在算子仍在处理图像本身的同时, 能够对已完成的对象特征进行后处理。

请注意,DMA 和某些其他算子会等待帧结束信号,然后 才报告完成。帧结束信号在输入图像的 最后一行处理完毕后生成。

资源消耗

算子的资源消耗取决于已启用的特性、 用于特性的位数以及所选的标签数量。因此, Basler 建议禁用不需要的特性,并在设置 LabelCount 参数时保持谨慎。

[注意] 部分禁用边界框端口不会节省资源

边界框具有多个输出端口,因此只有在 所有端口均被禁用时,该特性才会禁用。 部分禁用边界框端口不会节省资源。

[注意] 手动设置最大值可节省资源

为了节省资源并改善设计的处理,如果您知道 要检测的对象的最大值,Basler 建议 手动为链接设置 Bit Width。

输入端口

斑点检测器的 ImageI 输入期望接收 二值(像素 bit width 为 1)、2D 图像。该算子支持输入 图像内长度不同的行,以及空行和空帧。

该算子假定前景值为 ONE,背景值为 ZERO。请确保在 预二值化过程中满足此要求。

Output Ports

输出以 VALT_IMAGE2D 图像格式的形式表示。每个 输出端口代表一个对象特征/对象属性。它们是同步的, 并且它们共同描述一个单一对象。每个输出像素提供已完成对象 或状态错误对象的值。此输出是提取的对象还是错误状态对象由 ErrorFlagsO 输出端口指示。表示 对象的像素出现在对象完成的同一行中。它们 按完成的顺序输出。例如,两个对象在第 10 行结束。 对象 A 的最后一个像素具有 X 坐标 42,对象 B 的最后一个像素具有 X 坐标 97。因此,对象 A 是算子输出端口处的第一个像素,对象 B 是 第二个像素。未完成任何对象且未发生错误的行 为空。

输出端口的宽度会根据给定的输入格式自动调整, 以防止特征数据溢出。或者,您也可以手动 配置输出端口的宽度。如果您已在算子 属性中启用了 Area/ CenterX/ CenterY,则可以对其链接 bit width 进行手动配置。

ErrorFlagsO 端口输出用于 溢出或附加信息标签的多个错误标志。每个位都保留用于特定的标志。 您可以在硬件的运行时环境中或在 模拟中查看这些错误标志。要在模拟中查看这些错误标志:

  • 将仿真探针添加到 BlobDetector2D 的 ErrorFlagsO 端口。

  • 向仿真中添加会导致溢出的图像。

  • 运行仿真。

  • 打开输出端口的 Simulation Probe View。

  • 滚动到要检查的像素,放大以查看像素值并将像素值设置为 十六进制:
    仿真探针查看器中的 Error Flag

    图 403:仿真探针查看器中的 Error Flag


  • 十六进制值中的活动位表示有关斑点(Blob)对象的不同错误或状态信息。有关详细信息,请参阅下表。

您可以在下方的参数说明中找到错误标志的详细说明。下表总结了这些说明:

Bit # 描述 提示
0 面积溢出

在处理历史记录的某些点,对象的 Area 值超出了提供的输出 Bit Width。

1 CenterX 溢出

在处理历史记录的某些点,对象的 CenterX 值(图像矩 M10)超出了提供的输出 Bit Width。

2 CenterY 溢出

在处理历史记录的某些点,对象的 CenterY 值(图像矩 M01)超出了提供的输出 Bit Width。

3, 4 保留

保留以供将来扩展。

5 线错误

指示虚拟对象,它标记了一行,在该行中发生的对象伪影数量超过了所选标签数量所能处理的范围。可用内存不足,无法处理更多传入数据。

由于这是一个虚拟对象,其他端口处的特征数据值不包含任何有用的数据。虽然特征值在仿真中显示为 0,但在硬件中它们可以是任何值。由于较低的 ErrorBits 7-0 绑定到已启用的特征及其值,因此这些标志在硬件中也可能与仿真有所不同。

如果此错误标志存在,它始终是一行的第一个对象输出。

6 上下文损坏

发生的对象伪影数量超过了所选标签数量所能处理的范围。可用内存不足,无法处理所有传入数据。无法保证被标记对象的完整性。

操作员在帧结束时或通过重新启动采集恢复正常功能。处理后续图像时不会受到先前上下文损坏的任何影响。

表 37:Blob 错误标志说明


I/O Property

Property 值
Operator Type M
Input Link ImageI,数据输入
Output Links BoundingX0O,数据输出
BoundingX1O,数据输出
BoundingY1O,数据输出
BoundingHeightO,数据输出
AreaO,数据输出
CenterXO,数据输出
CenterYO,数据输出
ErrorFlagsO,数据输出

Supported Link Format

Link Parameter 输入链接 ImageI 输出 Link BoundingX0O 输出 Link BoundingX1O 输出 Link BoundingY1O 输出链接 BoundingHeightO 输出 Link AreaO 输出 Link CenterXO 输出 Link CenterYO 输出 Link ErrorFlagsO
Bit Width 1 auto1 auto1 auto2 auto3 [1, 48] / auto4 [1, 48] / auto4 [1, 48] / auto4 7
Arithmetic unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
Parallelism 64 1 1 1 1 1 1 1 1
Kernel Columns 1 1 1 1 1 1 1 1 1
Kernel Rows 1 1 1 1 1 1 1 1 1
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D
Color Format VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY
Color Flavor FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE FL_NONE
Max. Img Width 2^16 auto5 auto5 auto5 auto5 auto5 auto5 auto5 auto5
Max. Img Height 2^24 as I as I as I as I as I as I as I as I

1

Bit Width 基于 ImageI 链接传入的最大图像宽度。其计算方式为 ceil(log2(Max. Img Width)).

2

Bit Width 基于 ImageI 链接传入的最大图像高度。其计算方式为 ceil(log2(Max. Img Height)).

3

Bit Width 基于 ImageI 链接传入的最大图像高度。其计算方式为 ceil(log2(Max. Img Height + 1)).

4

通过参数 AreaBitWidthMode、CenterXBitWidthMode 和 CenterYBitWidthMode,您可以选择手动配置链接还是使用自动模式。如果手动编辑链接,允许的范围为 [1, 48]。

5

最大图像宽度等于参数 LabelCount + 1。

参数

LabelCount
键入 static 参数
默认 100
范围 [1, (max. Img Width(Input Link I) / 2 + 2]

为了在内部跟踪部分对象,该参数用于设置可用标签的数量。它还会影响一行中可输出的最大对象数量。请注意,BlobDetector2D 算子所需的资源取决于标签的数量。该参数的良好取值范围在 100 到 500 之间,这对于大多数应用来说应该已经足够了。

如果出现比所选标签更多的部分对象,则会丢失数据,并且帧的上下文将损坏。在这种情况下,输出链接 ErrorFlagsO 的第 6 位将为“1”,以指示提供的数据不再可靠。该错误位在检测到数据丢失时置位,并在输出帧结束时清零。

Neighborhood
键入 static 参数
默认 EightConnected
范围 {FourConnected, EightConnected}

此参数选择对象检测所需的邻域。有关像素邻域的详细解释,请参见 'Definition'。

AreaBitWidthMode
键入 static 参数
默认 AutomaticFrameMaximum
范围 {AutomaticFrameMaximum, LinkManuallyEditable}

对象的面积由所有对象前景像素的总和定义。

如果选择了 AutomaticContextMaximum,算子将自动设置对象最大尺寸的位数。对象可能的最大尺寸取决于输入链接 I 处的最大宽度和高度。当图像的所有像素都由前景值组成时(即一个作为大对象的白色输入图像),将达到对象的理论最大面积。

如果已知最大可能的 CenterX(图像矩 M10)值,或者只对具有特定 X 坐标的对象感兴趣,Basler 建议使用 LinkManuallyEditable 模式。这样可以节省资源并缩短整个设计的构建时间。在 LinkManuallyEditable 模式下,您可以在 [1, 48] 的允许范围内编辑链接的 Bit Width Property。链接的 Bit Width 直接转化为内部用于计算 Area 特征的 Bit Width,从而影响整体资源消耗。

如果 Bit Width 对于对象的 Area 值而言不够,则会由 ErrorFlagO 链接(位 0)指示。

CenterXBitWidthMode
键入 static 参数
默认 AutomaticFrameMaximum
范围 {AutomaticFrameMaximum, LinkManuallyEditable}

有关重心特征的解释,请参见 'Center of Gravity'。

请注意,输出为图像矩 M10。要获取重心 X 的像素坐标,请使用 DIV 运算符,或在主机 PC 上将该值除以面积。

如果设置 AutomaticContextMaximum,运算符将自动设置输出位。对象可能的最大大小取决于输入链接 I 处最大宽度和高度。如果图像的所有像素都由前景值组成(即一个作为大对象的白色输入图像),则可达到对象的理论最大 CenterX 值。如果使用大型输入图像,CenterXO 链接的 Bit Width 可能会变得非常高。

如果最大可能的 CenterX(图像矩 M10)值已知,或者仅对特定 X 坐标的对象感兴趣,Basler 建议使用 LinkManuallyEditable 模式。这可以节省资源并缩短整个设计的生成时间。在 LinkManuallyEditable 模式下,您可以在允许的范围 [1, 48] 内编辑链接的 Bit Width Property。链接的 Bit Width 直接转化为内部用于计算 CenterX 特征所使用的 Bit Width,因此会影响整体资源消耗。

如果 Bit Width 对于对象的 CenterX 值而言不够,则会由 ErrorFlagO 链接(位 1)指示。

CenterYBitWidthMode
键入 static 参数
默认 AutomaticFrameMaximum
范围 {AutomaticFrameMaximum, LinkManuallyEditable}

有关重心的解释,请参见 'Center of Gravity'。

请注意,输出为图像矩 M01。要获取重心 Y 的像素坐标,请使用 DIV 运算符,或在主机 PC 上将该值除以面积。

如果设置 AutomaticContextMaximum,运算符将自动设置输出位。对象可能的最大大小取决于输入链接 I 处最大宽度和高度。如果图像的所有像素都由前景值组成(即一个作为大对象的白色输入图像),则可达到对象的理论最大 CenterY 值。如果使用大型输入图像,CenterYO 链接的 Bit Width 可能会变得非常高。

如果最大可能的 CenterY(图像矩 M10)值已知,或者仅对特定 Y 坐标的对象感兴趣,Basler 建议使用 LinkManuallyEditable 模式。这可以节省资源并缩短整个设计的生成时间。在 LinkManuallyEditable 模式下,您可以在允许的范围 [1, 48] 内编辑链接的 Bit Width Property。链接的 Bit Width 直接转化为内部用于计算 Area 特征所使用的 Bit Width,因此会影响整体资源消耗。

如果 Bit Width 对于对象的 CenterY 值而言不够,则会由 ErrorFlagO 链接(位 2)指示。

使用示例

以下示例展示了 BlobDetector2D 运算符的使用:

  • 'BlobDetector2D'

    示例 - 展示了 BlobDetector2D 运算符在面阵扫描应用中的用法。