Halcon:模版匹配

一:函數介紹

1.創建模板

create_shape_model(Template?: :?NumLevels,?AngleStart,?AngleExtent,?AngleStep,?Optimization,?Metric,?Contrast,?MinContrast?:?ModelID)

Template?:模板圖像

NumLevels:圖像金字塔級數,該值越小,模板匹配耗時越長,可設置自動-‘Auto’可使用get_shape_model_params來獲取模板所有參數,包括級數。

AngleStart:模板起始角度。

AngleExtent:模板角度幅度,若目標有旋轉,模板需做不同角度。

AngleStep:角度步長,可設置自動-‘Auto’。

注:若選擇預生產模式,不同角度的模板在創建模板時生成。否則在匹配find_shape_model時生成,這樣無疑會耗費更長的模板匹配時間。

Optimization:模板點儲存模式,設為’none’時,全點儲存,若選擇點較少時,匹配分值可能較低。當設為’auto’時,點數自動減少。當模板較小時,較少點數并不會降低模板匹配時間,因為將有更多的可能的實例必須被檢查。所以當模板較大時,可較少點數,用于提速。

Metric:圖像與模板中對比度差異不大時,選擇'use_polarity';設為'ignore_global_polarity',只有對比度相反的對象才會被發現,且模板與噪聲區分開來。在可提取完整模板信息的前提下,設置偏大,可減少噪聲提取。

ModelID:輸出創建模板ID。

?

2.查找模板

find_shape_model(Image?: :?ModelID,?AngleStart,?AngleExtent,?MinScore,?NumMatches,?MaxOverlap,?SubPixel,?NumLevels,?Greediness?:?Row,?Column,?Angle,?Score)

Image:搜索圖像

ModelID:模板ID

AngleStart:搜索起始角度

AngleExtent:搜索角度幅度。匹配時,從圖像Image中搜索設定角度范圍內的模板

MinScore:最小匹配分值,大于該分值才可被搜索到.參數MinScore定義模板匹配時至少有個什么樣的質量系數才算是在圖像中找到模板。MinScore設置的越大,搜索的就越快。如果模板在圖像中沒有被遮擋,MinScore可以設置為0.8這么高甚至0.9。

NumMatches:匹配個數。若滿足匹配分值的結果個數大于該值NumMatches,則返回質量系數最好的結果;若滿足匹配分值的結果個數小于等于該值NumMatches,則返回的所有滿足匹配分值的結果;設為0時,返回所有滿足分值的結果。

MaxOverlap:如果模型具有對稱性,會在搜索圖像的同一位置和不同角度上找到多個與目標匹配的區域。參數MaxOverlap是0到1之間的,定義了找到的兩個目標區域最多重疊的系數,以便于把他們作為兩個不同的目標區域分別返回。如果找到的兩個目標區域彼此重疊并且大于MaxOverlap,僅僅返回效果最好的一個。重疊的計算方法是基于找到的目標區域的任意方向的最小外接矩形(看smallest_rectangle2)。如果MaxOverlap=0,?找到的目標區域不能存在重疊,?如果MaxOverla p=1,所有找到的目標區域都要返回。

SubPixel:精度控制,該參數的選擇影響定位結果參數(位置,角度,縮放比例)。精度越高速度越慢。None(不使用亞像素-100%)-'interpolation'(差值亞像素-100%-0.079)-'least_squares_high'(最小二乘亞像素-120%-0.025)-'least_squares_high'(最小二乘亞像素-131%-0.014)- 'least_squares_very_high'(最小二乘亞像素-142%-0.013),【方法(解釋-耗時-角度誤差)】

NumLevels:搜索時使用金字塔層數.如果NumLevels=0,使用創建模板時金字塔的層數。

Greediness:用于控制定位加速。該值越大,速度越快,找丟模板的幾率也越大。推薦值0.7-0.9.

?

二、Shape-Based matching的基本流程

???HALCON提供的基于形狀匹配的算法主要是針對感興趣的小區域來建立模板,對整個圖像建立模板也可以,但這樣除非是對象在整個圖像中所占比例很大,比如像視頻會議中人體上半身這樣的圖像,我在后面的視頻對象跟蹤實驗中就是針對整個圖像的,這往往也是要犧牲匹配速度的,這個后面再講。基本流程是這樣的,如下所示:
????1. 首先確定出ROI的矩形區域,這里只需要確定矩形的左上點和右下點的坐標即可,gen_rectangle1()這個函數就會幫助你生成一個矩形,利用area_center()找到這個矩形的中心;?
????2. 然后需要從圖像中獲取這個矩形區域的圖像,reduce_domain()會得到這個ROI;這之后就可以對這個矩形建立模板,而在建立模板之前,可以先對這個區域進行一些處理,方便以后的建模,比如閾值分割,數學形態學的一些處理等等;

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


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


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

?

三、基于形狀匹配的參數關系與優化? ? ? ? ? ? ? ? ? ? ? ?

