Python版OpenCVでSIFT特徴量を計算する方法をソースコード付きで解説します。
SIFTとは
SIFT(Scale-Invariant Feature Transform)は、画像処理やコンピュータビジョン分野で有名な特徴点検出アルゴリズムの1つです。画像中の「特徴的な点(キー・ポイント)」を検出し、それをスケールや回転に対して不変な特徴量として記述します。例えば、同じ物体が拡大縮小・回転・一部隠れていても、SIFTはそれを見つけ出すことができます。
SIFT特徴量の計算手順
- スケール空間の極大値検出
- 画像を複数のスケールにぼかしてから差分(DoG: Difference of Gaussians)をとり、特徴点候補を探します。
- キー・ポイントの精緻化
- ノイズや端にある不安定な点を排除して、安定した点だけを残します。
- 方向付け
- 各特徴点に対して主方向を計算し、回転に対する不変性を持たせます。
- 特徴記述子の生成
- 周囲の勾配情報を128次元のベクトルに変換し、特徴点の“指紋”のような記述子を作成します。
OpenCVでの実装方法
OpenCV 4.4以降では、SIFTはxfeatures2d
から移動し、標準でcv2.SIFT_create()
として使えるようになりました。
– 特許が切れたため、商用利用も可能になっています。
サンプルコード①
OpenCVのcv2.SIFT_create()
で実装した例です。
実行結果
関連ページ

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
コメント