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

?很早就想總結一下前段時間學習HALCON的心得,但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習,做了許多的練習和實驗,并對基于HDevelop的形狀匹配算法的參數優化進行了研究,寫了一篇《基于HDevelop的形狀匹配算法參數的優化研究》文章,總結了在形狀匹配過程中哪些參數影響到模板的搜索和匹配,又如何來協調這些參數來加快匹配過程,提高匹配的精度,這篇paper放到了中國論文在線了,需要可以去下載。

德國MVTec公司開發的HALCON機器視覺開發軟件,提供了許多的功能,在這里我主要學習和研究了其中的形狀匹配的算法和流程。HDevelop開發環境中提供的匹配的方法主要有三種,即Component-Based、Gray-Value-Based、Shape-Based,分 別是基于組件(或成分、元素)的匹配,基于灰度值的匹配和基于形狀的匹配。這三種匹配的方法各具特點,分別適用于不同的圖像特征,但都有創建模板和尋找模 板的相同過程。這三種方法里面,我主要就第三種-基于形狀的匹配,做了許多的實驗,因此也做了基于形狀匹配的物體識別,基于形狀匹配的視頻對象分割和基于 形狀匹配的視頻對象跟蹤這些研究,從中取得較好的效果,簡化了用其他工具,比如VC++來開發的過程。在VC下往往針對不同的圖像格式,就會弄的很頭疼,更不用說編寫圖像特征提取、模板建立和搜尋模板的代碼呢,我想其中間過程會很復雜,效果也不一定會顯著。下面我就具體地談談基于HALCON的形狀匹配算法的研究和心得總結。

1.?????? Shape-Based matching的基本流程

HALCON提 供的基于形狀匹配的算法主要是針對感興趣的小區域來建立模板,對整個圖像建立模板也可以,但這樣除非是對象在整個圖像中所占比例很大,比如像視頻會議中人 體上半身這樣的圖像,我在后面的視頻對象跟蹤實驗中就是針對整個圖像的,這往往也是要犧牲匹配速度的,這個后面再講。基本流程是這樣的,如下所示:

⑴ 首先確定出ROI的矩形區域,這里只需要確定矩形的左上點和右下點的坐標即可,gen_rectangle1()這個函數就會幫助你生成一個矩形,利用area_center()找到這個矩形的中心;

⑵ 然后需要從圖像中獲取這個矩形區域的圖像,reduce_domain()會得到這個ROI;這之后就可以對這個矩形建立模板,而在建立模板之前,可以先對這個區域進行一些處理,方便以后的建模,比如閾值分割,數學形態學的一些處理等等;

⑶ 接下來就可以利用create_shape_model()來創建模板了,這個函數有許多參數,其中金字塔的級數由Numlevels指定,值越大則找到物體的時間越少,AngleStart和AngleExtent決定可能的旋轉范圍,AngleStep指定角度范圍搜索的步長;這里需要提醒的是,在任何情況下,模板應適合主內存,搜索時間會縮短。對特別大的模板,用Optimization來減少模板點的數量是很有用的;MinConstrast將模板從圖像的噪聲中分離出來,如果灰度值的波動范圍是10,則MinConstrast應當設為10;Metric參數決定模板識別的條件,如果設為’use_polarity’,則圖像中的物體和模板必須有相同的對比度;創建好模板后,這時還需要監視模板,用inspect_shape_model()來完成,它檢查參數的適用性,還能幫助找到合適的參數;另外,還需要獲得這個模板的輪廓,用于后面的匹配,get_shape_model_contours()則會很容易的幫我們找到模板的輪廓;

⑷ 創建好模板后,就可以打開另一幅圖像,來進行模板匹配了。這個過程也就是在新圖像中尋找與模板匹配的圖像部分,這部分的工作就由函數find_shape_model()來承擔了,它也擁有許多的參數,這些參數都影響著尋找模板的速度和精度。這個的功能就是在一幅圖中找出最佳匹配的模板,返回一個模板實例的長、寬和旋轉角度。其中參數SubPixel決定是否精確到亞像素級,設為’interpolation’,則會精確到,這個模式不會占用太多時間,若需要更精確,則可設為’least_square’,’lease_square_high’,但這樣會增加額外的時間,因此,這需要在時間和精度上作個折中,需要和實際聯系起來。比較重要的兩個參數是MinSocre和Greediness,前一個用來分析模板的旋轉對稱和它們之間的相似度,值越大,則越相似,后一個是搜索貪婪度,這個值在很大程度上影響著搜索速度,若為0,則為啟發式搜索,很耗時,若為1,則為不安全搜索,但最快。在大多數情況下,在能夠匹配的情況下,盡可能的增大其值。