在HALCON的說明資料里講到了這些參數的作用以及關系,在上面提到的文章中也作了介紹,這里主要是重復說明一下這些參數的作用,再強調一下它們影響匹配速度的程度;
? ? 在為了提高速度而設置參數之前,有必要找出那些在所有測試圖像中匹配成功的設置,這時需考慮以下情況:
????① 必須保證物體在圖像邊緣處截斷,也就是保證輪廓的清晰,這些可以通過形態學的一些方法來處理;
????②?如果Greediness值設的太高,就找不到其中一些可見物體,這時最后將其設為0來執行完全搜索;
????③ 物體是否有封閉區域,如果要求物體在任何狀態下都能被識別,則應減小MinScore值;
? ? ④?判斷在金字塔最高級上的匹配是否失敗,可以通過find_shape_model()減小NumLevels值來測試;
????⑤?物體是否具有較低的對比度,如果要求物體在任何狀態下都能被識別,則應減小MinContrast值;
? ? ⑥?判斷是否全局地或者局部地轉化對比度極性,如果需要在任何狀態下都能被識別,則應給參數Metric設置一個合適的值;
? ? ⑦?物體是否與物體的其他實例重疊,如果需要在任何狀態下都能識別物體,則應增加MaxOverlap值;
? ? ⑧?判斷是否在相同物體上找到多個匹配值,如果物體幾乎是對稱的,則需要控制旋轉范圍;
?

如何加快搜索匹配,需要在這些參數中進行合理的搭配,有以下方法可以參考:
? ? ?①??只要匹配成功,則盡可能增加參數MinScore的值;
? ? ?②??增加Greediness值直到匹配失敗,同時在需要時減小MinScore值;
? ? ?③??如果有可能,在創建模板時使用一個大的NumLevels,即將圖像多分幾個金字塔級;
? ? ?④??限定允許的旋轉范圍和大小范圍,在調用find_shape_model()時調整相應的參數;
? ? ?⑤??盡量限定搜索ROI的區域;
????除上面介紹的以外,在保證能夠匹配的情況下,盡可能的增大Greediness的值,因為在后面的實驗中,用模板匹配進行視頻對象跟蹤的過程中,這個值在很大程度上影響到匹配的速度。
????當然這些方法都需要跟實際聯系起來,不同圖像在匹配過程中也會有不同的匹配效果,在具體到某些應用,不同的硬件設施也會對這個匹配算法提出新的要求,所以需要不斷地去嘗試。

?

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

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

相關文章

java基礎英語---第二十六天

Terminate [ t?:mineit ] 結束 Instantiation [in,stn?iei??n] 實例化 Instance declared [diklε?d] 公然的 Access [ ?kses ] 進入,接近,入口,通道 Accessible [?kses?bl] 可進入的 invoke [inv?uk] 調用 board [b?:d] 木板,甲板 MainBoard card [kɑ:d] …

ASP.NET Core部署到Linux服務器(CentOS7 x64)

前言 本文主要講解如何一步步將ASP.NET Core網站發布到Linux服務器,文中會講解具體步驟及需要避免的各種問題。 目錄 一、環境介紹 二、創建及發布ASP.NET Core網站項目 三、服務器軟件安裝(.NET Core SDK) 四、在服務器上部署ASP.NET Core網…

redux進一步優化

