【Python/OpenCV】テンプレートマッチングの実装(SSD、SAD、NCC、ZNCC)

PythonとOpenCVで画像のテンプレートマッチング(SSD)を行う方法をソースコード付きで解説します。

## 【Python】テンプレートマッチング(SSD)

テンプレートマッチング(Template matching)とは、入力画像中からテンプレート画像(部分画像)と最も類似する箇所を探索する処理です。
今回は、SSDを類似評価値とし、以下の2通りの方法でテンプレートマッチングの処理を実装しました。

1 OpenCVの「cv2.matchTemplate」で実装
2 NumPyライブラリで実装
■SSD
SSD(Sum of Absolute Difference)では、「画素値の差分の二乗値の和」で類似度を評価します。
この場合も値が最小になる場所が類似度が最も高いことになります。
テンプレートマッチングの原理・計算式・例題(SAD, SSD, NCC)
この記事では、テンプレートマッチングによる探索の原理や特徴、計算式・例題についてまとめました。

書式(OpenCV)

match = cv2.matchTemplate(gray, temp, cv2.TM_SQDIFF)
min_value, max_value, pt_min, pt_max = cv2.minMaxLoc(match)
パラメータ 説明
gray 入力画像(グレースケール)
temp テンプレート画像(グレースケール)
pt_min スコアが最小の走査位置(最も類似する点)
pt_max スコアが最大の走査位置(最も類似しない点)

サンプルプログラムのソースコードです。

方法①


方法②


サンプルプログラムの実行結果です。

■左から入力画像(input.jpg)、テンプレート画像(temp.jpg)、出力画像(result.jpg)

お借りした画像:プロ生ちゃん(暮井 慧)

## 【Python】テンプレートマッチング(SAD)

SAD(Sum of Absolute Difference)では、「画素値の差分の絶対値の和」で類似度を評価します。
この場合も値が最小になる場所が類似度が最も高いことになります。

動画解説

今回は、SADを評価値とし、以下の2通りの方法でテンプレートマッチングの処理を実装しました。

1 OpenCVの「cv2.matchTemplate」で実装
2 NumPyライブラリで実装

書式(OpenCV)

match = cv2.matchTemplate(gray, temp, cv2.TM_SQDIFF_NORMED)
min_value, max_value, pt_min, pt_max = cv2.minMaxLoc(match)
パラメータ 説明
gray 入力画像(グレースケール)
temp テンプレート画像(グレースケール)
pt_min スコアが最小の走査位置(最も類似する点)
pt_max スコアが最大の走査位置(最も類似しない点)

サンプルプログラムのソースコードです。

方法①


方法②


サンプルプログラムの実行結果です。

■左から入力画像(input.jpg)、テンプレート画像(temp.jpg)、出力画像(result.jpg)

お借りした画像:プロ生ちゃん(暮井 慧)

【Python/OpenCV】テンプレートマッチング(SAD)の実装例
PythonとOpenCVで画像のテンプレートマッチング(類似度尺度SAD)を行う方法をソースコード付きで解説します。

## 【Python】テンプレートマッチング(NCC)

NCC(Normalized Cross Correlation)では、「正規化相互相関」で類似度を評価します。
NCCの値は-1.0~1.0に収まり、最大値である1.0に近いほど類似度が高くなります。
https://algorithm.joho.info/image-processing/template-matching-sad-ssd-ncc/

動画解説

今回は、NCCを評価値とし、以下の2通りの方法でテンプレートマッチングの処理を実装しました。

①OpenCVの「cv2.matchTemplate」で実装
②NumPyライブラリで実装

書式(OpenCV)

match = cv2.matchTemplate(gray, temp,cv2.TM_CCORR_NORMED)
min_value, max_value, pt_min, pt_max = cv2.minMaxLoc(match)
パラメータ 説明
gray 入力画像(グレースケール)
temp テンプレート画像(グレースケール)
pt_min スコアが最小の走査位置(最も類似しない点)
pt_max スコアが最大の走査位置(最も類似する点)

サンプルプログラムのソースコードです。

方法①


方法②


サンプルプログラムの実行結果です。

■左から入力画像(input.jpg)、テンプレート画像(temp.jpg)、出力画像(result.jpg)

お借りした画像:プロ生ちゃん(暮井 慧)

【Python/OpenCV】テンプレートマッチング(NCC)の実装例
PythonとOpenCVで画像のテンプレートマッチング(類似度尺度NCC)を行う方法をソースコード付きで解説します。

## 【Python】テンプレートマッチング(ZNCC)

ZNCC(Zero-mean Normalized Cross Correlation)では、「ゼロ平均正規化相互相関」で類似度を評価します。
ZNCCの値は-1.0~1.0に収まり、最大値である1.0に近いほど類似度が高くなります。

今回は、ZNCCを評価値とし、以下の2通りの方法でテンプレートマッチングの処理を実装しました。

動画解説

①NumPyライブラリで実装
②OpenCVの「cv2.matchTemplate」で実装

書式(OpenCV)

match = cv2.matchTemplate(gray, temp, cv2.TM_CCOEFF_NORMED)
min_value, max_value, pt_min, pt_max = cv2.minMaxLoc(match)
パラメータ 説明
gray 入力画像(グレースケール)
temp テンプレート画像(グレースケール)
pt_min スコアが最小の走査位置(最も類似しない点)
pt_max スコアが最大の走査位置(最も類似する点)

サンプルプログラムのソースコードです。

方法①


方法②


サンプルプログラムの実行結果です。

■左から入力画像(input.jpg)、テンプレート画像(temp.jpg)、出力画像(result.jpg)

お借りした画像:プロ生ちゃん(暮井 慧)

【Python/OpenCV】テンプレートマッチング(ZNCC)の実装例
PythonとOpenCVで画像のテンプレートマッチング(類似度尺度ZNCC)を行う方法をソースコード付きで解説します。
【Python版OpenCV入門】使い方とサンプル集
OpenCV(Intel Open Source Computer Vision Library)とは、インテル社で開発された画像処理・画像認識用のオープンソースライブラリです。Python/C++/Java/Android/Node.js...

コメント

タイトルとURLをコピーしました