图像分割中的 regiongrowing 与动态阈值算法详解对比
在使用 HALCON 进行图像处理时,图像分割是最常见也最关键的操作之一。本文将深入讲解 regiongrowing
算子的原理与使用方法,并与另一常见方法——动态阈值 (dyn_threshold
) 进行详细对比,帮助你根据不同应用场景选择合适的分割策略。
一、regiongrowing
算子详解
1. 算子功能
regiongrowing
是基于区域生长的分割方法,能将图像中灰度值相近的相邻像素块合并成一个连通区域,适用于灰度变化平缓、结构清晰的目标提取。
2. 算子格式
regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize)
参数说明:
- Image:输入的单通道图像(支持 byte, int1, int2, real 等类型)
- Regions:输出的区域集合(Region数组)
- Row, Column:指定栅格大小(必须为奇数),控制比较粒度,默认通常为 3
- Tolerance:灰度值差异容差,决定是否合并相邻块
- MinSize:过滤小区域的最小像素数阈值
3. 算法原理
- 将图像划分为
Row x Column
的小块; - 比较相邻块的中心像素灰度值;
- 若差值小于等于 Tolerance,则合并区域;
- 最后剔除面积小于 MinSize 的区域。
4. 示例代码
read_image(Image, 'fabrik')
mean_image(Image, Mean, 5, 5)
regiongrowing(Mean, Regions, 5, 5, 6.0, 100)
二、dyn_threshold
算子简介
1. 功能概述
动态阈值通过比较当前像素与模糊背景图的灰度差异,实现前景/背景分离,适用于背景不均但结构明显的目标提取。
2. 算子格式
dyn_threshold(Image, Background, RegionDynThresh, Threshold, 'light')
- Image:原图
- Background:模糊图像或局部平均图像
- RegionDynThresh:输出的前景区域
- Threshold:差值阈值(像素 - 背景 > 阈值 即为前景)
3. 示例代码
mean_image(Image, Background, 15, 15)
dyn_threshold(Image, Background, RegionDynThresh, 10, 'light')
三、两者详细对比
特性 | regiongrowing | dyn_threshold |
---|---|---|
核心思想 | 从种子点开始区域扩展 | 前景/背景灰度差判断 |
操作单位 | 块级别区域合并 | 单像素灰度比较 |
是否考虑连通性 | ✅ | ❌ |
是否自动生长 | ✅ | ❌ |
是否依赖模糊图像 | ❌(可选预处理) | ✅(必须) |
输出结果 | 多区域(Region数组) | 二值区域(Region) |
使用场景对比
场景 | 更适合 regiongrowing | 更适合 dyn_threshold |
---|---|---|
背景复杂、目标灰度一致 | ✅ | ❌ |
背景光照不均匀 | ❌ | ✅ |
连通区域提取需求强 | ✅ | ❌ |
实时性能要求 | ✅ | ✅ |
类比通俗理解
regiongrowing
类似“从一点开始涂色”,相近颜色会不断扩展;dyn_threshold
更像是“背景图减原图”,亮出前景。
四、总结
对比维度 | regiongrowing | dyn_threshold |
---|---|---|
连通区域分割 | ✅ | ❌ |
灰度不均背景 | ❌ | ✅ |
算法逻辑 | 局部相似性扩张 | 背景减法式阈值 |
应用举例 | 焊点、颗粒提取 | 字符、污点检测 |
建议:
- 若需区域结构连通且灰度一致,可选
regiongrowing
- 若背景不均,目标明显,可用
dyn_threshold