1. 將原來的 mapStateToDispatch 中的函數提取出來,放在組件中, 如原來的: function mapStateToProps(state, ownProps) {return {hasMore:state.getIn([tabs,hasMore]),} } function mapDispatchToProps(dispatch) {return {addTabList:(i…

C# : 調用C++動態庫(dll)

在實際軟件開發過程中,由于公司使用了多種語言開發,在C#中可能需要實現某個功能,而該功能可能用其他語言已經實現了,那么我們可以調用其他語言寫好的模塊嗎?還有就是,由于C#開發好的項目,我們可…

Python3.5以上版本lxml導入etree報錯Unresolved reference

Web抓取Web站點使用HTML描述,這意味著每個web頁面是一個結構化的文檔。有時從中 獲取數據同時保持它的結構是有用的。web站點不總是以容易處理的格式, 如 csv 或者 json 提供它們的數據。 這正是web抓取出場的時機。Web抓取是使用計算機程序將web頁面數據…

linux設置history歷史記錄

#說明export HISTSIZE1000 #設置歷史記錄顯示1000行export HISTTIMEFORMAT%F %T #設置歷史記錄格式 999 2017-08-15 10:58:32 #修改vim /etc/profilesed -i "s/\(HISTSIZE\).*/\11000/" /etc/profilesed -i "/HISTSIZE/aexport HISTTIMEFORMAT%F %T " /et…

STL-容器庫101--array【C11】

1. 原型 C11提供 template < class T, size_t N > class array;T&#xff1a; 元素類型&#xff0c;以 array::value_type 作為別名使用&#xff1b;N&#xff1a; array中元素大小&#xff1b; 固定size的序列容器&#xff1b;初始化時&#xff0c; array對象不保存任何…

C#:向C++封送結構體數組

在使用第三方的非托管API時&#xff0c;我們經常會遇到參數為指針或指針的指針這種情況&#xff0c; 一般我們會用IntPtr指向我們需要傳遞的參數地址&#xff1b; 但是當遇到這種一個導出函數時,我們如何正確的使用IntPtr呢&#xff0c; extern "C" __declspec(dll…

其它綜合-CentOS7 忘記root密碼

CentOS7 忘記root密碼 長時間不用的 CentOS 機器再次開機的時候忽然忘記了密碼&#xff0c;總不能就重裝一臺吧&#xff0c;還有好多服務在機器上&#xff0c;于是決定重置root的密碼。   如果是已經開啟的機器&#xff0c;需要進行關閉&#xff0c;重新啟動。在啟動選擇內核…

left join on and 與 left join on where的區別

數據庫在通過連接兩張或多張表來返回記錄時&#xff0c;都會生成一張中間的臨時表&#xff0c;然后再將這張臨時表返回給用戶。 在使用left jion時&#xff0c;on和where條件的區別如下&#xff1a; 1、 on條件是在生成臨時表時使用的條件&#xff0c;它不管on中的條件是否為真…

spring boot高性能實現二維碼掃碼登錄(中)——Redis版

前言 本打算用CountDownLatch來實現&#xff0c;但有個問題我沒有考慮&#xff0c;就是當用戶APP沒有掃二維碼的時候&#xff0c;線程會阻塞5分鐘&#xff0c;這反而造成性能的下降。好吧&#xff0c;現在回歸傳統方式&#xff1a;前端ajax每隔1秒或2秒發一次請求&#xff0c;去…

C# :socket 通訊基礎使用實例

們在講解Socket編程前&#xff0c;先看幾個和Socket編程緊密相關的概念&#xff1a; TCP/IP層次模型當然這里我們只討論重要的四層 01&#xff0c;應用層(Application)&#xff1a;應用層是個很廣泛的概念&#xff0c;有一些基本相同的系統級TCP/IP應用以及應用協議&#xff0…

IBM發表論文:可能已找到處理量子計算退相干的方法

在《自然》雜志最近發表的一篇論文中&#xff0c;IBM和其他機構的研究人員設計了兩種量子算法&#xff0c;利用變分量子電路和量子核估計器來訓練一種支持向量機分類器。這兩種算法背后的關鍵思想是使用量子狀態空間作為特征空間表示&#xff0c;有效地構建映射&#xff0c;從原…

PHP + NGINX 控制視頻文件播放,并防止文件下載

最簡單的方法是使用NGINX的 internal 功能 server { listen 80; server_name www.xxx.com;  location / { index index.php index.html index.htm; root /xxx; if (!-e $request_filename) { rewrite ^/index.php(.*)$ /index.php?s$…

可視化調試工具

rosrun rqt_console rqt_console # 查看日志消息&#xff0c;可filter、highlight指定級別。 rosrun rqt_logger_level rqt_logger_level # 可設在日志記錄器的嚴重級別 rosrun rqt_topic rqt_topic # 顯示topic調試信息 rosrun rqt_publisher rqt_publisher # 在界面中管理ro…

C#:委托基礎與事件

通過以下思維導圖&#xff0c;學習委托的基本概念&#xff0c;后面著重講解委托的運用&#xff0c;希望通過最簡單的方式收獲更多的知識。 1.委托的各種寫法 1、委托 委托名new 委托&#xff08;會調用的方法名); 委托名&#xff08;參數&#xff09;; 2、委托 委托名 會調用…

Git Bash關鍵命令

1.默認目錄是C:\Users\用戶名 2.切換目錄&#xff1a;$cd c:\\windows 3.切換到上級目錄&#xff1a;cd ..&#xff0c;中間有空格 4.列出某目錄所有文件&#xff0c;相當于DOS下的dir&#xff1a;ls c:\\windows 5.查看配置信息&#xff1a;git config --list 以下是顯示信息 …

C#:invoke 與 BeginInvoke使用區別

invoke和begininvoke 區別 一直對invoke和begininvoke的使用和概念比較混亂&#xff0c;這兩天看了些資料&#xff0c;對這兩個的用法和原理有了些新的認識和理解。 首先說下&#xff0c;invoke和begininvoke的使用有兩種情況&#xff1a; 1. control中的invoke、begininvoke。…

Django基本命令

Django基本命令 1.創建一個Django 項目 django_admin.py startproject mysite當前目錄下會生成mysite的工程&#xff0c;目錄結構如下&#xff1a; manage.py ----- Django項目里面的工具&#xff0c;通過它可以調用django shell和數據庫等。settings.py ---- 包含了項目的默認…

Git忽略規則.gitignore梳理

對于經常使用Git的朋友來說&#xff0c;.gitignore配置一定不會陌生。廢話不說多了&#xff0c;接下來就來說說這個.gitignore的使用。首先要強調一點&#xff0c;這個文件的完整文件名就是".gitignore"&#xff0c;注意最前面有個“.”。 一般來說每個Git項目中都需…