一:什么是模板匹配?
在OpenCV教程中這樣解釋模板匹配:
模板匹配是一項在一幅圖像中尋找與另一幅模板圖像最匹配(相似)部分的技術.
這里說的模板是我們已知的小圖像,模板匹配就是在一副大圖像中搜尋目標。模板就是我們已知的在圖中要找的目標,且該目標同模板有相同的尺寸、方向和圖像,通過一定的算法可以在圖中找到目標,確定其坐標位置。
二:模板匹配的原理
用通俗的語言來解釋模板的匹配原理:
在要檢測的圖像上,從左到右,從上到下遍歷這一幅圖像,從上到下計算模板與重疊子圖像的像素匹配度,如果匹配的程度越大,這說明相同的可能性越大。
實現過程:
①:準備兩幅圖像:
- 圖像 (I): 在這幅圖像里,我們希望找到一塊和模板匹配的區域
- 模板 (T): 將和原圖像比照的圖像塊
②:為了確定匹配區域, 我們滑動模板圖像和原圖像進行比較
③:使用模板遍歷圖像
通過滑動, 從左往右,從上往下. 在每一個位置, 都進行一次度量計算來表明模板和原圖像的特定區域的相似性。
對于 T 覆蓋在 I 上的每個位置,你把度量值保存到結果圖像矩陣(R) 中. 在R中的每個位置 (x,y) 都包含匹配度量值:
上圖是使用標準相關匹配方法處理后的結果圖像 R . 最白的位置代表最高的匹配. 紅色橢圓框住的位置很可能是結果圖像矩陣中的最大數值, 所以這個區域被認為是匹配的.
三:使用OpenCV實現
我們調用OpenCV中的函數 matchTemplate 實現了模板匹配算法:
①:平方差匹配 method=CV_TM_SQDIFF
這類方法利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大.
②:標準平方差匹配 method=CV_TM_SQDIFF_NORMED
③:相關匹配 method=CV_TM_CCORR
這類方法采用模板和圖像間的乘法操作,所以較大的數表示匹配程度較高,0標識最壞的匹配效果.
④:標準相關匹配 method=CV_TM_CCORR_NORMED
⑤:相關匹配 method=CV_TM_CCOEFF
這類方法將模版對其均值的相對值與圖像對其均值的相關值進行匹配,1表示完美匹配,-1表示匹配很差,0表示沒有任何相關性(隨機序列).
在這里
⑥:標準相關匹配 method=CV_TM_CCOEFF_NORMED
代碼實現:
在這次匹配中我們主要使用了matchTemplate和minMaxLoc這兩個函數:
matchTemplate:函數的完整表達:
matchTemplate(image, templ, method[, result[, mask]])
Image:參數表示待搜索源圖像,必須是8位整數或32位浮點。
Templ:參數表示模板圖像,必須不大于源圖像并具有相同的數據類型。
Method:參數表示計算匹配程度的方法。
Result:參數表示匹配結果圖像,必須是單通道32位浮點。如果image的尺寸為W x H,templ的尺寸為w x h,則result的尺寸為(W-w+1)x(H-h+1)。
minMaxLoc函數的完整表達:
minMaxLoc(src[, mask],minVal, maxVal, minLoc, maxLoc)
src參數表示輸入單通道圖像。
mask參數表示用于選擇子數組的可選掩碼。
minVal參數表示返回的最小值,如果不需要,則使用NULL。
maxVal參數表示返回的最大值,如果不需要,則使用NULL。
minLoc參數表示返回的最小位置的指針(在2D情況下); 如果不需要,則使用NULL。
maxLoc參數表示返回的最大位置的指針(在2D情況下); 如果不需要,則使用NULL。
-
圖像處理
+關注
關注
27文章
1289瀏覽量
56722 -
算法
+關注
關注
23文章
4607瀏覽量
92837 -
OpenCV
+關注
關注
31文章
634瀏覽量
41337 -
模板匹配
+關注
關注
0文章
12瀏覽量
7825
發布評論請先 登錄
相關推薦
評論