對於工業應用來說,往往需要用到形狀匹配來達到定位功能,VisionPro的PatMax算法,Halcon的形狀匹配算法都是基於邊緣的模版匹配。halcon中的形狀匹配具有良好的魯棒性,穩定,准確,快速的特點。opencv中雖然也有形狀匹配算法,但是,是基於七階不變矩來計算輪廓相似度,具有旋轉縮放不變性。因此,無法求出目標形狀的旋轉和縮放系數。並且對於形狀變換不大的輪廓也很難區分開,比如圓形和正方形。
下面說下實現帶旋轉和縮放的形狀匹配算法的主要流程
1.獲取模版
(1).對模板圖像進行一系列旋轉,縮放,以及金字塔下采樣,生成一系列不同旋轉角度,縮放系數,以及金字塔層數的模板。
(2).提取模板的邊緣。依據Canny算法的原理,提取邊緣點。
(3).計算邊緣點在的x,y方向的梯度值以及總的梯度值。
(4).保存邊緣點對應的x,y梯度,並將梯度強度歸一化處理以消除光照不均的影響(1除以該點梯度強度,這樣得到的值都是[0,1]區間內的值)並將邊緣點坐標轉換為相對於重心的相對坐標
經過以上操作,我們便建立好了一系列旋轉,縮放,以及不同金字塔層模版。
2,模版匹配
(1).計算搜索圖像邊緣點梯度信息。同獲取模板 (2)(3)。
(2).金字塔下采樣,得到多級金字塔圖像的邊緣點梯度信息,再分別進行(1)。
(3).這步是最重要的,通過 歸一化交叉相關(NCC) 算法計算模板邊緣梯度和目標圖像邊緣梯度向量的相關性。
而且該算法得到的值就是匹配相關性的得分,分值范圍在[0,1],具體實現可以去看代碼。其實就是使用事先生成的一些列模板讓重心在搜索圖像中平移,每移動一步計算一下邊緣點對應的梯度向量相關性。找到評分最高的點就是匹配到形狀的重心。所用模板的旋轉和縮放系數,就對應搜索圖像中目標的旋轉和縮放。其中金字塔用來對算法進行加速。先在頂層金字塔進行快速搜索匹配得到一個匹配位置,然后在下一層金字塔進行匹配的時候就能在該區域的roi內進行搜索,以此類推,直到最底層。通過金字塔可以大大加快匹配速度。在搜索匹配過程中還采用了一種停止條件用來提高速度,如果計算邊緣點梯度相似性過程中得分過低,就可以跳過后續邊緣點的計算,直接移動到下一個位置。
本文轉自:https://blog.csdn.net/the_future_way/article/details/110448796