OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
物体検出

詳細説明

列挙型

enum  cv::TemplateMatchModes {
  cv::TM_SQDIFF = 0 ,
  cv::TM_SQDIFF_NORMED = 1 ,
  cv::TM_CCORR = 2 ,
  cv::TM_CCORR_NORMED = 3 ,
  cv::TM_CCOEFF = 4 ,
  cv::TM_CCOEFF_NORMED = 5
}
 テンプレートマッチング演算の種類 続き...
 

関数

void cv::matchTemplate (InputArray image, InputArray templ, OutputArray result, int method, InputArray mask=noArray())
 テンプレートを重なり合う画像領域と比較する。
 

列挙型詳解

◆ TemplateMatchModes

#include <opencv2/imgproc.hpp>

テンプレートマッチング演算の種類

列挙値
TM_SQDIFF 
Python: cv.TM_SQDIFF

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

マスクあり:

\[R(x,y)= \sum _{x',y'} \left( (T(x',y')-I(x+x',y+y')) \cdot M(x',y') \right)^2\]

TM_SQDIFF_NORMED 
Python: 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}}\]

マスクあり:

\[R(x,y)= \frac{\sum _{x',y'} \left( (T(x',y')-I(x+x',y+y')) \cdot M(x',y') \right)^2}{\sqrt{\sum_{x',y'} \left( T(x',y') \cdot M(x',y') \right)^2 \cdot \sum_{x',y'} \left( I(x+x',y+y') \cdot M(x',y') \right)^2}}\]

TM_CCORR 
Python: cv.TM_CCORR

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

マスクあり:

\[R(x,y)= \sum _{x',y'} (T(x',y') \cdot I(x+x',y+y') \cdot M(x',y') ^2)\]

TM_CCORR_NORMED 
Python: 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}}\]

マスクあり:

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

TM_CCOEFF 
Python: 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}\]

マスクあり:

\[\begin{array}{l} T'(x',y')=M(x',y') \cdot \left( T(x',y') - \frac{1}{\sum _{x'',y''} M(x'',y'')} \cdot \sum _{x'',y''} (T(x'',y'') \cdot M(x'',y'')) \right) \\ I'(x+x',y+y')=M(x',y') \cdot \left( I(x+x',y+y') - \frac{1}{\sum _{x'',y''} M(x'',y'')} \cdot \sum _{x'',y''} (I(x+x'',y+y'') \cdot M(x'',y'')) \right) \end{array} \]

TM_CCOEFF_NORMED 
Python: 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} }\]

関数詳解

◆ matchTemplate()

void cv::matchTemplate ( InputArray image,
InputArray templ,
OutputArray result,
int method,
InputArray mask = noArray() )
Python:
cv.matchTemplate(image, templ, method[, result[, mask]]) -> result

#include <opencv2/imgproc.hpp>

テンプレートを重ね合わせた画像領域と照合する。

この関数は image 上をスライドしながら、サイズ \(w \times h\) の重なり合うパッチを指定したメソッドで templ と比較し、比較結果を result に格納する。TemplateMatchModes に利用可能な比較メソッドの計算式を示す(\(I\) は画像、\(T\) はテンプレート、\(R\) は結果、\(M\) は省略可能なマスクを表す)。総和はテンプレートおよび画像パッチ全体にわたって計算される: \(x' = 0...w-1, y' = 0...h-1\)

関数が比較を終えると、最良の一致は minMaxLoc 関数を使って、大域的な最小値(TM_SQDIFF を使用した場合)または最大値(TM_CCORR または TM_CCOEFF を使用した場合)として求められる。カラー画像の場合、分子のテンプレートの総和と分母の各総和はすべてのチャンネルにわたって計算され、各チャンネルごとに別々の平均値が使われる。すなわち、この関数はカラーのテンプレートとカラー画像を扱える。結果は依然としてシングルチャンネル画像となり、解析が容易である。

引数
image探索を実行する画像。8ビットまたは32ビット浮動小数点でなければならない。
templ探索されるテンプレート。元画像より大きくてはならず、同じデータ型を持たなければならない。
result比較結果のマップ。シングルチャンネルの32ビット浮動小数点でなければならない。image が \(W \times H\) で templ が \(w \times h\) のとき、result は \((W-w+1) \times (H-h+1)\) となる。
method比較方法を指定する引数。TemplateMatchModes を参照
mask省略可能なマスク。templ と同じサイズでなければならない。テンプレートと同じチャンネル数を持つか、あるいは1チャンネルだけ(その場合はすべてのテンプレートと画像のチャンネルに使われる)でなければならない。データ型が CV_8U の場合、マスクはバイナリマスクとして解釈される。すなわち、マスクが非ゼロの要素のみが使われ、実際のマスク値に関わらず変更されずに保持される(重みは1に等しい)。データ型 CV_32F の場合、マスク値は重みとして使われる。正確な式は TemplateMatchModes に記載されている。