物体検出 ============ .. highlight:: cpp .. index:: matchTemplate cv::matchTemplate ----------------- `id=0.49940758481 Comments from the Wiki `__ .. cfunction:: void matchTemplate( const Mat\& image, const Mat\& templ, Mat\& result, int method ) テンプレートと,それに重なった画像領域とを比較します. :param image: テンプレートの探索対象となる画像.8ビットまたは32ビットの浮動小数点型. :param templ: 探索されるテンプレート.探索対象となる画像以下のサイズで,同じデータ型でなければいけません. :param result: 比較結果のマップ.シングルチャンネル,32ビット,浮動小数点型. ``image`` が :math:`W \times H` で, ``templ`` が :math:`w \times h` とすると ``result`` は :math:`(W-w+1) \times (H-h+1)` となります. :param method: 比較手法の指定(以下の説明を参照してください). この関数は ``templ`` を ``image`` 全体に対してスライドさせ,それと重なる :math:`w \times h` の領域とを指定された方法で比較し,その結果を ``result`` に保存します.以下に,この関数で指定可能な比較手法を表す式を示します( :math:`I` は画像を, :math:`T` はテンプレートを, :math:`R` は結果をそれぞれ表します.総和計算は,以下のようにテンプレートと(または)画像領域に対して行われます: :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} } となります. この関数による比較の後,関数 :func:`minMaxLoc` を用いて,大域的最小値( ``CV_TM_SQDIFF`` の場合)あるいは大域的最大値( ``CV_TM_CCORR`` や ``CV_TM_CCOEFF`` の場合)を検出することでベストマッチを得ることができます.カラー画像の場合,分母・分子それぞれの総和計算はすべてのチャンネルについて行われます(各チャンネルで用いる平均値はそれぞれ異なります).つまり,この関数はカラーテンプレートやカラー画像をとることができます.その場合も結果はシングルチャンネル画像のままで,簡単に分析できます.