halcon模板匹配學習(二) 準備模板

如下,我們將介紹匹配的第一個操作:準備模板

初始時刻,我們準備好參考圖像,并對其做一定的處理,然后我們需要從參考圖像中導出模板,也就是將參考圖像裁剪成所謂的模板圖像。獲取模板圖像可以通過設置ROI來完成。對于某些應用來說,也可以使用綜合模板代替模版圖像。綜合模板既可以是綜合創造的模板圖像,也可以是一個XLD輪廓。

裁剪參考圖像,使之成為模板圖像

為了創建模板圖像,我們需要從參考圖像中選取ROI,并使用 reduce_domain裁剪圖像的定義域為我們選取的ROI。這樣我們就創建了模板圖像,后續將作為匹配算子的輸入參數。

選取ROI有兩種方法:

  • 直接指定法。
    我們可以直接指定區域的參數進而直接生成區域。HALCON 提供了多種算子用來創建區域,既包括標準的形狀像矩形gen_rectangle2)或者橢圓(gen_ellipse) 到自由形狀的區域,比如多邊形區域(gen_region_polygon_filled).為了使用這些算子,你需要這些區域的參數,比如矩形的位置、大小、方向或者園的位置和半徑。如果這些參數不能直接獲得,你可以使用draw算子,比如你可以在打開的圖像上畫一個形狀,然后返回其參數。這些算子可以在HDevelop菜單 Operators :fa-play: Graphics :fa-play: Drawing 獲得。
  • 通過圖像處理獲得區域。
    有時我們可以通過圖像處理獲得區域,如閾值處理分割圖像、通過blob分析connection、fill_up、select_shape等可以選取某種特征的區域。

綜合模板圖像,作為模板圖像的替代選擇

綜合模板圖像

綜合模板圖像主要應用于 correlation-based 匹配和所有基于輪廓的2D方法 比如 shape-based, component-based, local deformable, and perspective deformable matching.
如下我們舉例說明。




我們想要定位電容。如果我們選擇明亮的圓域作為ROI區域,則會發現該區域包括大量的噪聲點。因此最后匹配出的電容只有一個。如果我們改進之前的圓區域,換成一個環形區域作為ROI,則最后匹配出理想的電容區域。但是即使這樣,環形區域使得內部的區域丟失了一部分,而且仍然包含部分噪點,所以不理想。

最好的方法是使用綜合模板圖像。具體步驟如下:
Step 1: 創造一個XLD輪廓
首先我們使用算子gen_ellipse_contour_xld創造一個圓形區域。

RadiusCircle := 43
SizeSynthImage := 2*RadiusCircle + 10
gen_ellipse_contour_xld (Circle, SizeSynthImage/2, SizeSynthImage/2, 0, 
RadiusCircle, RadiusCircle, 0, 6.28318, 'positive', 1.5)

注意合成圖像應該比區域大一些,因為對于 shape-based matching,當創建圖像金字塔時,區域外面的像素也被使用。
Step 2: 創造一個圖像,并將XLD插入圖像中
然后我們使用算子gen_image_const創造一個空的圖像,并使用算子* paint_xld*將XLD輪廓插入圖像中.

gen_image_const (EmptyImage, 'byte', SizeSynthImage, SizeSynthImage)
paint_xld (Circle, EmptyImage, SyntheticModelImage, 128)

Step 3: 創建模型
使用綜合模板創建模型。




請注意:
完整的代碼,見:HDevelop 項目 solution_guide/matching/synthetic_circle.hdev

來自XLD輪廓的模型

對于 shape-based matching 和 the local and perspective deformable matching,你不必要從一個XLD輪廓中創建一個綜合模板圖像,因為你可以直接使用XLD輪廓作為模板。比如說,對于shape-based matching, 你不必要提供一幅圖像,選擇ROI,然后調用 create_shape_model, create_scaled_shape_model, or create_aniso_shape_model其中之一去創建模型。

相反,你可以簡單地調用create_shape_model_xld, create_scaled_shape_model_xld, or create_aniso_shape_model_xld使用XLD輪廓作為輸入參數。

舉例說明。如下的完整項目,見 HDevelop example program: examples\hdevelop\Matching\Shape-Based\create_shape_model_xld.dev:

gen_circle_contour_xld (ContCircle, 300, 300, MeanRadius, 0, 6.28318, \
'positive', 1)
create_shape_model_xld (ContCircle, 'auto', 0, 0, 'auto', 'auto', \
'ignore_local_polarity', 10, ModelID)

對于 local and perspective deformable matching 的處理也可以相應的被使用。這里你可以使用算子create_local_deformable_model_xld for the local deformable matching and create_planar_uncalib_deformable_model_xldor create_planar_calib_deformable_model_xld, respectively, for perspective deformable matching.

