当前位置: 首页 > news >正文

【Halcon 】Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

Halcon 实战:如何为 XLD 模板添加极性信息以提升匹配精度?

在使用 Halcon 进行模板匹配时,我们通常有两种方式创建模板:

  • 基于图像灰度(CreateScaledShapeModel
  • 基于轮廓 XLD(CreateScaledShapeModelXld

前者可自动提取边缘极性信息(即边缘是“由暗到亮”还是“由亮到暗”),而后者则因轮廓缺乏原始图像灰度数据,默认不含极性信息

然而,在实际应用中,我们常常基于手动绘制或处理后的轮廓 XLD 创建模板,此时如果继续忽略极性,会在复杂背景下降低匹配精度,甚至出现误匹配。

本文将介绍一种 先创建无极性的轮廓模型,再通过实际图像自动注入极性信息 的技巧。


1️⃣ 问题背景:XLD 模板不支持 use_polarity?

我们在使用如下方式创建模板时,若将 polarity 设置为 "use_polarity",就会报错:

HOperatorSet.CreateScaledShapeModelXld(contours,"auto",angleStartRad,angleRangeRad,angleStepRad,minScale,maxScale,"auto","auto","use_polarity",      // ⚠ 报错contrast,out modelID);

这是因为 XLD 轮廓本身不携带灰度信息,Halcon 无法判断边缘方向(极性),从而无法创建包含极性的模型。


2️⃣ 正确方式:先使用 ignore_local_polarity 创建

正确做法是先忽略极性创建模型:

HOperatorSet.CreateScaledShapeModelXld(contours,"auto",angleStartRad,angleRangeRad,angleStepRad,minScale,maxScale,"auto","auto","ignore_local_polarity",   // ✅ 安全模式contrast,out modelID);

此时创建的模板没有极性,但可以匹配。


3️⃣ 高级技巧:后处理注入极性信息

Halcon 提供了一个鲜为人知的运算符 set_shape_model_metric,允许我们在首次匹配后,使用真实图像为模板注入极性信息。

✅ 完整流程如下:

① 匹配一次获取模板位姿
HOperatorSet.FindScaledShapeModel(image,modelID,angleStart, angleRange,minScale, maxScale,0.8, 1, 0.5,"least_squares", 0, 0.9,out rowMatch, out colMatch,out angleMatch, out scaleMatch, out score);
② 创建仿射变换矩阵
HOperatorSet.VectorAngleToRigid(0, 0, 0,                         // 模板参考点是 (0,0)rowMatch[0], colMatch[0], angleMatch[0],out homMat2D);
③ 为模型设置极性
HOperatorSet.SetShapeModelMetric(image,modelID,homMat2D,"use_polarity");                 // 🎯 注入极性信息

此操作将遍历模板轮廓,并结合实际图像的灰度变化自动设置每条边的极性。


4️⃣ 后续使用:可正常使用 use_polarity 匹配

一旦极性信息注入完成,后续匹配时可以正常使用极性,从而获得更高的准确率和抗干扰能力。

HOperatorSet.FindScaledShapeModel(image,modelID,angleStart, angleRange,minScale, maxScale,0.8, 1, 0.5,"least_squares", 0, 0.9,out rowMatch, out colMatch,out angleMatch, out scaleMatch, out score);

Halcon 会自动使用之前注入的极性信息进行匹配。


🧠 总结

步骤操作说明
CreateScaledShapeModelXld(..., "ignore_local_polarity")创建无极性模型
FindScaledShapeModel(...)匹配一次获得位置
VectorAngleToRigid(...)得到模板 → 匹配点的变换
SetShapeModelMetric(..., "use_polarity")注入极性信息

这种方式弥补了 XLD 模板模型初始不支持极性的缺陷。


效果展示

没加极性的匹配效果:
在这里插入图片描述

加了极性的匹配效果:
在这里插入图片描述
可以看到加了极性之后,匹配精确度更好了。

http://www.lryc.cn/news/607442.html

相关文章:

  • 32. flex 的子元素可以浮动吗
  • 三星固态硬盘PM1643A停产后,PM1653能代替PM1643A吗?有兼容性问题吗?
  • 【PHP】接入百度AI开放平台人脸识别API,实现人脸对比
  • TCP RTO 与丢包检测
  • VS Code 插件开发教程
  • 【高等数学】第七章 微分方程——第六节 高阶线性微分方程
  • 1 前言:什么是 CICD 为什么要学 CICD
  • Fabarta个人专属智能体限时体验中:高效、安全的长文写作新搭档
  • 机器学习——逻辑回归(LogisticRegression)的核心参数:以约会数据集为例
  • 自动化框架pytest
  • linux编译基础知识-编译时路径和运行时路径
  • ModeSeq论文阅读
  • Redis 数据结构全景解析
  • 如何管理数据足迹,实现SAP S/4HANA的无缝迁移
  • 记一次Windwos非常离谱的系统错误,IPF错误,程序构建卡顿,程序启动卡顿。。。
  • 从“多、老、旧”到“4i焕新”:品牌官方商城(小程序/官网/APP···)的范式跃迁与增长再想象
  • 振动波形转音频播放并做声纹聚类
  • Eigent:革新复杂任务处理的多智能体协作平台技术解析
  • MybatisPlus如何用wrapper语句灵活连接多查询条件
  • [位运算]2411. 按位或最大的最小子数组长度
  • 安卓开发--RelativeLayout(相对布局)
  • AI在安全方面的十个应用场景
  • 技术栈:基于Java语言的搭子_搭子社交_圈子_圈子社交_搭子小程序_搭子APP平台
  • 电子合同管理台账功能详解
  • 移除 Excel 文件(.xlsx)的工作表保护
  • EasyExcel 公式计算大全
  • python进程、线程、协程
  • 【LeetCode 热题 100】155. 最小栈
  • 【东枫科技】DreamHAT+
  • 【人工智能-17】机器学习:KNN算法、模型选择和调优、朴素贝叶斯分类