【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.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>經過測…