關注「深度學習衝鴨」,一起學習一起衝鴨!
設為星標,第一時間獲取更多乾貨
連結:https://zhuanlan.zhihu.com/p/110425960後臺回復西瓜手推獲得西瓜書手推筆記
後臺回復CV入坑必備獲得CV入坑學習資料
在這一篇文章中,我們將會了解數字圖像處理中重要的組成部分之一的模板匹配。
在OpenCV教程中這樣解釋模板匹配:
模板匹配是一項在一幅圖像中尋找與另一幅模板圖像最匹配(相似)部分的技術.
這裡說的模板是我們已知的小圖像,模板匹配就是在一副大圖像中搜尋目標。模板就是我們已知的在圖中要找的目標,且該目標同模板有相同的尺寸、方向和圖像,通過一定的算法可以在圖中找到目標,確定其坐標位置。
用通俗的語言來解釋模板的匹配原理:
在要檢測的圖像上,從左到右,從上到下遍歷這一幅圖像,從上到下計算模板與重疊子圖像的像素匹配度,如果匹配的程度越大,這說明相同的可能性越大。
實現過程:
①:準備兩幅圖像:
圖像 (I): 在這幅圖像裡,我們希望找到一塊和模板匹配的區域
模板 (T): 將和原圖像比照的圖像塊
②:為了確定匹配區域, 我們滑動模板圖像和原圖像進行比較
③:使用模板遍歷圖像
通過滑動, 從左往右,從上往下. 在每一個位置, 都進行一次度量計算來表明模板和原圖像的特定區域的相似性。
對於 T 覆蓋在 I 上的每個位置,你把度量值保存到結果圖像矩陣(R) 中. 在R中的每個位置 (x,y) 都包含匹配度量值:
上圖是使用標準相關匹配方法處理後的結果圖像 R . 最白的位置代表最高的匹配. 紅色橢圓框住的位置很可能是結果圖像矩陣中的最大數值, 所以這個區域被認為是匹配的.
我們調用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。
效果如下:
【1】:OpenCV documentation
(http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html)
模板匹配 - OpenCV 2.3.2 documentation(http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html)!重磅!【深度學習衝鴨技術交流二群】微信交流群已成立
額外贈送福利資源!南京大學《模式識別》PPT,2020最新版《神經網絡與深度學習》中文版pdf,李航老師《統計學習方法》(第2版)課件分享,周志華《機器學習》西瓜書手推筆記(V2.8)
獲取方式:進入群後點開群公告即可領取下載連結