# DetectBlobs

DetectBlobs 函数对感兴趣区域 (ROI) 执行一种称为“连通性分析”的斑点分析形式。在“连通性分析”期间，ROI 内的像素根据灰度阈值分为两类：斑点或背景，该阈值将低于阈值的所有像素分为黑色类别，将高于阈值的所有像素分为白色类别。

这样，含有相近阈值的像素会按照它们的“颜色”以及是否与相邻像素“连接”被归类在一组。相邻像素可与“背景”像素的任何一边、上边或下边相连；而对于“斑点”像素来说，相邻像素可与“斑点”像素的任何一边、上边、下边或对角像素相连。

一旦图像被处理，图像的像素会被分割成“斑点”像素值以及“背景”像素值。在 ROI 中找到的“斑点”会根据它们的物理特性以及被分配的值，例如：斑点在图像中的位置（行、列和坐标），它的面积、周长、扩展和延伸率等被识别。提取的斑点中的数据以斑点数据结构存储和报告。

此函数是斑点分析的第一步，FindBlobs 和 SortBlobs 最终都直接或通过审核使用对 DetectBlobs 函数的斑点数据结构的单元格引用。

## DetectBlobs 输入

参数 | 说明
图像 | 此参数必须引用包含图像数据结构的电子表格单元格；默认情况下，此参数引用 A0，即包含数据结构的单元格。该参数还可以引用其他图像数据结构，例如由图像 视觉数据访问函数或坐标变换函数返回的数据结构
固定 | 定义相对于固定输入或视觉工具函数的图像坐标系输出的感兴趣区域 (ROI)。根据“固定坐标”来设置的 ROI 可以确保如果“固定坐标” 被旋转或转换，相应的 ROI 也会根据“固定坐标”而旋转或转换。 默认设置为(0,0,0)，图像的最左上方。
X | 图像坐标中的 X 偏移。
Y | 图像坐标中的 Y 偏移。
Theta | 图像坐标系中图像 X 轴的旋转。（顺时针 +/-360 度）
区域 | 也称为感兴趣区域 (ROI)，指定要进行分析的图像区域。双击区域参数以创建可以变换和旋转的交互图形模式。选择此参数并按属性表的作业编辑工具栏上的最大化区域按钮，自动拉伸区域以覆盖整个图像。
X | 在固定坐标中，偏移原点的 x 值。
Y | 在固定坐标中，偏移原点的 y 值。
宽度 | 沿着区域的 x 轴的维度。
高度 | 沿着区域的 y 轴的维度。
角度 | 在固定坐标上的方向。
曲线 | 在区域 x 轴和相对的边界线之间的角度偏差。
注意： 固定和区域参数必须在图像的范围内定义；否则，该函数将返回 #ERR。
外部区域 | 此参数对环形、圆、区域、EditAnnulus、EditCircle、EditCompositeRegion、EditPolygon、EditRegion使用单元格引用。使用此参数时，该函数将忽略区域和固定设置并检查引用区域指定的图像区域。如果引用了编辑复合区域控件，则检查区域可以是多种形状的混合。在混合区域中的任何一个形状可以被指定从（遮蔽）检测区域中添加或删除。 注意： 如果此参数已设置为对外部区域的引用，要使用函数的内部区域，必须通过输入值 0 代替单元格引用手动将此参数设置为零。否则，该函数将继续引用外部区域。
要排序的数量 | 指定要排序的斑点数。
0 | 返回满足颜色斑点/颜色背景和面积限制中指定的颜色和大小设置的所有斑点：最小/区域限制：最大参数。
1 至 4096 (默认 = 1) | 返回满足颜色斑点/颜色背景和区域限制中指定的颜色和大小设置的最多指定数量的斑点：最小/区域限制：最大参数。如果找到超过指定数目的斑点，则会按照面积由大到小的规则选择返回斑点。
注意： 如果要排序的数量参数的值大于零，DetectBlobs 将自动插入一个结果表，其中最多包含 10 个条目，这些条目对应于斑点数据结构中的前 10 个斑点。如果需要显示所有项目，您可以通过复制最后行并在之后粘贴多余的行来扩充列表；递增任何新粘贴行的索引以确保斑点被正常索引。
阈值 | 指定被用来区分斑点和背景的灰度值。该值可以通过利用 DetectBlobs 函数的自动设置（默认设置）、通过反复试验手动配置或设置为直方图函数计算结果的单元格引用来确定。
-1 (默认) | 函数会自动衡量并根据图像的灰度值统计来计算阈值。
0 至 255 | 指定一个灰度阈值，0 至 255。
填充孔 | 指定处理含有孔的斑点统计方式。
0 = OFF（默认） | 启用在斑点统计中考虑孔的因素。例如，在斑点中加入孔会减小孔的面积。 注意： 当设置为 OFF 时，将报告作为另一个斑点中的孔的斑点。在下面的示例中，报告了斑点1，它是斑点 0 中的一个孔。在斑点统计信息中，斑点 0 区域（顶行）的值不包含斑点 1 区域（底行）。
1 = ON | 禁用在斑点统计中考虑孔的因素。例如，在斑点中加入孔并不会改变斑点的大小。 注意： 当设置为 ON 时，将忽略作为另一个斑点中的孔的斑点。在下面的示例中，忽略了斑点 0 中的孔，只报告了一个斑点（斑点 0）。在斑点统计信息中，斑点 0 区域的值包含整个斑点区域，包括孔。
边界斑点 | 指定管理与 ROI 边界相交的斑点的方式。
0 = OFF | 排除与 ROI 边界相交的斑点；任何与 ROI 边界相交的斑点都不会包含在最终的斑点数据结构中。
1 = ON （默认） | 包括与 ROI 边界相交的斑点；任何与 ROI 边界相交的斑点都将包含在最终的斑点数据结构中（前提是这些斑点还满足彩色斑点/彩色背景和区域限制的指定设置：最小/区域限制：最大参数）。
颜色：斑点 | 指定斑点的颜色。
0 = 黑色 | 仅返回小于指定灰度阈值的斑点。
1 = 白色 | 仅返回大于指定灰度阈值的斑点。
2 = 黑色或白色（默认） | 不指定斑点颜色。
注意： 当颜色：斑点和颜色：背景设置为相同颜色，不报告斑点。例如，当颜色：斑点设置为黑色和颜色：背景也设置为黑色 ，不报告斑点。
颜色：斑点 = 黑色 颜色：背景 = 黑色 | 颜色：斑点 = 或白色 颜色：背景 = 黑色
但是，即使颜色：斑点和颜色：背景设置为相同颜色，当它包含在相反颜色的区域中时将报告斑点（请参见下面的示例）。如果斑点的任何部分都不包含在相反的颜色中，则不会报告斑点。
颜色：斑点 = 黑色 颜色：背景 = 黑色 | 颜色：斑点 = 白色 颜色：背景 = 白色
颜色：背景 | 指定采集图像的背景颜色。前台进行 8 路连通性分析，后台进行 4 路连通性分析。
0 = 黑色
1 = 白色（默认）
区域限制：最小 | 为所有返回的斑点指定最小面积限制，以像素数为单位（默认 = 100）；只有面积大于面积限制的斑点：将返回最小值。 参数范围为： 下限：0 上限：连接的视觉系统的分辨率（宽度 * 高度）。 例如，当连接到 In-Sight D902 视觉系统时，参数范围为 0 到 2,304,000 (1920x1200)。
面积限制：最大 | 为所有返回的斑点指定最大区域限制，以像素数为单位（默认 = 100000）；仅限区域小于区域限制的斑点：返回最大数。 参数范围为： 下限：0 上限：连接的视觉系统的分辨率（宽度 * 高度）。 例如，当连接到 In-Sight D902 视觉系统时，参数范围为 0 到 2,304,000 (1920x1200)。
显示 | 指定图像上方的 DetectBlobs 图形叠加层的显示模式。
0 = 隐藏所有（默认） | 所有图形都将被隐藏，除非在电子表格中突出显示包含 DetectBlobs 函数的单元格。
1 = 仅结果图形 | 斑点轮廓在任何时候都会显示。
2 = 输入和结果图形 | 输入图像区域和提取的斑点轮廓在任何时候都会显示。

