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

來源:互聯網
上載者:User

 很早就想總結一下前段時間學習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來進行實驗,主要是在視頻對象分割和視頻對象的跟蹤方面。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.