初始時刻不知道極性,因為輪廓不提供極性。所以需要在一個有代表性的圖像中做實驗,看看如何設置極性。開始忽略極性,即參數
Metric設置為ignore_local_polarity,后面設置極性.可以調用算子set_shape_model_metric for shape-based matching,set_local_deformable_model_metric
for local deformable matching, and set_planar_uncalib_deformable_model_metric or
set_planar_calib_deformable_model_metric, respectively, for perspective deformable matching.
然后極性信息就被存儲到模型中。然后在接下里的搜索算子中可以通過參數
Metric設置各位合適的值,如’use_polarity’. 這種處理強烈推薦給迅速且魯棒的搜索。

find_shape_model (Image, ModelID, 0, 0, 0.7, 0, 0, 'least_squares', 0, 0.9, Row, Column, Angle, Score)... accessing the indices of the matches
... that represent suitable drill holesvector_angle_to_rigid (0, 0, 0, Row[HoleIndices[0]], Column[HoleIndices[0]], Angle[HoleIndices[0]], HomMat2D)set_shape_model_metric (Image, ModelID, HomMat2D, 'use_polarity')for Index := 2 to 9 by 1read_image (Image, 'brake_disk/brake_disk_part_'+Index$'02d')find_shape_model (Image, ModelID, 0, 0, 0.7, 0, 0,   'least_squares', 0, 0.9, Row, Column, Angle, Score)
endfor

如下圖為示意圖:




注:關于極性的選擇。



1. 使用極性模式: 要求模板與圖像黑白亮度對應。
2. 忽略模板全局極性: 不需要模板與圖像黑白亮度對應
3. 忽略局部極性: 不需要模板與圖像黑白亮度對應,允許變化。


打賞

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘繼承技術之虛函數

虛函數 調用虛函數時函數行為將根據對象所屬類的不同而變化。 父類指針或引用指向子類對象時&#xff0c;可訪問子類重寫方法&#xff08; virtual函數&#xff09;但無法訪問在父類中沒有定義的子類方法和數據成員。 #include <iostream>using namespace std;class Supe…

java中GET方式提交和POST方式提交

java中GET方式提交的示例&#xff1a; /*** 獲取關注列表;* return*/SuppressWarnings("unchecked")public static ArrayList<String> getUserList() {StringBuffer bufferRes new StringBuffer();ArrayList<String> users null;try {URL realUrl new…

基于HALCON的模板匹配方法總結

很早就想總結一下前段時間學習HALCON的心得&#xff0c;但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習&#xff0c;做了許多的練習和實驗&#xff0c;并對基于HDevelop的形狀匹配算法的參數優化進行了研究&#xff0c;寫了一篇《基于HDevelop的形狀匹配算法參數…

js 數組移除_2020前端面試--常見的js面試題

&#xff08;答案持續更新...&#xff09; 1.簡述同步和異步的區別js是一門單線程語言&#xff0c;所謂"單線程"&#xff0c;就是指一次只能完成一件任務。如果有多個任務&#xff0c;就必須排隊&#xff0c;前面一個任務完成&#xff0c;再執行后面一個任務&#xf…

spring-自動加載配置文件\使用屬性文件注入

在上一篇jsf環境搭建的基礎上 , 加入spring框架 , 先看下目錄結構 src/main/resources 這個source folder 放置web項目所需的主要配置,打包時,會自動打包到WEB-INF下 首先看下pom.xml,需要引入一些依賴項: 1 <project xmlns"http://maven.apache.org/POM/4.0.0" x…

pygame碰撞檢測

最近在學Pygame,花一段時間做了一個異常簡陋版的"打磚塊". 這次重點說一下困擾我比較長時間的碰撞檢測(個人太菜..). 按照網上教程比較普遍的方法(也可能是我沒看見別的),碰撞檢測依次計算移動物體與被碰撞物體各個邊之間坐標是否相交.例如下列代碼,檢測小球與窗口的…

2017-5-4 進程

進程&#xff1a;一個應用程序就是一個進程開啟某個進程Process.Start("文件縮寫名");通過絕對路徑開啟某個進程Process p new Process();p.StartInfo new ProcessStartInfo("要打開的程序絕對路徑");p.Start(); 獲取全部開啟的進程&#xff1a;Process.…

很有用的cv牛人的網址和主要貢獻

CV人物1&#xff1a;Jianbo Shi史建波畢業于UC Berkeley&#xff0c;導師是Jitendra Malik。其最有影響力的研究成果&#xff1a;圖像分割。其于2000年在PAMI上多人合作發表"Noramlized cuts and image segmentation"。這是圖像分割領域內最經典的算法。主頁&#xf…

c++分治法求最大最小值實現_程序員:算法導論,分治法、歸并排序,偽代碼和Java實現...

