一:函數介紹
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的值,因為在后面的實驗中,用模板匹配進行視頻對象跟蹤的過程中,這個值在很大程度上影響到匹配的速度。
????當然這些方法都需要跟實際聯系起來,不同圖像在匹配過程中也會有不同的匹配效果,在具體到某些應用,不同的硬件設施也會對這個匹配算法提出新的要求,所以需要不斷地去嘗試。
?