halcon-blob
在图像处理中,Blob(Binary Large Object)分析是一种常见的用于分割和测量图像中特定形状区域的技术。Halcon是一个强大的机器视觉软件库,提供了丰富的工具和函数来处理图像
halcon自带图片路径
C:\Users\Public\Documents\MVTec\HALCON-18.11-Progress\examples
blob常用算子:
1.固定阈值分割
适用于目标与背景灰度差异明显的图像,如工业检测中的高对比度物体分割
threshold(GrayImage, Region, 100, 255)
rayImage:输入的灰度图像,通常通过rgb1_to_gray函数从彩色图像转换而来1。
Region:输出区域,包含所有亮度值在阈值范围内的像素1。
100, 255:指定阈值范围,即亮度值≥100且≤255的像素会被分割为前景1
2.二值化自动阈值分割
适用于具有明显的双峰的直方图,自动确定阈值
*参数1 输入图片
*参数2 二值化输出区域
*参数3 阈值分割方式*max_separability 最大限度分离物体和背景部分*smooth_histo 获取直方图,再平滑直方图, 查找最小值作为阈值
*参数4 提取的区域是亮部分还是暗部分 dark暗部分,light 亮部分
*参数5 阈值
binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold)案例:
read_image(Image, 'audi2')
binary_threshold(Image, Region, 'max_separability', 'light', UsedThreshold)
dev_display(Region)
3.自动阈值分割
read_image(Image, 'audi2')参数3为高斯平滑的Sigma值,控制分割的精细程度:Sigma较小时(如4),直方图保留较多细节,分割结果更精细。Sigma较大时,直方图趋于单峰,可能仅生成一个分割结果高对比度图像 使用较小值(3-5) 保留了更多细节 产生更多阈值低对比度图像 使用较大值(6-10)平滑效果更强,产生阈值就少
auto_threshold(Image, Regions, 4)
* 参数4表示分割出的区域数
dev_display(Regions)
4.动态阈值分割
适用于光照不均或背景变化的场景。
参数说明read_image(Image, 'audi2')mean_image(Image, ImageMean, 31, 31)是Halcon中用于图像均值滤波的核心算子,通过31×31像素的方形邻域计算灰度平均值实现平滑处理12。其关键特性如下:参数解析Image:输入图像(支持byte/int2/uint2/int4/real等类型)2ImageMean:输出平滑后的图像31,31:滤波器掩模的宽度和高度(必须为奇数,自动校正偶数值) mean_image(Image, ImageMean, 31, 31)Image:待分割的原始图像ImageMean:参考图像(通常为原始图像的平滑版本,可通过mean_image等滤波生成)1RegionDynThresh:输出分割区域5:灰度差值阈值(Offset),决定敏感度,推荐范围5-404'light':提取模式,表示选择比参考图像更亮的区域(其他模式包括dark/equal/not_equal) dyn_threshold(Image, ImageMean, RegionDynThresh, 5, 'light') dev_display(RegionDynThresh)
5.字符阈值分割
用于字符分割的阈值处理算子,基于局部自适应阈值的方法提取图像当中的文字区域
dev_clear_window () read_image (Image, 'alpha1') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_display (Image)* 专门用于字符分割的阈值处理算子,基于局部自适应阈值的方法提取图像当中的文字区域 * 参数1 输入图片 * 参数2 输入区域 * 参数3 输出图像 * 参数4 sigma高斯平滑度 * 参数5 用于确定阈值的百分比 定义字符与背景分离的程度 常用范围90-98之间,暗背景/亮字符96-98 * 参数6 选择的阈值 char_threshold (Image, Image, Characters, 2, 95, Threshold) connection (Characters, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 110, 500) dev_display (SelectedRegions)
一般blob使用步骤:
1. 图像预处理
- 读取图像并转换为灰度图:
read_image
+rgb1_to_gray
- 必要时进行直方图分析(
gray_histo
)以确定合适的阈值范围
2. 阈值分割
根据图形特征使用不同的分割方式
3. 区域连通与筛选
- 使用
connection
确保区域连通性通过 select_shape
或特征筛选助手按面积、宽高比等过滤目标elect_shape(Regions, SelectedRegions, 'area', 'and', 100, 1000); // 筛选面积范围
4. 可视化与输出
使用dev_display
显示分割结果及定位标记
案例1:
案例2 找到最大的筛选结果
read_image(Image, 'audi2')
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 100, 255)
count_obj(Region, Number)
select_obj(Region, SelectedRegions, 1) // 选择最大的Blob(如果有多个)
dev_display(SelectedRegions)
dev_set_color('green')
dev_display(SelectedRegions) // 以绿色显示选定的Blob区域