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)
 ​
 * 现在可以遍历每个物体进行处理

重要特性

  1. 不改变区域形状:只是将连通组件分离,不修改任何像素

  2. 保持拓扑关系:输出区域的相对位置与输入一致

  3. 顺序不确定:输出区域的顺序可能与预期不同,通常需要后续排序

总结

connection 是打散区域,它将一个可能包含多个不连通部分的区域对象,分解为多个独立的区域对象,每个对象代表一个连通组件。这是Halcon区域处理中最基础且重要的操作之一,常用于物体计数、分离和分析。

更多推荐