Halcon 中的区域增长(Region Growing)是一种基于像素相似性的图像分割算法,通过将相邻且属性相似的像素逐步合并成连通区域。其核心原理是 从种子点出发,依据相似性准则迭代合并邻域像素。以下是其详细原理和实现步骤:
一、算法原理
1. 种子点选择(Seed Point Selection)
-
手动指定:用户提供初始种子点坐标(单点或一组点)。
-
自动生成:通过预分割(如阈值分割)或特征分析(如灰度极值点)生成候选种子。
2. 相似性准则(Similarity Criterion)
合并邻域像素的依据,常用准则包括:
-
灰度值相似性:
|当前像素灰度 - 邻域像素灰度| ≤ 容差(Tolerance)
。 -
梯度一致性:边缘梯度变化平缓的区域优先合并。
-
颜色/纹理相似性:多通道图像中计算颜色距离(如欧氏距离)。
3. 生长规则(Growth Rule)
-
邻域定义:通常使用 4-邻域 或 8-邻域。
-
迭代合并:
-
将种子点加入待检查队列。
-
从队列中取出一个像素,检查其邻域像素。
-
若邻域像素满足相似性准则,则将其合并到当前区域,并加入待检查队列。
-
重复步骤2-3,直到队列为空。
-
二、Halcon 关键算子
Halcon 提供多种区域增长算子,最常用的是:
regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize : )
-
参数说明:
-
Image
:输入图像(单通道灰度图)。 -
Row, Column
:种子点坐标(单个或多个)。 -
Tolerance
:灰度容差(决定合并的宽松程度)。 -
MinSize
:输出区域的最小像素数(过滤小区域)。
-
三、算法流程图
四、技术特点与优化
-
抗噪声能力:
-
通过
Tolerance
控制合并敏感度,较大容差可忽略小噪声。 -
配合
MinSize
过滤噪声引起的孤立小区域。
-
-
效率优化:
-
队列管理:使用先进先出(FIFO)队列避免递归栈溢出。
-
像素标记:用状态标记(已合并/未处理)避免重复访问。
-
-
边缘保持:
-
在灰度跃变处(如边缘)停止生长,保留目标边界。
-
五、实例代码
read_image (Image, 'fabrik')
*对图像进行中值处理,以2为半径的圆所有像素中间值
median_image (Image, ImageMedian, 'circle', 2, 'mirrored')
regiongrowing (ImageMedian, Regions, 1, 1, 2, 5000)
*提取区域的中心点的区域
shape_trans (Regions, RegionTrans, 'inner_center')
connection (RegionTrans, ConnectedRegions)
*获取提取区域的中心点坐标
area_center (ConnectedRegions, Area, Row, Column)*regiongrowing_mean:以坐标为种子坐标,向四周进行搜索,寻找合适的区域,这个区域满足灰度值与当前的均值图
*对应的区域的灰度值差小于5的,并且区域像素数大于100*参数1 按照中值滤波进行平滑
*参数2 Regions1 输出的区域
*参数3 参数4Row, Column种子生在点坐标
*参数5 灰度值差异值
*参数6 过滤的面积
regiongrowing_mean (ImageMedian, Regions1, Row, Column, 25, 100)
六、适用场景与局限性
-
适用场景:
-
目标与背景灰度差异明显(如细胞、颗粒检测)。
-
渐变表面缺陷检测(如划痕、污渍)。
-
-
局限性:
-
依赖种子点位置(选择不当会导致欠分割或过分割)。
-
对纹理复杂图像效果较差(需结合多尺度或纹理特征)。
-
七、改进变体
Halcon 还提供增强版区域增长算子:
-
regiongrowing_mean
:
动态更新区域灰度均值作为合并标准,适应灰度渐变。 -
regiongrowing_direction
:
结合梯度方向信息,适合定向结构(如血管、裂纹)。
总结
Halcon 的区域增长本质是 基于种子点的自适应邻域扩展,通过控制 Tolerance
和 MinSize
平衡分割精度与噪声鲁棒性。实际应用中需根据图像特性调整种子策略和容差参数,或结合预处理(滤波)与后处理(形态学)提升效果。