模板匹配(match template)是一種用於尋找與模板圖像(補丁)匹配(相似)的圖像區域的技術。
需要兩張圖片:
原始圖片: 希望在其中找到與模板圖片匹配的位置
模板圖片: 用來與原始圖片匹配的圖片(較小張圖片),可以視為樣本
如下圖:
左圖為原始圖片,中間為模板,右圖為匹配結果,紅色方框為與模板相匹配的區域
匹配流程為將模板掃過整張圖片(Sliding Window),從左至右、從上至下,對每一個位置計算指標,之後用於判斷與其區域相符的分數
最後可得到位置匹配圖,如圖:
紅色圓圈為與之罪為匹配的位置
之後可以找出圖片中分數最高的值(或最小值,根據計算方式判斷),即為原始圖片中與模板最相似的位置
OpenCV 中模板比對函式:
matchTemplate(InputArray image, InputArray templ, OutputArray result, int method)
image: 輸入圖片
templ: 輸入模板
result: 輸出模板相符分數圖
method: 比對方法
其中OpenCV 提供6種方法:
R表示結果,T表示模板,I表示原始圖片
CV_TM_SQDIFF:
將圖片直接與模板相減之平方差,與原始圖片差值最小的位置即為結果,但容易受到光線影響,匹配結果較不穩定
CV_TM_SQDIFF_NORMED:
正規化後的平方差,可以適應原始圖片及模板同時提高亮度的狀況,但只有其中之一的圖片光線調整,依然會產生問題
CV_TM_CCORR:
相關性係數(correlation),分數越高越相似
CV_TM_CCORR_NORMED:
正規化相關性係數(correlation),分數越高越相似
CV_TM_CCOEFF:
相關性係數,但去除本身圖片亮度,只保留圖片分布,可以適應圖片及模板亮度變化,分數越高越相似
CV_TM_CCOEFF_NORMED:
正規化相關性係數,且除本身圖片亮度,只保留圖片分布,分數越高越相似