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

2021-08-11 13:53:53 字數 3468 閱讀 1989

德國

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

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

1.shape based matching的基本流程 首先確定出roi的矩形區域,這裡只需要確定矩形的左上點和右下點的座標即可,gen rectangle1 這個函式就會幫助你生成乙個矩形,利用area center 找到這個矩形的中心 然後需要從影象中獲取這個矩形區域的影象,reduce dom...

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

基於halcon的模板匹配方法總結 1.shape based matching的基本流程 首先確定出roi的矩形區域,這裡只需要確定矩形的左上點和右下點的座標即可,gen rectangle1 這個函式就會幫助你生成乙個矩形,利用area center 找到這個矩形的中心 然後需要從影象中獲取這個...

Halcon中模板匹配方法的總結歸納

基於元件的模板匹配 應用場合 元件匹配是形狀匹配的擴充套件,但不支援大小縮放匹配,一般用於多個物件 工件 定位的場合。演算法步驟 1.獲取元件模型裡的初始控制項 gen initial components 引數 modelimage input 初始元件的 initialcomponents ou...