算子 Blob_Analysis_2D

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。请确保在初步二值化过程中符合此要求。

Output Ports

每个输出端口代表一个对象特征 / 对象属性。这些端口上的每个输出值代表一个对象。因此,每个对象属性都会产生一个数据流。输出数据流的长度等于图像中找到的对象数量。这些流可以中断为几个子帧。每个输出端口上的数据具有 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 错误标志说明


I/O Property

Property 值
Operator Type M
Input Link I,数据输入
Output Links BoundingX0O,数据输出
BoundingX1O,数据输出
BoundingY0O,数据输出
BoundingY1O,数据输出
AreaO,数据输出
CenterXO,数据输出
CenterYO,数据输出
ContourOrthoO,数据输出
ContourDiaO,数据输出
ErrorFlagsO,数据输出

Supported Link Format

Link Parameter Input Link I 输出 Link BoundingX0O 输出 Link BoundingX1O 输出 Link BoundingY0O 输出 Link BoundingY1O 输出 Link AreaO 输出 Link CenterXO 输出 Link CenterYO 输出 Link ContourOrthoO 输出 Link ContourDiaO 输出 Link ErrorFlagsO
Bit Width 1 auto1 auto2 auto3 auto4 auto5 auto6 auto7 auto8 auto9 8
Arithmetic unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned
Parallelism {1, 2, 4, 8, 16, 32} 1 1 1 1 1 1 1 1 1 1
Kernel Columns 1 1 1 1 1 1 1 1 1 1 1
Kernel Rows 1 1 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 VALT_IMAGE2D VALT_IMAGE2D
Color Format VAF_GRAY VAF_GRAY 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 FL_NONE FL_NONE
Max. Img Width any auto10 auto11 auto12 auto13 auto14 auto15 auto16 auto17 auto18 auto19
Max. Img Height any 1 1 1 1 1 1 1 1 1 1

1 2 12 4 5 6 7 8 9

输出 Bit Width 取决于对象特征的参数设置。如果某个特征被禁用,则输出被设置为始终为零值的单个位。

10 11 12 13 14 15 16 17 18 19

最大输出图像宽度取决于参数 output_frame_size 的设置。

参数

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 算子的使用方法: