物体検出 ============ .. highlight:: python .. index:: MatchTemplate .. _MatchTemplate: MatchTemplate ------------- `id=0.682071907973 Comments from the Wiki `__ .. function:: MatchTemplate(image,templ,result,method)-> None テンプレートと,それと重なる領域の画像とを比較します. :param image: テンプレートとの比較を行う対象画像.8ビットあるいは32ビット,浮動小数点型. :type image: :class:`CvArr` :param templ: テンプレート.比較対象となる画像以下のサイズで,同じデータ型でなければいけません. :type templ: :class:`CvArr` :param result: 比較結果のマップ.シングルチャンネル,32ビット,浮動小数点型. ``image`` が :math:`W \times H` で, ``templ`` が :math:`w \times h` の場合, ``result`` は必ず :math:`(W-w+1) \times (H-h+1)` となります. :type result: :class:`CvArr` :param method: テンプレートと画像領域とを比較する方法(以下を参照してください). :type method: int この関数は, :ref:`CalcBackProjectPatch` と類似した関数です.画像 ``image`` 全体に対してテンプレート ``templ`` をずらしながら,それとサイズ :math:`w \times h` の重なり領域とを指定された方法で比較し,その結果を ``result`` に格納します.ここでは,それぞれの比較手法の式を示します( :math:`I` は ``image`` , :math:`T` は ``template`` , :math:`R` は ``result`` を表します).総和演算は,テンプレートと重なり領域の,どちらか片方あるいは両方に対して行われます: :math:`x' = 0...w-1, y' = 0...h-1` * method=CV\_TM\_SQDIFF .. math:: R(x,y)= \sum _{x',y'} (T(x',y')-I(x+x',y+y'))^2 * method=CV\_TM\_SQDIFF\_NORMED .. math:: 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 .. math:: R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y')) * method=CV\_TM\_CCORR\_NORMED .. math:: 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 .. math:: R(x,y)= \sum _{x',y'} (T'(x',y') \cdot I(x+x',y+y')) ここで, .. math:: \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 .. math:: 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} } 比較計算が終わると,関数 :ref:`MinMaxLoc` を用いて最も良いマッチング結果を,最小値( ``CV_TM_SQDIFF`` )や最大値( ``CV_TM_CCORR`` )として検出できます.カラー画像の場合,分母や分子のそれぞれの総和演算は,全てのチャンネルに対して行われます(それぞれチャンネルで,それぞれの平均値が用いられます).