halcon中的connection,是打散区域还是链接区域
·
connection 是打散区域,而不是链接区域。
核心功能:打散连通区域
connection 算子将输入区域中所有不连通的子区域分离成独立的区域对象。
工作原理
halcon
* 假设 Region 包含多个不相连的区域 connection(Region, ConnectedRegions)
处理前:
-
输入:1个区域对象
-
这个区域对象可能包含多个物理上不相连的部分
处理后:
-
输出:多个区域对象
-
每个连通组件成为一个独立的区域对象
具体示例
示例1:多个独立对象
halcon
* 创建三个不相连的圆形 gen_circle(Circle1, 100, 100, 50) gen_circle(Circle2, 300, 100, 30) gen_circle(Circle3, 200, 300, 40) * 合并成一个区域 union2(Circle1, Circle2, TempRegions) union2(TempRegions, Circle3, MultiRegion) * 此时 MultiRegion 是1个区域对象,包含3个物理上分离的部分 * 使用 connection 打散 connection(MultiRegion, SeparateRegions) * 现在 SeparateRegions 包含3个独立的区域对象 count_obj(SeparateRegions, Number) * Number = 3

与链接区域算子的对比
| 算子 | 功能 | 输入→输出 | 用途 |
|---|---|---|---|
| connection | 打散区域 | 1个区域 → N个区域 | 分离独立对象 |
union1 | 合并区域 | N个区域 → 1个区域 | 合并所有区域 |
union2 | 合并两个区域 | 2个区域 → 1个区域 | 合并特定区域 |
dilation | 膨胀 | 区域扩展 | 连接邻近区域 |
实际应用场景
1. 颗粒计数
halcon
* 检测颗粒状物体 threshold(Image, Particles, 0, 100) connection(Particles, SingleParticles) count_obj(SingleParticles, ParticleCount) * 统计颗粒数量
2. 缺陷分离
halcon
* 检测多个缺陷区域 threshold(Image, Defects, 200, 255) connection(Defects, IndividualDefects) * 现在可以单独分析每个缺陷 for i := 1 to |IndividualDefects| by 1 select_obj(IndividualDefects, OneDefect, i) area_center(OneDefect, Area, Row, Column) * 对每个缺陷进行处理... endfor
3. 目标识别与定位
halcon
* 找出图像中所有独立的物体 threshold(Image, Objects, 0, 150) connection(Objects, SeparateObjects) * 现在可以遍历每个物体进行处理
重要特性
-
不改变区域形状:只是将连通组件分离,不修改任何像素
-
保持拓扑关系:输出区域的相对位置与输入一致
-
顺序不确定:输出区域的顺序可能与预期不同,通常需要后续排序
总结
connection 是打散区域,它将一个可能包含多个不连通部分的区域对象,分解为多个独立的区域对象,每个对象代表一个连通组件。这是Halcon区域处理中最基础且重要的操作之一,常用于物体计数、分离和分析。
更多推荐


所有评论(0)