1. 程式人生 > >圖片相似度計算-模板匹配

圖片相似度計算-模板匹配

什麼是模板匹配?
  所謂模板匹配就是給出一個模板圖片和一個搜尋圖片,在搜尋圖片中找到與模板圖片最為相似的部分。
怎麼實現?
  簡單來說,就是讓模板圖片在搜尋圖片上滑動,以畫素點為單位,計算每一個位置上的相似度,最終得到相似度最高的畫素點的位置,以該畫素點為原定,模板圖片為大小,對應在搜尋圖片上的位置即為匹配度最高的部分。
有哪些匹配演算法?
  在opencv中 可以通過函式matchTemplate實現模板匹配,同時有六種相關的匹配演算法
   T (

x , y ) T(x,y) 用來表示我們的模板。 I ( x ,
y ) I(x,y)
是我們的目標影象 , R ( x , y )
R(x,y)
是用來描述相似度的函式。

  1. 平方差匹配 method=CV_TM_SQDIFF
     這類方法利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大.
          R ( x , y ) = x , y ( T ( x , y ) I ( x + x , y + y ) ) 2 R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2

  2. 標準平方差匹配 method=CV_TM_SQDIFF_NORMED
      這個方法其實和平方差匹配演算法是類似的。只不過對影象和模板進行了標準化操作。
          R ( x , y ) = x , y ( T ( x , y ) I ( x + x , y + y ) ) 2 x , y T ( x , y ) 2 x , y I ( x + x , y + y ) 2 R(x,y)= \frac{\sum_{x',y'} (T(x',y')-I(x+x',y+y'))^2}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}

  3. 相關匹配 method=CV_TM_CCORR
     這類方法採用模板和影象間的乘法操作,所以較大的數表示匹配程度較高,0標識最壞的匹配效果.
          R ( x , y ) = x , y ( T ( x , y ) I ( x + x , y + y ) ) R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y'))

  4. 標準相關匹配 method=CV_TM_CCORR_NORMED
     這個方法和 標準化差值平方和匹配 類似,都是去除了亮度線性變化對相似度計算的影響。可以保證影象和模板同時變亮或變暗k倍時結果不變。
          R ( x , y ) = x , y ( T ( x , y ) I ( x + x , y + y ) ) x , y T ( x , y ) 2 x , y I ( x + x , y + y ) 2 R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I'(x+x',y+y'))}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}

  5. 相關匹配 method=CV_TM_CCOEFF
      這類方法將模版對其均值的相對值與影象對其均值的相關值進行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關性(隨機序列).
          R ( x , y ) = x , y ( T ( x , y ) I ( x + x , y + y ) ) R(x,y)= \sum _{x',y'} (T'(x',y') \cdot I(x+x',y+y'))