Operator Library: Blob
Blob_Analysis_2D 算子用于检测二值图像中的对象并确定其属性。该算子的输出是多个数据流,代表每个对象的属性。
![]() |
Blob_Analysis_2D 是一个传统算子 |
|---|---|
|
Blob_Analysis_2D 算子是一个传统算子,仅出于向后兼容的原因予以保留。在新设计中,请改用 BlobDetector2D。 |
该算子的功能可以在 VisualApplets 中完全模拟。但是请注意,输出值的顺序可能与硬件实现不一致。
请确保先阅读有关 blob 分析算子的一般介绍(参见 Library Blob 一节)。
VisualApplets 的 blob 分析算子属于少数处理速度(即带宽)取决于图像内容的算子。如果图像中有许多对象,则会创建大的对象列表。这可能会导致算子输入变慢。但是,这仅适用于包含极强噪声的图像。在受控条件下,该算子应该具有足够的速度。
该算子以最低延迟运行。输入图像会逐行传输到 blob 分析中。一旦对象完全传输到算子中,算子就会检测到对象完成并输出对象特征。因此,可以在算子仍在处理图像本身的同时开始对对象特征进行后处理。
请注意,DMA 和某些其他算子会等待帧结束信号(Frame End)然后再报告完成。一旦输入图像定稿,就会生成帧结束信号。
blob 分析的 ImageI 输入由一个二值的二维图像表示,即具有 1 Bit 的 Bit Width、指定的图像宽度和指定图像高度的图像。您可以选择最高 32 像素的 Parallelism。
该算子假设前景值为 ONE,背景值为 ZERO。请确保在初步二值化过程中符合此要求。
每个输出端口代表一个对象特征 / 对象属性。这些端口上的每个输出值代表一个对象。因此,每个对象属性都会产生一个数据流。输出数据流的长度等于图像中找到的对象数量。这些流可以中断为几个子帧。每个输出端口上的数据具有 1 像素的高度和特定的长度。输出以灰度 2D 图像的形式表示。
输出端口使用算子参数和输入的 Property 进行配置。无法直接更改 link Property。
ErrorFlagsO 端口输出多个溢出错误标志。每个 bit 都保留用于一个特殊的标志。详细说明可以在下方的参数描述中找到。下表进行了总结:
| Bit # | 描述 | 对象相关 | 提示 |
|---|---|---|---|
| 0, 1 | 标签溢出 | 没有 |
Blob Analysis 检测到的对象太多,无法全部存储在 Memory 中。要增加两行图像内的最大对象数,可以更改算子参数“LabelBits”。 该标志在检测到时一直置位,直到数据输出帧结束。到目前为止输出的所有对象属性都是有效的。 对于 Blob Analysis 1D 算子,该标志仅在下一个有效数据输出时处于高电平状态一个时钟周期。 置位该标志后,blob 分析的输出可能会导致错误的对象属性。如果可用足够的对象标签,算子将恢复正常功能。 |
| 2 | 输出被截断 | 是 |
图像中的对象数量超过了在算子参数对话框中设置的最大输出宽度。该标志与适合输出宽度的最后一个对象一起置位。 |
| 3 | 对象大小超过最大值 | 是 |
如果 1D Blob Analysis 的对象超过其最大高度,则会置位该标志。算子会将该超限对象切割为较小的对象。连续的对象会带有该标志,以便检测切割情况。 对于 2D Blob Analysis,该标志位被设置为常数零。 |
| 4 | 面积被截断 | 是 |
对象的面积与错误标志超出了面积位所允许的范围。 |
| 5 | 重心 X 被截断 | 是 |
X 方向的重心超出了位数所允许的范围。 |
| 6 | 重心 Y 被截断 | 是 |
Y 方向的重心超出了位数所允许的范围。 |
| 7 | 轮廓长度溢出 | 是 |
轮廓长度超出了为该算子配置的位数所允许的范围。 |
表 39. Blob 错误标志说明
| Property | 值 |
|---|---|
| Operator Type | M |
| Input Link | I,数据输入 |
| Output Links | BoundingX0O,数据输出 BoundingX1O,数据输出 BoundingY0O,数据输出 BoundingY1O,数据输出 AreaO,数据输出 CenterXO,数据输出 CenterYO,数据输出 ContourOrthoO,数据输出 ContourDiaO,数据输出 ErrorFlagsO,数据输出 |
| label_bits | |
|---|---|
| 键入 | static 参数 |
| 默认 | 7 |
| 范围 | [5, 31] |
|
此参数用于设置内部标记对象时所使用的位数。它还会影响由 2^label_bits 决定的两行图像中可能共存的最大对象数。请注意,Blob 分析所需的 Memory 资源几乎每增加一位就会翻倍。该参数的一个良好取值范围在 7 到 9 位之间,这对于几乎所有应用来说都应该足够了。 如果检测到此地址空间的溢出,运算符将在端口 "ErrorFlagsO" 的位 0 和位 1 上输出错误标志。这些标志在检测到溢出时置位,并在输出帧结束时清零。 |
|
| neighborhood | |
|---|---|
| 键入 | static 参数 |
| 默认 | eight_connected |
| 范围 | {four_connected, eight_connected} |
|
选择 Object Detection 所需的邻域。有关像素邻域的详细说明,请参阅 'Definition'。 |
|
| output_frame_size | |
|---|---|
| 键入 | static 参数 |
| 默认 | specify_max_no_of_objects |
| 范围 | {maximum_required, specify_max_no_of_objects} |
|
理论上可能充满图像的最大对象数量为:输入图像宽度 * 输入图像高度 / 2(相当于采用 4 邻域的棋盘格图案)。这种图案不太可能出现。因此,您可以通过此参数配置图像中的最大对象数量。 |
|
| max_output_frame_size | |
|---|---|
| 键入 | static 参数 |
| 默认 | 65536 |
| 范围 | [1, 67108864] |
|
选择输出时的最大对象数量。Blob 分析检测到的更多对象将被丢弃。但是,在端口 "ErrorFlagsO" 上,将置位位 2 处的错误标志。该标志与最后一个有效的对象同时置位。如果 "ouput_frame_size" 设置为 "maximum_required",则此参数将被禁用。 |
|
| bounding_box_x0 | |
|---|---|
| 键入 | static 参数 |
| 默认 | used |
| 范围 | {used, not_used} |
|
边界框表示包围对象的最小轴平行矩形。每个坐标值均相对于图像的左上角。Bounding box X0 表示每个对象的最低 x 坐标。它在 "BoundingX0O" 处输出。Bit Width 由输入图像决定。如果未使用边界框,则 Bit Width 设置为一位,其输出为常数零。 |
|
| bounding_box_x1 | |
|---|---|
| 键入 | static 参数 |
| 默认 | used |
| 范围 | {used, not_used} |
|
边界框表示包围对象的最小轴平行矩形。每个坐标值均相对于图像的左上角。Bounding box X1 表示每个对象的最高 x 坐标。它在 "BoundingX1O" 处输出。Bit Width 由输入图像决定。如果未使用边界框,则 Bit Width 设置为一位,其输出为常数零。 |
|
| bounding_box_y0 | |
|---|---|
| 键入 | static 参数 |
| 默认 | used |
| 范围 | {used, not_used} |
|
边界框表示包围对象的最小轴平行矩形。每个坐标值均相对于图像的左上角。Bounding box Y0 表示每个对象的最低 y 坐标。它在 "BoundingY0O" 处输出。Bit Width 由输入图像决定。如果未使用边界框,则 Bit Width 设置为一位,其输出为常数零。 |
|
| bounding_box_y1 | |
|---|---|
| 键入 | static 参数 |
| 默认 | used |
| 范围 | {used, not_used} |
|
边界框表示包围对象的最小轴平行矩形。每个坐标值均相对于图像的左上角。Bounding box Y1 表示每个对象的最高 y 坐标。它在 "BoundingY1O" 处输出。Bit Width 由输入图像决定。如果未使用边界框,则 Bit Width 设置为一位,其输出为常数零。 |
|
| area_mode | |
|---|---|
| 键入 | static 参数 |
| 默认 | use_area_with_maximum_required_bits |
| 范围 | {area_not_used, use_area_with_maximum_required_bits, use_area_with_specified_bits} |
|
对象的面积定义为所有对象前景像素的总和。此参数用于选择所需的面积模式。如果选择了 "use_area_with_maximum_required_bits",运算符将自动确定对象最大可能尺寸所需的 Bit Width。对象最大可能尺寸取决于输入链路 I 上的最大宽度和高度。如果图像的所有像素都由前景值组成(即由一个大对象组成的白色输入图像),则可达到对象的理论最大值。 如果用户可以确保对象不会超过指定的面积大小,则可以对此进行参数化设置。如果已知最大对象大小,请选择“use_area_with_specified_bits”。使用参数“area_bits”指定位数。如果完全不需要面积,请选择“area_not_used”。在“area_not_used”模式下,Bit Width 设置为 1,且输出端始终为常量零。 |
|
| area_bits | |
|---|---|
| 键入 | static 参数 |
| 默认 | not_used |
| 范围 | {not_used, used} |
|
仅当参数“area_mode”设置为“use_area_with_specified_bits”时,此参数才处于启用状态。如果对象的面积大于所选位数允许的范围,斑点分析将在输出链路“ErrorFlagsO”的第 4 位输出溢出标志。 |
|
| center_of_gravity_x_mode | |
|---|---|
| 键入 | static 参数 |
| 默认 | use_cX_with_maximum_required_bits |
| 范围 | {cX_not_used, use_cX_with_maximum_required_bits, use_cX_with_specified_bits} |
|
有关重心的说明,请参阅 'Center of Gravity'。 请注意,为了获得正确的结果,在斑点分析之后,必须将输出除以面积。 如果该参数设置为“use_cX_width_maximum_required_bits”,算子将自动确定输出 Bit Width。如果使用较大的输入图像,所需的 Bit Width 可能会非常高。 如果参数值使用“use_cX_with_specified_bits”,则 Bit Width 是可调节的。 如果不需要 x 方向的重心,可以通过选择“cX_not_used”将其关闭。 |
|
| center_of_gravity_x_bits | |
|---|---|
| 键入 | static 参数 |
| 默认 | 29 |
| 范围 | [2, auto] |
|
如果“center_of_gravity_x_mode”设置为“use_cX_with_specified_bits”,则可以在此处更改 Bit Width。否则,该参数将被禁用。 |
|
| center_of_gravity_x_overflow_flag | |
|---|---|
| 键入 | static 参数 |
| 默认 | not_used |
| 范围 | {not_used, used} |
|
如果手动设置 x 方向重心的 Bit Width,则此参数将被激活并可设置为“used”。如果检测到溢出,算子随后将在输出链路“ErrorFlagsO”的第 5 位输出 1。 |
|
| center_of_gravity_y_mode | |
|---|---|
| 键入 | static 参数 |
| 默认 | use_cY_with_maximum_required_bits |
| 范围 | {cY_not_used, use_cY_with_maximum_required_bits, use_cY_with_specified_bits} |
|
有关重心的说明,请参阅 'Center of Gravity'。 请注意,为了获得正确的结果,在斑点分析之后,必须将输出除以面积。 如果该参数设置为“use_cY_width_maximum_required_bits”,算子将自动确定输出 Bit Width。如果使用较大的输入图像,所需的 Bit Width 可能会非常高。 如果参数值使用“use_cY_with_specified_bits”,则 Bit Width 是可调节的。 如果不需要 y 方向的重心,可以通过选择“cY_not_used”将其关闭。 |
|
| center_of_gravity_y_bits | |
|---|---|
| 键入 | static 参数 |
| 默认 | 29 |
| 范围 | [2, auto] |
|
如果在 "center_of_gravity_y_mode" 中设置了 "use_cY_with_specified_bits",则可以在此处更改 bit 数。否则,该参数将被禁用。 |
|
| center_of_gravity_y_overflow_flag | |
|---|---|
| 键入 | static 参数 |
| 默认 | not_used |
| 范围 | {not_used, used} |
|
如果手动设置 y 方向重心的 bit 数,此参数将被激活并可设置为 "used"。如果检测到溢出,算子随后将在输出连接 "ErrorFlagsO" 的第 6 个 bit 上输出数字 1。 |
|
| contour_length_mode | |
|---|---|
| 键入 | static 参数 |
| 默认 | contour_length_not_used |
| 范围 | {contour_length_not_used, contour_length_used} |
|
对象的轮廓长度包括所有边缘,甚至包括孔洞处的边缘。详细解释请参见 'Contour Length'。 如果选中此功能,则可以根据所选的邻域,通过参数 "contour_length_bits_orthogonal_connected" 和 "contour_length_bits_diagonal_connected" 来选择所需的 bit 数。如果选择了 4 邻域,则只能在正交方向上测定轮廓长度。如果选择了 8 邻域,则会在正交和对角方向上测定轮廓长度。 |
|
| contour_length_bits_orthogonal_connected | |
|---|---|
| 键入 | static 参数 |
| 默认 | 16 |
| 范围 | [1, 31] |
|
如果将 "contour_length_mode" 设置为 "contour_length_used",则可以在此处选择表示正交连接像素的轮廓长度所需的 bit 数。 |
|
| contour_length_bits_diagonal_connected | |
|---|---|
| 键入 | static 参数 |
| 默认 | 16 |
| 范围 | [1, 31] |
|
如果将 "contour_length_mode" 设置为 "contour_length_used",则可以在此处选择表示对角连接像素的轮廓长度所需的 bit 数。这仅在选择了 8 邻域时才可行。否则,该参数将被禁用。 |
|
| contour_length_overflow_flag | |
|---|---|
| 键入 | static 参数 |
| 默认 | not_used |
| 范围 | {not_used, used} |
|
轮廓长度可能会导致溢出。如果使用了该标志,一旦发生溢出,就会在端口 "ErrorFlagsO" 的第 7 个 bit 上设置一个错误标志。 |
|
以下示例展示了 Blob_Analysis_2D 算子的使用方法:
-
示例 - 展示了运算符 Blob_Analysis_2D 的用法。 该小程序对输入数据进行二值化并确定斑点分析结果。 结果和原始图像均通过两个 DMA 通道输出。
-
示例 - 将斑点分析运算符应用于输入的相机图像。 该小程序展示了斑点数据在小程序中的用法。 在这种情况下,将定位面积最大的对象,并使用其坐标从原始图像中裁剪出该对象。
-
“imaFlex CXP-12 平台上的 FrameBufferMultRoiDyn 算子功能示例”
示例 - 演示如何使用该算子
-
“印刷检测示例 - 使用基于 Blob 的 Template Matching 进行位置校正和缺陷检测”
示例 - 几何变换与缺陷检测
-
Examples- Geometric Transformation and Defect Detection Using Image Moments

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



















上一页

