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