当前位置:首页 > 技术 > 正文内容

HALCON区域运算:connection时机对集合操作的影响

访客 技术 2026年6月20日 1

在HALCON视觉库中,connection算子常被通俗理解为"打散"——将不连通的空间区域拆分为独立对象。然而,这个算子在何时调用,会直接影响后续区域集合运算的行为表现。本文通过对比实验,揭示connection执行时机对differenceintersectionunion2等算子的深层影响。

一、difference算子的行为差异

1. 多区域对象减去单区域对象

以下示例展示先connection后做差集与先做差集后connection的区别:

read_image (Img, 'test_image.jpg')

* 提取圆形区域
threshold (Img, CircleMask, 0, 80)
opening_circle (CircleMask, CircleClean, 3.5)

* 提取四个独立区块
threshold (Img, BlocksRaw, 100, 200)
opening_circle (BlocksRaw, BlocksClean, 3.5)

* 对圆形区域进行膨胀
dilation_circle (CircleClean, CircleExpanded, 29.5)

* 方案A:先打散再差集
connection (BlocksClean, BlocksSplit)
difference (BlocksSplit, CircleExpanded, ResultA)
area_center (ResultA, AreaA, RowA, ColA)

* 方案B:先差集再打散
difference (BlocksClean, CircleExpanded, TempDiff)
connection (TempDiff, ResultB)
area_center (ResultB, AreaB, RowB, ColB)

实验结果:AreaA[1307, 4448, 4534, 0],包含4个元素(含一个面积为0的空对象);AreaB[1307, 4448, 4534],仅3个有效元素。两者视觉形状完全一致,但元组结构截然不同。

2. 多区域集合间的差集运算

当左侧4个区域与右侧2个区域进行difference运算时,结果对象数量保持与第一个参数一致,仍为4个。即使几何上部分区域被完全消除,结果元组中仍会保留对应的空对象占位。

* 左侧4个对象,右侧2个对象
difference (FourParts, TwoParts, DiffResult)
* DiffResult 仍为4个对象,可能包含面积为0的占位项

* 再次执行connection无法消除空对象
connection (DiffResult, Reconnected)
* 结果仍有4个对象

* 需先合并再重新拆分才能清理
union1 (Reconnected, Merged)
connection (Merged, FinalClean)
* FinalClean 变为实际有效区域数量

3. 单区域减去多区域集合

反向操作时,结果对象数量与第一个参数(单区域)保持一致:

* RegionUnion 为5个对象的集合,已执行connection
difference (SingleBlob, RegionUnion, SingleResult)

* 结果仅为1个对象,但可能包含不连通部分
connection (SingleResult, SplitResult)
* SplitResult 变为2个独立对象

difference算子核心规律:运算效果等效于union1(RegionA) - union1(RegionB),但结果元组的元素个数始终与第一个参数RegionA保持一致,可能产生面积为0的占位对象或包含未连通的区域。

二、intersection算子的对称性陷阱

intersection算子虽然满足交换律(几何形状不变),但对象数量受参数顺序影响:

* 准备数据:RegionUnion为5个对象的集合
connection (RegionUnion, RegionUnion)

dilation_circle (CircleClean, CircleDilated, 29.5)

* 顺序A:单区域 intersect 多区域集合
intersection (CircleDilated, RegionUnion, InterA)

* 顺序B:多区域集合 intersect 单区域
intersection (RegionUnion, CircleDilated, InterB)

结果分析:InterA仅含1个对象;InterB含5个对象(含面积为0的占位项)。两者几何形状完全相同,但元组结构差异显著。

三、union2算子的对象数量传递规则

union2(RegionA, RegionB, RegionUnion)的结果对象数量遵循以下规则:

RegionA对象数RegionB对象数RegionUnion对象数行为说明
1任意1RegionB先合并为1个,再与RegionA合并
N1NRegionA的每个对象分别与RegionB合并
NMNRegionB先合并为1个,再与RegionA的每个对象合并
* 示例:RegionA含2个对象,RegionB含3个对象
union2 (RegionA, RegionB, Combined)
* Combined 含2个对象,每个都是RegionB整体与RegionA对应对象的合并

四、关键结论

这些算子的共同特征是结果对象数量由第一个参数决定,而非几何连通性。理解这一机制对于控制HALCON程序中的元组索引、循环遍历及后续测量分析至关重要。实际开发中,建议在关键运算节点通过count_obj验证对象数量,避免因空对象或拆分时机不当导致的逻辑错误。

标签: Halcon

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。