## DetectBlobs 输出

返回 | 包含从图像中提取的斑点的斑点数据结构，如果任何输入参数无效，则为 #ERR。
结果 | 最初将 DetectBlobs 插入单元格时，会使用以下斑点视觉数据访问函数在电子表格中创建结果表： 注意： 如果要排序的数量等于 0，该表格将仅由 GetNFound 函数组成。 如果要排序的数量参数的值大于零，DetectBlobs 将自动插入一个结果表，其中最多包含 10 个条目，这些条目对应于斑点数据结构中的前 10 个斑点。如果需要显示所有项目，您可以通过复制最后行并在之后粘贴多余的行来扩充列表；递增任何新粘贴行的索引以确保斑点被正常索引。
标签 | 函数名称 | 说明
X | GetX(斑点, 斑点索引) | 返回斑点的质量中心（质心）的 x 坐标。
Y | GetY(斑点, 斑点索引) | 返回斑点质量的中心（质心）的 y 坐标。
角度 | GetAngle(Blobs, Blob Index) | 返回斑点的主（长）轴相对于 Y 轴的角度。
颜色 | GetColor(斑点, 斑点索引) | 返回斑点的色彩值 (0 = 黑色, 1 = 白色) 。
分数 | GetScore(斑点, 斑点索引) | 衡量斑点与 FindBlobs 函数所指定标准的匹配程度。
面积 | GetArea(斑点, 斑点索引) | 返回斑点的面积（以像素为单位）。 注意： 如果斑点中有孔，则“面积”值将根据“填充孔”复选框是启用还是禁用而有所不同。
拉伸值 | GetElongation(斑点, 斑点索引) | 返回一个代表斑点像素从斑点中心（质点）拉伸程度的值。例如，圆的拉伸值为 0， 而钉子可能会含有较高的拉伸值。
孔 | GetHoles(斑点, 斑点索引) | 返回在斑点中含有的孔的数量。 注意： 仅限区域大于区域限制的孔：将返回最小值。
周长 | GetPerimeter(斑点, 斑点索引) | 返回斑点边界的长度；该周长将根据计算斑点边界外沿的像素而得出。
扩散 | GetSpread(斑点, 斑点索引) | 返回一个代表斑点相对于斑点质量中心（质心）像素分布的值。例如，圆形物体的扩散值会比一个椭圆形物体的值小。

