【Python/OpenCV】SIFT特徴量の計算とマッチング

Python版OpenCVでSIFT特徴量を計算する方法をソースコード付きで解説します。

SIFTとは

SIFT(Scale-Invariant Feature Transform)は、画像処理やコンピュータビジョン分野で有名な特徴点検出アルゴリズムの1つです。画像中の「特徴的な点(キー・ポイント)」を検出し、それをスケールや回転に対して不変な特徴量として記述します。例えば、同じ物体が拡大縮小・回転・一部隠れていても、SIFTはそれを見つけ出すことができます。

SIFT特徴量の計算手順

  1. スケール空間の極大値検出
    • 画像を複数のスケールにぼかしてから差分(DoG: Difference of Gaussians)をとり、特徴点候補を探します。
  2. キー・ポイントの精緻化
    • ノイズや端にある不安定な点を排除して、安定した点だけを残します。
  3. 方向付け
    • 各特徴点に対して主方向を計算し、回転に対する不変性を持たせます。
  4. 特徴記述子の生成
    • 周囲の勾配情報を128次元のベクトルに変換し、特徴点の“指紋”のような記述子を作成します。

OpenCVでの実装方法

OpenCV 4.4以降では、SIFTはxfeatures2dから移動し、標準でcv2.SIFT_create()として使えるようになりました。
– 特許が切れたため、商用利用も可能になっています。

サンプルコード①

OpenCVのcv2.SIFT_create()で実装した例です。


実行結果

関連ページ

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
この記事を書いた人
西住技研

Python使用歴10年以上。研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
OpenCV

コメント