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,使用建立模板時金字塔的層數。
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值;
⑧ 判斷是否在相同物體上找到多個匹配值,如果物體幾乎是對稱的,則需要控制旋轉範圍;
如何加快搜尋匹配,需要在這些引數中進行合理的搭配,有以下方法可以參考:
halcon的模版匹配概述
新增模版匹配 1.基於形狀的模板匹配 應用場合 定位物件內部的灰度值可以有變化,但物件輪廓一定要清晰平滑。1.建立形狀模型 create shape model 2.尋找形狀模型 find shpae model 3.釋放形狀模型 clear shape model 2.可縮放形狀的模板匹配 應用場...
Halcon學習 模版匹配之二
find shape model image 搜尋影象 modelid 模板控制代碼 anglestart 搜尋時的起始角度 angleextent 搜尋時的角度範圍,必須與建立模板時的有交集 minscore 最小匹配值,輸出的 匹配的得分score 大於該值 nummatches 定義要輸出的 ...
模板匹配 HALCON
使用範圍 gray value based matching 要求照明不變的,內部灰度值和模板相同,應用極少 correlation based matching 不變性體現在 散焦 輕微的形變,線性光源,可以很好地處理紋理。僅僅可以處理灰度影象,不支援雜點 遮擋 縮放 非線性照明變換 以及多通道影...