微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

openCV matchTemplate函数不同参数对应的相似性度量

Compares a template against overlapped image regions.

C++:  void  matchTemplate (InputArray  image,InputArray  templ,OutputArray  result,int  method )
Python:   cv2. matchTemplate (image,templ,method [,result ] ) → result
C:  void  cvMatchTemplate (const CvArr*  image,const CvArr*  templ,CvArr*  result,int  method )
Python:   cv. MatchTemplate (image,result,method ) → None
Parameters:
  • image – Image where the search is running. It must be 8-bit or 32-bit floating-point.
  • templ – Searched template. It must be not greater than the source image and have the same data type.
  • result – Map of comparison results. It must be single-channel 32-bit floating-point. If imageis 

    W \times H

     and templ is 

    w \times h

     ,then result is 

    (W-w+1) \times (H-h+1)

     .
  • method – Parameter specifying the comparison method (see below).

The function slides through image ,compares the overlapped patches of size 

w \times h

 against templ using the specified method and stores the comparison results in result . Here are the formulae for the available comparison methods ( 

I

denotes image

T

 template

R

 result ). The summation is done over template and/or the image patch: 

x' = 0...w-1,y' = 0...h-1

 * method=CV_TM_SQDIFF

R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2

  • method=CV_TM_SQDIFF_norMED

    R(x,y)= \frac{\sum_{x',y+y'))^2}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}

  • method=CV_TM_CCORR

    R(x,y')  \cdot I(x+x',y+y'))

  • method=CV_TM_CCORR_norMED

    R(x,y') \cdot I(x+x',y+y'))}{\sqrt{\sum_{x',y+y')^2}}

  • method=CV_TM_CCOEFF

    R(x,y'} (T'(x',y')  \cdot I'(x+x',y+y'))

    where

    \begin{array}{l} T'(x',y')=T(x',y') - 1/(w  \cdot h)  \cdot \sum _{x'',y''} T(x'',y'') \\ I'(x+x',y+y')=I(x+x',y+y') - 1/(w  \cdot h)  \cdot \sum _{x'',y''} I(x+x'',y+y'') \end{array}

  • method=CV_TM_CCOEFF_norMED

    R(x,y)= \frac{ \sum_{x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y'} I'(x+x',y+y')^2} }

After the function finishes the comparison,the best matches can be found as global minimums (when CV_TM_SQDIFF was used) or maximums (when CV_TM_CCORR or CV_TM_CCOEFF was used) using the minMaxLoc() function. In case of a color image,template summation in the numerator and each sum in the denominator is done over all of the channels and separate mean values are used for each channel. That is,the function can take a color template and a color image. The result will still be a single-channel image,which is easier to analyze.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