1.1K Views
December 03, 25
スライド概要
大学のゼミで作成したSIFT特徴量の講義スライドです。
Qiitaで紹介するために公開します。
SIFT 特徴量
ここに3組、計6つの画像がある。
人間にはすぐに見分けがつく。
でもコンピュータには難しい 回転してる 明暗に差がある スケールが 異なる 微妙に 視差がある
そこでSIFT特徴量!
目次 1. SIFTとは 2. SIFT特徴量の使い所 3. SIFT特徴量の優秀な点 4. SIFT特徴量の微妙な点 5. SIFT特徴量をPythonで求める 6. 仕組みの話 1. アルゴリズムの概観 2. 各ステップの詳細 3. SIFT特徴量の堅牢性がどのように生み出されているか
SIFTとは 画像のスケールや回転、明るさの変化に影響されずに、画像中 の特徴点を検出・記述したい時に用いるアルゴリズムである。 SIFT 特徴点:画像内で際立った特徴を持つ点のこと(e.g. 物体の角,エッジの交点…) 特 徴 量 行 列
SIFT特徴量の使い所 物体の認識と検出が主な用途 • 棚に並んだ特定の商品を認識 • 工場のラインで流れてくる製品の中から、特定の部品を検出 • 野生動物の個体識別 • MRIやCTスキャンなどの医用画像から病変部を識別 <その他> パノラマ写真、3次元モデル復元、自己位置推定(SLAM) https://g.co/gemini/share/c1d8088d8b8d
SIFT特徴量の優秀な点(1/2) 様々な堅牢性 & 高い精度 & 学習不要で手軽に使える スケール不変性 対象の大きさが変化しても特徴量は変化しない 回転不変性 対象が回転しても特徴量は変化しない 照明変化への堅牢性 明るさやコントラストが変化しても特徴量は変化 しない ノイズ・位置ずれへ 多少のノイズや位置ずれがあっても特徴量は変化 の堅牢性 しない
SIFT特徴量の優秀な点(2/2) 様々な堅牢性 & 高い精度 & 学習不要で手軽に使える 人為的手法と比 較して… 機械的手法と比 較して… • (発見した特徴点の数) × 128の2次元配列を出力。 これは他の手法と比べて多くの情報を含む。 • 事前学習が不要。 • CPUで十分に動作する。 ただし、深層学習モデルなどに精度は劣る。
SIFT特徴量の微妙な点 計算コストが高い エッジ/モバイルデバイスでの実行やリアルタイ ム性の要求されるアプリケーションでの活用は難 照明変化への堅牢性 極端な輝度変化や非線形な照明変化(例:強いハ の限界 イライトや影)に対しては精度が低下する アフィン変換への限 剪断や射影変換への不変性は持たない 定的な不変性 特徴量ベクトルの次 メモリ消費量が多い 元が高い マッチング処理に時間がかかる 画像出典: https://kaibutsusyain.com/how-to-perform-projectivetransformation-with-python-and-opencv/ https://gimp-howtouse.net/toolbox/%E5%89%AA%E6%96%AD%E5%A4%89%E5%BD%A2%E3%81%AE%E 4%BD%BF%E3%81%84%E6%96%B9/#google_vignette
SIFT特徴量をPythonで求める OpenCVを使うだけで簡単に使える!
ここからは仕組みの話 1. アルゴリズムの概観 2. 各ステップの詳細 3. SIFT特徴量の堅牢性がどのように生み出されているか
SIFT アルゴリズムの概観(1/4 ) 特徴点の検出 特徴量の記述 SIFTは大まかに特徴点の検出と特徴量の記述の2ステップ SIFT 特徴点 の検出 各特徴点の 特徴量を記述 特徴点:画像内で際立った特徴を持つ点のこと(e.g. 物体の角,エッジの交点…)
検出 候補点の探索 SIFT アルゴリズムの概観(2/4) 候補点の絞り込み 記述 特徴点検出は候補点の探索と候補点の絞り込みの2ステップ 特徴点の検出 候補点の 探索 候補点の 絞り込み 最も効率よく情報を取れる範囲(=スケール)を算出
検出 候補点の探索 SIFT アルゴリズムの概観(3/4) 候補点の絞り込み 記述 方向の検出 勾配情報の集計 特徴量記述も方向の検出と勾配情報の集計の2ステップ 特徴量の記述 方向の 検出 方向を軸に 勾配情報の集計
アルゴリズムの概観(4/4) SIFTは大まかに2ステップ、細かく見ると4ステップ 特徴点 の検出 候補点の探索 SIFT 候補点の絞り込み 特徴量 の記述 方向の検出 勾配情報の集計
ステップ1 - 候補点の探索(1/4) いろんな具合にぼやかした画像同士の差(=DoG画像)を作る DoG画像にはエッジなどの特徴的な部分が強調して表示される 元画像 https://www.slideshare.net/slideshow/sift-32258833/32258833
ステップ1 - 候補点の探索(2/4) DoG画像から極値を検出し、候補点とする。 特徴的な部分の中でも特に目立つ部分がわかる。 https://www.slideshare.net/slideshow/sift-32258833/32258833
ステップ1 - 候補点の探索(3/4 ) その特徴を拾うために見るべき範囲(スケール)もわかる。 https://www.slideshare.net/slideshow/sift32258833/32258833#20 https://qiita.com/tatsuya11bbs/items/225634d352de09206a8f
ステップ1 - 候補点の探索(4/4 ) スケール不変性を獲得! https://www.slideshare.net/slideshow/sift-32258833/32258833
前提知識 - 2次元画像における勾配とは 画像内の各画素における輝度(明るさ)の変化の度合いを表すもの 元画像(白黒4×4) 横軸に関する勾配 (=X軸に関する微分) 0 0 0 0 0 127 128 0 0 255 0 0 0 0 0 0 0 0 127 255 0 255 0 0 0 0 255 255 0 0 127 255 0 0 128 0 0 0 0 0 0 0 0 0 0 0 255 255 縦軸に関する勾配 (=Y軸に関する微分)
前提知識 - 2次元画像における勾配とは 画像内の各画素における輝度(明るさ)の変化の度合いを表すもの 元画像(白黒4×4) 横軸に関する勾配 (=X軸に関する微分) 0 0 0 0 0 127 128 0 0 255 0 0 0 0 0 0 0 0 127 255 0 255 0 0 0 0 255 255 0 0 127 255 0 0 128 0 0 0 0 0 0 0 0 0 0 0 255 255 縦軸に関する勾配 (=Y軸に関する微分)
ステップ2 - 候補点の絞り込み 候補点はエッジや低コントラストな点も含むので、 ヘッセ行列を使って除外する。 ヘッセ行列の固有値は曲率が最大になる方向と、曲率が最小になる 方向における曲率の大きさを表す。 https://www.slideshare.net/slideshow/sift-32258833/32258833
ステップ3 – 方向の検出 特徴点の周囲のピクセルの勾配と重みを集計、 最も大きい勾配をその特徴点の”方向”とする。 https://www.slideshare.net/slideshow/sift-32258833/32258833
ステップ4 – 勾配情報の集計 方向を基準として特徴点の周囲の勾配情報を集計 16エリア,8方向、合計128の勾配の大きさを正規化してまとめる。 特徴点数×128 https://www.slideshare.net/slideshow/sift-32258833/32258833
堅牢性がどのように生み出されているか 全てのステップが密に連携し、様々な堅牢性を実現! 堅牢性 スケール不変性 ステップ 要因 番号 1 候補点の探索時に適切なスケールを探索 回転不変性 3,4 方向を軸として特徴量を記述 照明変化への堅 牢性 ノイズ・位置ず れへの堅牢性 4 勾配の集計結果を正規化する 2,4 ノイズの影響を受けやすい候補点を除去 勾配の集計を小領域ごとに大らかに実行
ありがとうございました
余談 • SIFTは最近特許が切れて使いやすくなった。 • SIFTは「Scale-Invariant Feature Transform」の略。 日本語に訳すと「スケール不変特徴量変換」。 と言うことは「SIFT特徴量」=「スケール不変特徴量変換特徴 量」。頭痛が痛い。 • 「DoG画像」は計算量の多い「LoGフィルタ」の結果を近似し ているらしい。 LoGフィルタはノイズを低減しつつ輪郭を抽出できるらしい。