## DetectBlob 示例

DetectBlobs 函数用于识别和定位联通像素的斑点，这些像素可以由各种形状和大小组成。此示例说明 DetectBlobs 数据结构结果表中返回的信息如何与找到的斑点相关，以及该信息如何用于以后根据斑点的特征对斑点进行排序和筛选。

对于此示例，下图已用于帮助说明 DetectBlobs 函数的结果表中返回的值的含义：

DetectBlobs 函数被插入到电子表格的空白单元格中。根据形状，DetectBlobs 属性表的参数配置如下：

- 图像：此示例使用默认设置，但此参数可以引用任何图像数据结构，例如由筛选函数生成的图像数据结构，该函数在检查图像中的斑点之前处理图像以去除多余的图像噪声。
- 定位器：使用默认设置是因为图像是静止的，不会旋转或移动。但是，当对移动的图像使用 DetectBlobs 函数时，建议将图像区域分配给固定。
- 区域：图像区域最大化以包括分析中的所有形状。点击区域参数然后在属性表的工具栏中按最大区域按钮，区域会自动被拉伸以涵盖所有图像。
- 要排序的数量：要排序的数量设置为六。此参数也可以设置为 0，并且该工具会自动提取所有满足颜色斑点/颜色背景和面积限制中指定的颜色和大小设置的斑点：最小/区域限制：最大参数。
- 阈值：使用默认设置，自动计算灰度阈值。在该示例图像中，灰度值区别很大且十分容易区分哪些是深色像素，哪些浅色像素。在层次变换不太明显且自动阈值设置不能很好区分深浅像素的应用中，可以使用 直方图 函数，例如，使用 HistHead 或 HistTail 函数来确定在图像不同区域中的灰度值强度。
- 填充孔：使用默认设置，启用在斑点中发现的孔的因素，从而减少那些有孔的斑点形状的整体区域。如果选中了“填充孔”复选框，则会报告斑点内的孔，并且会添加孔内的区域，从而增加带有孔的斑点的区域。
- 边界斑点：使用了默认设置，其中包括与图像区域边界相交的任何斑点。使用此设置，如果图像已向左移动，并且最大的圆形和最小的正方形与图像区域的最左侧边界相交，则仍然落在区域边界内的那些形状的部分将被提取为斑点。如果该复选框没有被选中，则这些斑点将不会被处理。
- 区域限制：最小/最大：使用了默认设置。这些设置在提取斑点阶段筛选区域中的斑点，根据最小和最大区域的设置来评估斑点并确定是否某一区域的形状可被归类为斑点。
- 显示：使用了默认设置，它只允许在选择包含斑点数据结构的单元格时显示结果图形，如下例所示。

配置 DetectBlobs 属性表后，生成斑点数据结构和结果数据表。

使用 FindBlobs 和 SortBlobs 函数，由结果列表返回的数值可以被用来筛选和排列斑点。例如，可以将 FindBlobs 函数插入到电子表格中并引用 DetectBlobs 函数。FindBlobs 函数就可以被用来根据斑点的 Spread 值来筛选斑点。然后，可以将 SortBlobs 函数插入到电子表格中，它可以引用最近创建的 FindBlobs 函数，以根据斑点的 X、Y 位置对列表进行排序。