[scikit-image] 44. テンプレートマッチングによる画像識別(skimage.feature match_template)

python

はじめに

本記事では、scikit-imageライブラリの「match_template」関数を使用したテンプレートマッチングについて解説します。テンプレートマッチングとは、特定のパターン(テンプレート画像)と一致する部分を大きな画像内から検出する手法です。画像認識や物体検出など様々な用途に活用できる基本的かつ重要な画像処理技術です。

コード

解説

モジュールのインポート

画像データの読み込み

ストロンギロゴナムの種を昨年蒔いた株の2019年9月時点の画像を使用します。画像はグレースケールに変換し、特定の位置から苗の部分を切り取ります。

テンプレートマッチング

画像内からテンプレート画像(sabo)に該当する部分を検出します。その結果は相関係数の画像として出力され、相関係数が最も高い箇所がテンプレートとの一致度が高いことを示します。np.argmax(result)で最大値の位置を特定し、unravel_index関数を使ってresult.shapeにおける具体的な座標を求めます。

画像の表示

plt.Rectangle((x, y), wsabo, hsabo, edgecolor=’green’, facecolor=’none’)を使用して、テンプレートと一致する座標を中心に、テンプレートと同じサイズの四角形を描画します。また、ax3.plot(x, y, ‘o’, markeredgecolor=’green’, markerfacecolor=’none’, markersize=10)によって、相関係数が最も高い部分に円マーカーを表示しています。なお、他の苗も似た特徴を持つため、相関係数の値は全体的に高くなっています。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

scikit-imageのmatch_template関数を使用することで、大きな画像内から特定のテンプレート画像と一致する部分を効率的に検出できます。この手法は単純でありながら効果的で、特に対象物の形状が既知である場合に有用です。しかし、回転や拡大縮小などの変形に弱いという制限もあります。適切な閾値設定と前処理を組み合わせることで、実用的な画像認識システムの構築に貢献できるでしょう。

参考

Template Matching — skimage 0.25.2 documentation
skimage.feature — skimage 0.25.2 documentation
numpy.unravel_index — NumPy v1.10 Manual

コメント