SIFTによる特徴点検出・特徴量記述の原理と計算方法について解説します。
SIFTとは
SIFT (Scale-Invariant Feature Transform) は、画像の特徴点検出および特徴量を記述するアルゴリズムです。1999年にDavid Loweによって発表され、回転やスケール、照明変化に対してロバストな特徴量を求めることができます。SIFTの主な特徴は以下のとおりです。
- スケール不変性
- 画像のスケールが変わっても特徴点を検出できます。
- 回転不変性
- 画像が回転しても特徴点を検出できます。
- ロバスト性
- 照明変化やノイズに対しても強いです。
特徴点検出・特徴量記述の計算手順
SIFTによる特徴点検出・特徴量記述の計算手順は以下のとおりです。
① 異なるスケールでDoG画像を複数作成し、極値(最大値 or 最小値)を探索します。見つかった極値の画像内での位置$(x, y)$とガウスぼかしのスケール$\sigma$を特徴点の情報として記録します。
なお、DoG画像は以下で計算できます。
$$ DoG(x, y, \sigma) = (G(x, y, k\sigma) – G(x, y, \sigma)) \ast I(x, y) $$
- $DoG(x, y, \sigma)$: DoG (Difference of Gaussians) 画像
- $G(x, y, \sigma)$: 標準偏差 $\sigma $ のガウスぼかし
- $I(x, y)$: 入力画像
- $k$: スケールの係数
② Descripstion特徴量を抽出します。注目する特徴点の位置とサイズに基づいて、画像から128次元のベクトルを抽出し、それを特徴量とします。
③ 特徴点のサイズから所定の範囲を決め、その範囲内の各部の輝度勾配から、特徴店の角度を計算します。具体的には、範囲内の各部の輝度勾配の角度をヒストグラムにして、閾値以上の頻度で最大となる角度を推定します。
④ 特徴のサイズから所定の範囲を決め、4×4のブロックに分割します。各ブロックについて8方向の勾配の強度を算出し、合計して128次元のベクトルとして算出します。
計算例① 異なるスケールでDoG画像を作成し、極値を探索
以下の3×3の入力画像$I$を例に極値を探索します。
$$ I = \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \\ \end{bmatrix} $$
入力画像$I$に対して、異なるスケールでガウスぼかしを適用します。ここでは、スケール1とスケール2でガウシアンフィルタ処理を掛け、ぼかし画像$G_1$と$G_2$を計算すると以下のようになります。
$$ G_1 = \begin{bmatrix} 1.5 & 2 & 1.5 \\ 2 & 3 & 2 \\ 1.5 & 2 & 1.5 \\ \end{bmatrix} $$
$$ G_2 = \begin{bmatrix} 2 & 2.5 & 2 \\ 2.5 & 3 & 2.5 \\ 2 & 2.5 & 2 \\ \end{bmatrix} $$
次に、スケール間の差分(DoG)を計算します。
$$ DoG = G_1 – G_2 = \begin{bmatrix} -0.5 & -0.5 & -0.5 \\ -0.5 & 0 & -0.5 \\ -0.5 & -0.5 & -0.5 \\ \end{bmatrix} $$
このDoG行列の中心要素(0)は、隣接する要素(-0.5)よりも大きいため、局所的な極値となります。極値はスケール2における中心要素(0)で見つかったため、キーポイントの座標は(1, 1)、スケール2です。実際には、他にも異なるスケールでDoG画像を複数作成し、極値を求めます。これにより、スケールに対して不変な特徴点を求めることができます。
関連ページ


コメント