大きな画像の一部が切り出された複数の画像から、元の画像内での座標を取得する機会がありました。本記事では、そのための方法についての備忘録をまとめます。
OpenCV の SIFT (Scale-Invariant Feature Transform) を用いて、テンプレート画像と元の画像を特徴点マッチングし、アフィン変換を推定して座標を取得する方法を紹介します。
必要なライブラリ#
Pythonコード#
以下のコードでは、指定した大きな画像 (image_path) に対して、テンプレート画像 (templates_dir 内の PNG 画像) を SIFT でマッチングし、元の画像内の座標を取得します。
まとめ#
本記事では、SIFT を用いた特徴点マッチング によって、部分画像が元画像のどこに位置するかを推定し、アフィン変換 で位置を特定する方法を紹介しました。
✅ 特徴点の抽出には SIFT を使用(OpenCV 4.4 以降は自由に使用可能)
✅ BFMatcher で特徴点をマッチングし、RANSAC でノイズを除去
✅ アフィン変換で座標を推定し、矩形で元画像に描画
✅ 結果画像を保存し、どの部分画像がどこにあるかを可視化
この方法を活用すれば、古地図の部分画像の位置特定、OCR の領域検出、画像比較などにも応用できます。
📌 今後の課題
以上、不完全な点もあるかもしれませんが、参考になりましたら幸いです。 📝