OpenCV 4.5.3(日本語機械翻訳)
列挙型 | 関数
Imgproc_object

列挙型

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
}
テンプレートマッチング操作のタイプ[【詳解】(英語]

関数

CV_EXPORTS_W void cv::matchTemplate (InputArray image, InputArray templ, OutputArray result, int method, InputArray mask=noArray())
オーバーラップした画像領域に対してテンプレートを比較します。[【詳解】(英語]

詳解

列挙型詳解

TemplateMatchModes

テンプレートマッチング操作のタイプ

列挙値
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 with mask: 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

\[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

\[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

\[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

\[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()

CV_EXPORTS_W void cv::matchTemplate ( InputArray image,
InputArray templ,
OutputArray result,
int method,
InputArray mask = noArray()
)

オーバーラップした画像領域に対してテンプレートを比較します。

この関数は,画像をスライドさせ,サイズの異なるオーバーラップしたパッチを,指定された方法でテンプレートと比較します。$w \times h$templ に対して,指定された方法で比較を行い,比較結果を result に格納します.TemplateMatchModesには,利用可能な比較手法の式が記述されています ($I$は,画像を表します.$T$template を表します.$R$result を表します.$M$オプションのマスク)。和算は,テンプレートや画像パッチに対して行われます.$x' = 0...w-1, y' = 0...h-1$

この関数が比較を終えた後,ベストマッチは,グローバルな最小値(TM_SQDIFFが利用された場合)または最大値(TM_CCORRまたはTM_CCOEFFが利用された場合)に,関数minMaxLoc関数を使います.カラー画像の場合,テンプレートの分子の和と,分母の各和は,すべてのチャンネルに対して行われ,各チャンネルに対して別々の平均値が用いられます.つまり,この関数は,カラーテンプレートとカラー画像を受け取ることができます.結果は,やはりシングルチャンネルの画像となり,解析が容易になります.

引数
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 の場合,マスクはバイナリマスクとして解釈されます.つまり,マスクが0ではない要素のみが利用され,実際のマスク値(重みは1に等しい)とは無関係に変更されません.また,#CV_32F のデータでは,マスクの値が重みとして用いられます。正確な計算式は以下に記載されています。TemplateMatchModes.