模板匹配中差值的平方和(SSD)與互相關準則的關係
zouxy09@qq.com
http://blog.csdn.net/zouxy09
模板匹配TemplateMatching是在映像中尋找目標的方法之一。原理很簡單,就是在一幅映像中尋找和模板映像(patch)最相似的地區。在OpenCV中有對應的函數可以調用:
void matchTemplate( const Mat& image, const Mat& templ, Mat&result, int method );
該函數的功能為,在輸入源映像Sourceimage(I)中滑動框,尋找各個位置與模板映像Template image(T)的相似性,並將結果儲存在結果矩陣result matrix(R)中。該矩陣的每一個點的亮度表示與模板T的匹配程度。然後可以通過函數minMaxLoc定位矩陣R中的最大值(該函數也可以確定最小值)。那通過什麼去評價兩個映像相似呢?這就存在一個評價準則,也就是參數method,它可以有以下值(匹配的方法):
CV_TM_SQDIFF 平方差匹配法,最好的匹配為0,值越大匹配越差;
CV_TM_SQDIFF_NORMED 歸一化平方差匹配法;
CV_TM_CCORR 相關匹配法,採用乘法操作,數值越大表明匹配越好;
CV_TM_CCORR_NORMED 歸一化相關匹配法;
CV_TM_CCOEFF 相關係數匹配法,最好的匹配為1,-1表示最差的匹配;
CV_TM_CCOEFF_NORMED 歸一化相關係數匹配法;
前面兩種方法為越小的值表示越匹配,後四種方法值越大越匹配。
其中:
CV_TM_SQDIFF為:Sumof Squared Difference (SSD) 差值的平方和:
CV_TM_CCORR 為:Cross Correlation互相關:
SSD可以看成是歐式距離的平方。我們把SSD展開,可以得到:
可以看到,上式的第一項(模板映像T的能量)是一個常數,第三項(映像I局部的能量)也可以近似一個常數,那麼可以看到,剩下的第二項就是和cross correlation一樣的,也就是互相關項目。而SSD是數值越大,相似性越小,cross correlation是數值越大,相似性越大。
參考:
Konstantinos G. Derpanis 等《RelationshipBetween the Sum of Squared Difference (SSD) and Cross Correlation for TemplateMatching》