物体検出

MatchTemplate

Comments from the Wiki

MatchTemplate(image, templ, result, method) → None

テンプレートと,それと重なる領域の画像とを比較します.

パラメタ:
  • image (CvArr) – テンプレートとの比較を行う対象画像.8ビットあるいは32ビット,浮動小数点型.
  • templ (CvArr) – テンプレート.比較対象となる画像以下のサイズで,同じデータ型でなければいけません.
  • result (CvArr) – 比較結果のマップ.シングルチャンネル,32ビット,浮動小数点型. imageW \times H で, templw \times h の場合, result は必ず (W-w+1) \times (H-h+1) となります.
  • method (int) – テンプレートと画像領域とを比較する方法(以下を参照してください).

この関数は, CalcBackProjectPatch と類似した関数です.画像 image 全体に対してテンプレート templ をずらしながら,それとサイズ w \times h の重なり領域とを指定された方法で比較し,その結果を result に格納します.ここでは,それぞれの比較手法の式を示します( IimageTtemplateRresult を表します).総和演算は,テンプレートと重なり領域の,どちらか片方あるいは両方に対して行われます: 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'} (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}}

  • method=CV_TM_CCORR

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

  • method=CV_TM_CCORR_NORMED

    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}}

  • method=CV_TM_CCOEFF

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

    ここで,

    \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'} (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} }

比較計算が終わると,関数 MinMaxLoc を用いて最も良いマッチング結果を,最小値( CV_TM_SQDIFF )や最大値( CV_TM_CCORR )として検出できます.カラー画像の場合,分母や分子のそれぞれの総和演算は,全てのチャンネルに対して行われます(それぞれチャンネルで,それぞれの平均値が用いられます).

目次

このページ