⑸ 找到之后,還需要對其進行轉化,使之能夠顯示,這兩個函數vector_angle_to_rigid()和affine_trans_contour_xld()在這里就起這個作用。前一個是從一個點和角度計算一個剛體仿射變換,這個函數從匹配函數的結果中對構造一個剛體仿射變換很有用,把參考圖像變為當前圖像。
其詳細的流程圖和中間參數,如下圖所示:(無法上傳)

2.?????? 基于形狀匹配的參數關系與優化

???? 在HALCON的說明資料里講到了這些參數的作用以及關系,在上面提到的文章中也作了介紹,這里主要是重復說明一下這些參數的作用,再強調一下它們影響匹配速度的程度;

在為了提高速度而設置參數之前,有必要找出那些在所有測試圖像中匹配成功的設置,這時需考慮以下情況:

①???? 必須保證物體在圖像邊緣處截斷,也就是保證輪廓的清晰,這些可以通過形態學的一些方法來處理;

②???? 如果Greediness值設的太高,就找不到其中一些可見物體,這時最后將其設為0來執行完全搜索;

③???? 物體是否有封閉區域,如果要求物體在任何狀態下都能被識別,則應減小MinScore值;

④???? 判斷在金字塔最高級上的匹配是否失敗,可以通過find_shape_model()減小NumLevels值來測試;

⑤???? 物體是否具有較低的對比度,如果要求物體在任何狀態下都能被識別,則應減小MinContrast值;

⑥???? 判斷是否全局地或者局部地轉化對比度極性,如果需要在任何狀態下都能被識別,則應給參數Metric設置一個合適的值;

⑦???? 物體是否與物體的其他實例重疊,如果需要在任何狀態下都能識別物體,則應增加MaxOverlap值;

⑧???? 判斷是否在相同物體上找到多個匹配值,如果物體幾乎是對稱的,則需要控制旋轉范圍;

如何加快搜索匹配,需要在這些參數中進行合理的搭配,有以下方法可以參考:

①?????? 只要匹配成功,則盡可能增加參數MinScore的值;

②?????? 增加Greediness值直到匹配失敗,同時在需要時減小MinScore值;

③?????? 如果有可能,在創建模板時使用一個大的NumLevels,即將圖像多分幾個金字塔級;

④?????? 限定允許的旋轉范圍和大小范圍,在調用find_shape_model()時調整相應的參數;

⑤?????? 盡量限定搜索ROI的區域;

除上面介紹的以外,在保證能夠匹配的情況下,盡可能的增大Greediness的值,因為在后面的實驗中,用模板匹配進行視頻對象跟蹤的過程中,這個值在很大程度上影響到匹配的速度。

當然這些方法都需要跟實際聯系起來,不同圖像在匹配過程中也會有不同的匹配效果,在具體到某些應用,不同的硬件設施也會對這個匹配算法提出新的要求,所以需要不斷地去嘗試。在接下來我會結合自己做的具體的實驗來如何利用HALCON來進行實驗,主要是在視頻對象分割和視頻對象的跟蹤方面。

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

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

相關文章

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

(答案持續更新...) 1.簡述同步和異步的區別js是一門單線程語言,所謂"單線程",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行后面一個任務&#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/…

ASCII碼、HEX、字符、BCD 等等 基礎知識思考

每每遇到這些問題就要想個半天&#xff0c;想不明白還不舒服&#xff0c;今天特別把所想整理下避免以后再次進入思想漩渦&#xff01;&#xff01;&#xff01;計算機存儲和傳輸都是以字節為單位 1 bit 1 二進制數據 1 byte 8 bit 1 字母 1 by…

[Logstash-input-redis] 使用詳解

2019獨角獸企業重金招聘Python工程師標準>>> Redis插件參數配置詳解 工作流程 logstash啟動redis插件redis插件獲取參數&#xff0c;進行校驗工作判斷監聽模式(list,channel,pattern_channel等)&#xff0c;根據不同的監聽模式創建監聽任務創建redis實例&#xff0c…

雅可比旋轉求解對稱二維矩陣的特征值和特征向量

問題描述&#xff1a; 給定一個矩陣&#xff0c;如下&#xff1a; A[a11a21a12a22]A=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}& a_{22} \end{bmatrix} 其中滿足a12a21.也就是所謂的 對稱矩陣。那么如何求解此矩陣的特征值以及特征向量呢&#xff1f;這里我們要用到 …