ComputerVisionまとめの部屋

役に立った情報や調査結果をまとめています

SIFT(Scale-Invariant Feature Transform)

SIFTは、スケール不変性・回転不変性・ノイズおよび照明変化への不変性をもつ特徴点および特徴量検出方法である。

LoGオペレータ

SIFTを説明するために、まずLoGオペレータを紹介する。
前回のHarrisコーナー検出法は、コーナー部分のみしか注目しないため、それがどの程度の大きさをもつのかが分からず、スケール不変性がなかった。コーナーがどのような大きさをもつか、という適当な「スケール値」を求める方法のひとつが、以下に示すLoGオペレータを用いる方法である。

LoGオペレータは、Gussianのxおよびyに関する2階微分を足し合わせたもの(ラプラシアン:Ixx + Iyy)で、その関数型を見ると中心にピークがあり、その周辺で一度凹んだ関数型になっている。画像に対してLoGオペレータをかけると、エッジが輝度値の大きい(または小さい)部分として検出できる。ただしこのままでは、ノイズを拾いやすい・エッジとの区別がつかない、という問題点があり、後述するようにコントラストや主曲率による特徴点の絞込みをSIFTでは行っている。 

f:id:berobemin2:20151013170220p:plain

コーナーのスケール情報を得る方法のひとつに、Gaussianの分散値σを変化させてLoGオペレータをかけた画像同士の差分をとる方法がある。σを徐々に変化させて差分をとると、あるσでLoGオペレータの計算結果が極大値をとる場合がある。これは画像を分散値σの程度でぼかしたときに「見えなく」なってしまうコーナーがあると解釈でき、「σのスケール値をもつ特徴量」としてスケール情報を抽出できる。

DoGオペレータ 

LoGは計算コストがかかるという問題がある。それはexpに含まれるx^2+y^2を計算するため、xとyを独立に計算できないためである。そのため、それを解消したDoG(Difference-of-Gaussian)オペレータが提案された。

DoGはGaussianのラプラシアンを計算する代わりに、分散値σを変えたときの差分画像を計算する。拡散方程式によってラプラシアンがσの微分で近似できることが示せ、差分画像の輝度分布から高速に特徴点を検出することができる。

ヘッセ行列

 SIFTはこのDoGの極大値として特徴点を求めているが、この方法ではDoG値が小さい点や、エッジとコーナーとの区別できないため、SIFTではさらに主曲率による絞込みを行う。曲率は輝度の変位に関する2階微分で表されるが、それを2次元平面の曲率に一般化したものがヘッセ行列(Hessian)である。

ヘッセ行列の固有値をλ1, λ2とすると、画像上のエッジはλ1が大きくλ2が小さい点として検出され、コーナーはλ1とλ2がともに大きくなる点として検出される。このような点を求める方法としてHarrisオペレータと同様のものを考えると、Tr(H)^2/det(H)を計算してこれが大きい点を抽出することでコーナーを検出できる。第1固有値と第2固有値の比率をγとしてλ1=γλ2とすると、γがしきい値よりも大きい点を特徴点の候補として絞り込む。

また2階微分の極大値を求めるときに、3次元パラボラ(放物面)フィッティングを行い頂点をサブピクセル精度で求めて精度を上げている。 

DoG出力値が小さい場合、ノイズの影響を受けやすいため特徴点候補から削除する。DoG値はコントラストが低い領域では小さくなるため、このような点を削除する。

オリエンテーションを求めて規格化 

さらに検出された特徴点を比較する要素である特徴量のひとつとして、オリエンテーションを求める。オリエンテーションは特徴点における方向を表し、求められたオリエンテーションで向きの正規化を行うことで、回転不変な特徴量を計算することができる。

オリエンテーションの計算方法は、以下のようになっている

  1. まず各画素においてHaar型フィルタ(x方向とy方向の1階微分を計算)を用いて、比率または差の自乗和から「勾配方向θ」と「勾配強度m(u,v)」を求める
  2. 勾配方向は輝度勾配の大きくなる方向をヒストグラムしきい値以上の点として求め、それが複数ある場合は複数の方向を勾配方向として割り当てる