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.pswp.cn/diannao/93880.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93880.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93880.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

grafana/lock-stack 日志 Pipeline 配置

前言 本文使用的是 grafana/loki-stack chart 抓取的 k8s 日志。其他 chart 配置都差不多。 日志问题 docker 容器运行时 pod 内原始日志 [cpu-4] Hello, 第 9788 次报时,时间:2025-08-01T06:35:420000 {"HOSTNAME":"cpu-4",&qu…

appium2.0+之PointerActions详解

以下内容在 夜神模拟器 上进行。 一、应用场景 一些针对手势的操作,比如滑动、长按、拖动等。可以将这些基本手势组合成一个相对复杂的手势。 二、使用步骤创建触摸输入设备(模拟手指操作) touch_input PointerInput(interaction.POINTER_TO…

Java HTTPS 请求失败排查与证书导入全过程

文章目录Java HTTPS 请求失败排查与证书导入全过程问题背景问题初步分析排查过程查看目标地址证书导入证书验证证书是否导入成功重启应用进一步验证:是否真的是证书问题?1. 浏览器访问2. 抓包工具验证(如 Charles、Wireshark)补充…

android APT技术

1,背景 对于注解的使用,想必大家都不陌生,它出现在我们的源码中,以及大部分框架中,比如ButterKnife、Arouter、Retrofit,但它们是有区别的,其中前2个是编译时注解,最后一个是运行时注…

MySQL 和 PostgreSQL综合比对分析汇总

面对大数据项目或其它类型项目中,面对关系型数据库选择一直是很总要的一点,本文针对MySQL 和 PostgreSQL进行综合比对分析汇总,内容仅供参考。MySQL 和 PostgreSQL 是两款主流的开源关系型数据库(RDBMS),但…

Linux---make和makefile

一、基本概念1.是什么make是一条命令,makefile是一个文件2.对应在vs中按一下f5就能运行代码,在Linux中make就相当于f5,使用makefile来封装从而实现我, 想要的功能3.使用①创建makefile文件②编辑makefile解释:test.exe…

【DAB收音机】DAB收音机协议及其他资料汇总

目录[ETSI DAB标准协议文档](https://www.etsi.org/standards)Other DAB资料DAB收音机相关的专利DAB收音机相关的期刊及学位论文DAB开源项目代码仓库qt-dab工具welle.io工具dablin工具【eti广播工具】⚙️ 项目对比与选型建议Other 收音机资料Other资料ETSI DAB标准协议文档 官…

RabbitMQ的特点和消息可靠性保障

掌握RabbitMQ的核心知识,需从其特点和消息可靠性保障(尤其是消息丢失解决方案)两方面入手,以下是详细说明: 一、RabbitMQ的核心特点 RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)协议…

项目升级啦

公司要新做一个医疗行业的业务,经过业务端和产品端的评估该业务与公司已有的产品线关联不大,用户后续也不想在老系统那台老爷车上继续使用,话说老系统到现在差不多10年了,中间经历过的前后端开发者形形色色,维护者换了…

Android中页面生命周期变化

一、Activity切换的生命周期变化(A启动B)1. 标准流程(B完全覆盖A)完整生命周期路径:Activity A:onPause():失去焦点,仍部分可见onStop():完全不可见(当B完全覆…

自动驾驶控制算法——PID算法

自动驾驶控制算法——PID算法 文章目录自动驾驶控制算法——PID算法一、PID 是什么?二、PID 原理2.1 **比例环节(P)**2.2 **积分环节(I)**2.3 **微分环节(D)**2.4 特点总结2.5 案例分析 —— 小…

Spring Boot 异步执行方式全解析:@Async、CompletableFuture 与 TaskExecutor 对比

在 Spring Boot 开发中,异步执行是提升系统性能的重要手段,尤其适用于处理耗时操作(如日志记录、邮件发送、数据同步等)。本文将深入对比 Spring Boot 中三种主流的异步实现方式 ——Async注解、手动CompletableFuture和直接使用T…

高效微调2:Prompt-Tuning原理与实战

高效微调2:Prompt-Tuning原理与实战 Prompt-Tuning原理介绍 代码 Prompt-Tuning原理介绍 Prompt-Tuning Prompt-Tuning的思想:冻结主模型全部参数,在训练数据前加入一小段Prompt,只训练Prompt的表示层,即一个Embedding模块。其中,Prompt.又存在两种形式,一种是hard promp…

使用BART模型和T5模型实现文本改写

BART模型BART(Bidirectional and Auto-Regressive Transformers)是由 Facebook AI Research(FAIR)在 2019 年提出的序列到序列(seq2seq)预训练模型,论文发表于《BART: Denoising Sequence-to-Se…

电商前端Nginx访问日志收集分析实战

使用FileBeatLogstashES实现分布式日志收集 在大型项目中 ,往往服务都是分布在非常多不同的机器上 ,每个机器都会打印自己的log日志 但是 ,这样分散的日志 ,本来就无法进行整体分析。再加上微服务的负载均衡体系 ,甚至…

TwinCAT3示例项目1

目录一、需求分析二、程序编写1.实现1盏灯的自控(IF、TOF)2. 添加模式控制(Case、枚举)3. 添加多盏灯(FOR、数组)4. 添加多组灯(二维数组)END项目结合了,FB,I…

如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能

这篇文章详细介绍了如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能,通过 PCI 设备直通(Pass-Through)技术将显卡分配给虚拟机使用: 在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能 1. 检查…

设计模式(二十二)行为型:策略模式详解

设计模式(二十二)行为型:策略模式详解策略模式(Strategy Pattern)是 GoF 23 种设计模式中最具实用性和广泛影响力的行为型模式之一,其核心价值在于定义一系列算法或行为,并将每个算法封装到独立…

AI+向量化

要理解 Java 如何结合 AI 与向量化,我们需要从向量化的核心概念、AI 中向量化的作用、Java 生态中的实现工具以及具体实践案例四个维度展开。以下是详细解析:一、核心概念:向量化与 AI 的关系向量化(Vectorization)是将…

Bootstap Vue 之b-form-radio-group 不显示选中状态问题

代码类似&#xff1a;<b-form-radio-groupclass"mt-2"required:disabled"dfrmDisabled"v-model"childDikeForm.SafetyAppraisalRank":options"[一, 二, 三, 四]"name"rankradioopt"></b-form-radio-group>经过测…