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。请确保在 预二值化过程中满足此要求。
输出以 VALT_IMAGE2D 图像格式的形式表示。每个 输出端口代表一个对象特征/对象属性。它们是同步的, 并且它们共同描述一个单一对象。每个输出像素提供已完成对象 或状态错误对象的值。此输出是提取的对象还是错误状态对象由 ErrorFlagsO 输出端口指示。表示 对象的像素出现在对象完成的同一行中。它们 按完成的顺序输出。例如,两个对象在第 10 行结束。 对象 A 的最后一个像素具有 X 坐标 42,对象 B 的最后一个像素具有 X 坐标 97。因此,对象 A 是算子输出端口处的第一个像素,对象 B 是 第二个像素。未完成任何对象且未发生错误的行 为空。
输出端口的宽度会根据给定的输入格式自动调整, 以防止特征数据溢出。或者,您也可以手动 配置输出端口的宽度。如果您已在算子 属性中启用了 Area/ CenterX/ CenterY,则可以对其链接 bit width 进行手动配置。
ErrorFlagsO 端口输出用于 溢出或附加信息标签的多个错误标志。每个位都保留用于特定的标志。 您可以在硬件的运行时环境中或在 模拟中查看这些错误标志。要在模拟中查看这些错误标志:
-
将仿真探针添加到 BlobDetector2D 的 ErrorFlagsO 端口。
-
向仿真中添加会导致溢出的图像。
-
运行仿真。
-
打开输出端口的 。
-
滚动到要检查的像素,放大以查看像素值并将像素值设置为 :
-
十六进制值中的活动位表示有关斑点(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 错误标志说明
| Property | 值 |
|---|---|
| Operator Type | M |
| Input Link | ImageI,数据输入 |
| Output Links | BoundingX0O,数据输出 BoundingX1O,数据输出 BoundingY1O,数据输出 BoundingHeightO,数据输出 AreaO,数据输出 CenterXO,数据输出 CenterYO,数据输出 ErrorFlagsO,数据输出 |
|
Bit Width 基于 ImageI 链接传入的最大图像宽度。其计算方式为 |
|
|
Bit Width 基于 ImageI 链接传入的最大图像高度。其计算方式为 |
|
|
Bit Width 基于 ImageI 链接传入的最大图像高度。其计算方式为 |
|
|
通过参数 AreaBitWidthMode、CenterXBitWidthMode 和 CenterYBitWidthMode,您可以选择手动配置链接还是使用自动模式。如果手动编辑链接,允许的范围为 [1, 48]。 |
|
|
最大图像宽度等于参数 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)指示。 |
|

![[注意]](../common/images/admon/note.png)






上一页

