Halcon学习--(6)Blob分析
1、简介
Blob,即binary large object,二进制大型对象,是事务处理过程中遇到的一些大型的、复杂的数据项,必须作为一个完整的数据项看待。如一幅图形、一帧图像、一段语言等。在计算机视觉中的Blob是指图像中的具有相似颜色、纹理等特征所组成的一块连通区域。
Blob分析(Blob Analysis)是对图像中相同像素的连通域进行分析(该连通域称为Blob)。其过程其实就是将图像进行二值化,分割得到前景和背景,然后进行连通区域检测,从而得到Blob块的过程。简单来说,blob分析就是在一块“光滑”区域内,将出现“灰度突变”的小区域寻找出来。
Blob分析工具可以从背景中分离出目标,并可以计算出目标的数量、位置、形状、方向和大小,还可以提供相关斑点间的拓扑结构。在处理过程中不是对单个像素逐一分析,而是对图像的行进行操作。图像的每一行都用游程长度编码(RLE)来表示相邻的目标范围。这种算法与基于像素的算法相比,大大提高了处理的速度。
2、Blob分析流程
Blob分析的基本步骤,这是一种理想状态,也是最基本的套路,获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)。
步骤 | 核心目标 | 常用 Halcon 算子举例 |
|---|---|---|
1. 图像获取与预处理 | 获取高质量图像,减少噪声、校正光照不均 |
|
2. 图像分割 | 将前景目标与背景分离,创建二值区域 |
|
3. 连通区域分析 | 将二值图像分割成独立的连通区域(Blob) |
|
4. 区域处理与筛选 | 优化区域形状,并根据特征(如面积、形状)筛选目标 |
|
5. 特征提取 | 计算并输出所需特征(数量、位置、面积、形状参数等) |
|
3、常用算子
1. 图像获取与预处理
图像质量直接影响 Blob 分析的效果。
获取图像:使用
read_image读取图像。预处理:常用滤波算子平滑噪声,如
gauss_filter(高斯滤波)、mean_image(均值滤波)。对于光照不均,可能需要进行光照校正或使用图像增强算子(如emphasize)来提升对比度。
2. 图像分割
分割是将前景目标从背景中分离出来的关键一步。
全局阈值分割 (
threshold)这是最直接的方法,适用于前景和背景灰度对比明显且光照均匀的场景。你需要根据图像直方图或经验设定一个固定的灰度范围
[MinGray, MaxGray]。* 读取图像后,设定阈值范围,例如提取灰度值在128到255之间的像素 read_image (Image, 'printer_chip/printer_chip_01') threshold (Image, Region, 128, 255)自动阈值分割 (
binary_threshold)当图像对比度稳定但手动设定阈值繁琐时,此算子可根据直方图自动选择阈值,常用
'max_separability'(最大类间方差法,即Otsu)等方法。局部(动态)阈值分割 (
dyn_threshold)在光照不均或背景复杂时特别有效。它需要一个参考图像(通常由原图平滑滤波得到,如使用
mean_image),然后逐像素比较原图与参考图的灰度差。* 读取图像后 read_image (Image, 'printer_chip/printer_chip_01') * 先对原图进行平滑处理,生成参考图像 mean_image (Image, ImageMean, 31, 31) * 然后进行动态阈值分割,提取比局部背景亮出一定差值的像素 dyn_threshold (Image, ImageMean, RegionDynThresh, 10, 'light')
3. 连通区域分析与区域处理
分割得到的区域可能包含多个粘连目标或噪声。
连通区域分析 (
connection)此算子将二值图像中所有相互连接的前景像素集合找出来,并为每个独立的连通区域分配唯一标签,这是后续对单个Blob进行分析的基础。
形态学处理
用于优化区域形状。
开运算 (
opening_circle,opening_rectangle1):先腐蚀后膨胀,可消除小噪声、断开细小的连接。闭运算 (
closing_circle,closing_rectangle1):先膨胀后腐蚀,可填充区域内部的小孔洞、连接邻近区域。
区域筛选 (
select_shape)根据面积、宽度、高度、圆度等特征从大量区域中筛选出感兴趣的目标。
* 读取图像后 read_image (Image, 'printer_chip/printer_chip_01') threshold (Image, Region, 100, 255)connection (Region, ConnectedRegions)* 筛选面积在100到1000像素之间的区域 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 30000, 50000) * 可以组合多个特征进行筛选 select_shape (SelectedRegions, FinalRegions, ['area','roundness'], 'and', [100,0.85], [1000,1.0])
4. 特征提取
对筛选后的最终区域,提取所需信息。
* 计算每个区域的面积和中心坐标
area_center (SelectedRegions, Area, Row, Column)
* 计算区域的最小外接矩形
smallest_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2)
* 计算区域的方向(主轴角度)
orientation_region (SelectedRegions, Orientation)4、典型应用场景与实例
缺陷检测(如玻璃划痕、织物瑕疵)
思路:完好产品表面纹理均匀。缺陷通常表现为局部灰度突变。
方法:可能结合动态阈值或高精度阈值来捕捉微弱的瑕疵信号,再通过形态学处理和区域筛选确认。
零件计数与定位
思路:在图像中统计特定零件的数量并获取其位置。
方法:通过阈值分割零件,利用
connection分离粘连零件,再使用select_shape根据面积和形状过滤,最后通过area_center获取位置。
字符识别(OCR)预处理
思路:在正式识别前,先将图像中的每个字符分割出来。
方法:Blob分析可用于定位和分离字符区域。
注意事项
光照是关键:Blob分析的效果极大程度依赖于光照条件。尽可能在采集图像阶段保证光照均匀和稳定。
预处理的重要性:不要忽视预处理。适当的滤波可以显著改善分割效果。
结构元素选择:进行形态学操作时,结构元素(如圆形、矩形)的大小和形状会直接影响效果,需要根据目标特征谨慎选择。
特征选择:
select_shape支持的特征非常多,选择与你的目标最相关的特征进行筛选,可以提高准确性和效率。局限性:Blob分析主要适用于目标与背景对比度较高的图像。对于低对比度图像、需要匹配复杂模板或纹理分析的任务,可能需要结合其他方法如基于形状的匹配或深度学习。
Halcon 的 Blob 分析是一个系统性的过程,核心在于通过图像分割、连通区域分析、形态学处理和特征筛选,从图像中提取出有用的二维形状信息。掌握其流程和关键算子,并能根据具体应用场景灵活调整策略,是成功应用它的关键。