分治法我們首先先介紹分治法。分治法的思想&#xff1a;將原問題分解為幾個規模較小但類似于原問題的子問題&#xff0c;遞歸地求解這些子問題&#xff0c;然后在合并這些子問題的解來解決原問題的解。還是拿撲克牌舉例子&#xff0c;假設桌上有兩堆牌面朝上的牌(牌面朝上&…

菜根譚#82

風來疏竹&#xff0c;風過而竹不留聲&#xff1b;雁度寒潭&#xff0c;雁去而潭不留影&#xff1b;故君子事來而心始現&#xff0c;事去而心隨空。 轉載于:https://www.cnblogs.com/star4knight/p/3604403.html

解讀ASP.NET 5 MVC6系列(9):日志框架

解讀ASP.NET 5 & MVC6系列&#xff08;9&#xff09;&#xff1a;日志框架 原文:解讀ASP.NET 5 & MVC6系列&#xff08;9&#xff09;&#xff1a;日志框架框架介紹 在之前的.NET中&#xff0c;微軟還沒有提供過像樣的日志框架&#xff0c;目前能用的一些框架比如Log4N…

2017第18周四

繼續加班中&#xff0c;很多事不如預期。時間花費很多但效果不成比例。越忙落下的事越多&#xff0c;有時候還需要讓自己靜下來想想&#xff0c;到底有什么是重要的。集中精力放在重要的哪些事&#xff0c;盡自己最大努力即可&#xff0c;盡最大努力即使沒有達到也可以沒有遺憾…

halcon相關的鏈接

論壇、培訓 halcon學習網&#xff1a;http://www.ihalcon.com/鳥叔機器視覺&#xff1a;http://bbs.szvbt.com/forum.php 博客 韓兆新的博客園majunfuLife and Codingzhaojun的博客風韻無聲騎螞蟻上高速的博客小馬_xiaoLV2小新識圖程序園-程序員的世界章柯淵的博客 注&…

[轉]Java8-本地緩存

這里我將會給大家演示用ConcurrentHashMap類和lambda表達式實現一個本地緩存。因為Map有一個新的方法可以在key為Null的時候自動計算一個新的value值。非常完美的實現cache。來看下代碼&#xff1a; public static void main(String[] args) {for (int i 0; i < 10; i)Syst…

python opencv圖像處理程序_Python-OpenCV學習(四):基本圖像處理

轉載請注明出處&#xff1a;danscarlett的博客園 參考資料&#xff1a; 目錄&#xff1a; 讀取 imread 顯示 imshow 存儲 imwrite 縮放 resize 加邊框 copyMakeBorder 裁剪 img[x_start:x_end,y_start:y_end] 1.圖像讀取&#xff1a; cv2.imread(fileName,flagsNone) 函數功能&…

Java進程占用CPU資源過多分析

問題描述&#xff1a; 生產環境下的某臺tomcat7服務器&#xff0c;在剛發布時的時候一切都很正常&#xff0c;在運行一段時間后就出現CPU占用很高的問題&#xff0c;基本上是負載一天比一天高。 問題分析&#xff1a; 1&#xff0c;程序屬于CPU密集型&#xff0c;和開發溝通過&…

分針網——怎么輕松學習JavaScript

js給初學者的印象總是那么的“雜而亂”&#xff0c;相信很多初學者都在找輕松學習js的途徑。我試著總結自己學習多年js的經驗&#xff0c;希望能給后來的學習者探索出一條“輕松學習js之路”。js給人那種感覺的原因多半是因為它如下的特點&#xff1a;A&#xff1a;本身知識很抽…

MATLAB中floor、round、ceil、fix區別

Matlab取整函數有: fix, floor, ceil, round.具體應用方法如下&#xff1a;fix朝零方向取整&#xff0c;如fix(-1.3)-1; fix(1.3)1;floor&#xff0c;顧名思義&#xff0c;就是地板&#xff0c;所以是取比它小的整數&#xff0c;即朝負無窮方向取整&#xff0c;如floor(-1.3)-2…

python時間序列分析航空旅人_用python做時間序列預測一:初識概念

利用時間序列預測方法&#xff0c;我們可以基于歷史的情況來預測未來的情況。比如共享單車每日租車數&#xff0c;食堂每日就餐人數等等&#xff0c;都是基于各自歷史的情況來預測的。 什么是時間序列&#xff1f; 時間序列&#xff0c;是指同一個變量在連續且固定的時間間隔上…

解決mysql不能遠程登入的問題

mysql遠程不能登入&#xff0c;問題就在于當時設置的賬號只限制本地訪問&#xff0c;mysql默認也只是本地訪問。之前的設置&#xff1a; 通過命令行登錄管理MySQL服務器&#xff08;提示輸入密碼時直接回車&#xff09;&#xff1a; mysql> /usr/local/webserver/mysql/bin/…