OpenCV-SIFTアルゴリズムの詳細説明

シリーズ記事ディレクトリ



導入

SIFT アルゴリズムは、画像のマッチング問題を解決するためのもので、マッチングを達成するために、画像のサイズや回転の変化に強い特徴を画像から抽出する必要があります。このアルゴリズムのインスピレーションも非常に直感的で、人間の目は 2 つの画像が一致するかどうかを観察するときに、典型的な領域 (特徴点の部分) に気づきます。この特徴点領域の抽出プロセスを実現し、特徴点の一致を抽出することができれば、領域を記述することで実現できます。その後、問題は次のようなサブ問題に発展します。

特徴点としてはどのような点を選べばよいのでしょうか?: 人間の目は画像内の高周波領域に対してより敏感であるため、検出には急激に変化するエッジまたはコーナーを選択する必要があります。ここではコーナーを検出することを選択します。(ここでの直感はあまり明確ではありませんが、マッチングのために特徴点を抽出できそうな気がします。エッジは複数の点で構成されていることがよくあります。) 選択した特徴点をスケールに対して不変にするにはどうすればよいですか
? : ガウス ピラミッドを使用して、さまざまなサイズの画像バリアントを取得し、スケール不変の特徴がこれらのバリアントから取得されます。
選択した特徴点にスケーリング不変性を持たせるにはどうすればよいですか? : ガウス ピラミッドを使用して、さまざまなサイズの画像バリアントを取得し、各バリアントから特徴点を抽出して元のサイズに戻して、さまざまなサイズの画像の特徴点を取得します。
選択した特徴点を回転に対して不変にするにはどうすればよいですか? : 特徴点領域を主方向に回転する設定を続けて、回転不変性を取得します。
特徴点領域をどのように記述するか? : HOG オペレーターと同様に、特徴点領域の各方向のグラデーション割り当てを使用します。

上記の質問はすべて、SIFT アルゴリズムの非常に興味深いトリックを使用しています。後で 1 つずつ紹介します。

1. ガウスピラミッド

ガウス ピラミッドを導入する目的は、画像のスケーリングとスケール変更における特徴抽出の問題を解決することであると冒頭で紹介されました。達成するためにサンプリング (ピラミッド -> グループ); 2. 人が物体を見ると、近くの領域では鮮明で、遠くではぼやけており、画像のガウス平滑化を実現できます (ガウス -> レイヤー); 特定の導出用、他のブログを参照してください: Opencv 学習メモ
( 6) 画像ピラミッド
SIFT では、ガウス ピラミッドのレイヤー数とグループ数は次の設定になっています。

計算数: O = [ log 2 min ( M , N ) ] − 3 O=[log_2min(M,N)]-3 O=[log2 min(M,N)]−3

層数: S = n + 3 S=n+3 S=n+3

グループ数の設定は、SIFT アルゴリズムを提案した元の論文で与えられた経験値に基づいており、理論的には O ≤ [ log 2 min ( M , N ) ] O\leq[log_2min(M, N)] O≤ [log2 min(M,N)] で十分であり、レイヤー数の設定には理論的根拠があります. ここで、nnn は特徴点を抽出したい画像レイヤーの数です。ガウス ピラミッド、ガウス差分ピラミッド (DOG、ガウスの差分) を取得するには層間差分を計算する必要があります。ガウス ピラミッドの層数は DOG 層の数より 1 つ多くする必要があり、固有値はスケール レベル、つまり上下の隣接するレイヤー間で必要です。DOG レイヤーの数が 2 より多い場合、フィーチャ レイヤーの数が 2 つ多い場合、S = n + 3 S=n+3 S =n+3 は必須です。

添付: SIFT のガウス ピラミッドについて補足する必要がある知識がいくつかあります。

SIFT アルゴリズムの S は、従来の画像サイズとは異なり、継続的に変化するパラメーターである「スケール」の概念を指します。ガウス ピラミッドの ​​σ \sigma σ は、そのようなスケール空間です。より具体的には、ガウス カーネルは、連続的なマルチスケール変化を生成できる唯一の線形カーネルであるため、ガウス ピラミッドを使用します。コンテンツのこの部分にはスケール空間の概念が含まれており、これは自分で理解できます。
Image Pyramid の記事で 2 つの基本パラメータ、層間スケール変更係数 kkk と初期スケール σ 0 \sigma_0 σ0 について言及されています。元のアルゴリズムでは、 k = 2 o + rn 、 r = 0 、 1… 、 n + 2 k=2^{o+\frac{r}{n}}、r={0,1...,n+2} k=2o+nr、r=0,1...,n+2開始層は、前のグループの最後から 3 番目の層からダウンサンプリングすることによって取得され、実際に各グループの開始スケールが σ 0 、 2 σ 0 、 3 σ 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . であることが保証されます。 ,2\sigma_0,3\sigma_0… σ0、2σ0、3σ0…。さらに、σ 0 = 1.6 \sigma_0=1.6 σ0 =1.6 であると述べましたが、実際の写真が撮影されるとき、カメラはすでに元のシーンのスケール変換を実行しています。0.5 σ′=0.5、そこからσ 0 = 1. 6 2 − σ ′ 2 = 1.52 \sigma_0=\sqrt{1.6 2- \sigma' 2}=1.52 σ0 =1.62−σ′2を取得します。

=1.52。この式の起源は次のとおりです。ガウス フィルタリングは、ガウス カーネルと元の画像の畳み込みで具体化されます f ( x ) ⨂ G ' ( x ) f(x)\bigotimes G'(x) f(x)⨂G ' (x) 、2 つのガウス フィルターのカスケードは f ( x ) ⨂ ( G ' ( x ) ⨂ G ( x ) ) f(x)\bigotimes (G'(x) \bigotimes G(x)) f と等価です。 (x) ⨂(G'(x)⨂G(x)) であり、2 つのガウス畳み込みの結果はやはりガウス畳み込みであり、分散は二乗和の関係を満たします。これは時間領域畳み込みまたはフーリエによって証明できます。詳細については、文献を参照してください。

2. ガウス差分ピラミッド

ガウス ピラミッドを通じて、さまざまなスケールの画像が得られました。次の問題は、高周波領域をどのように取得するかです。非常に簡単なアイデアは、エッジ検出アルゴリズムに従ってラプラシアン フィルターやソーベル フィルターなどの微分フィルターを使用することです。画像を使用して、グレースケール値が大幅に変化する領域を見つけます。先行研究によると、正規化ガウス ラプラシアン オペレーターの最大値と最小値は他の特徴抽出関数と比較して最も安定した画像特徴を取得できるため、正規化ガウス ラプラシアン ラス オペレーターはマルチスケールから特徴を抽出します。ただし、この方法での抽出の複雑さは非常に高くなります。また、スケール正規化ガウス ラプラシアン演算子は DOG 関数と次の関係があります: G ( x , y , k σ ) − G ( x , y , σ
) ≈ ( k − 1 ) σ 2 ∇ 2 GG(x,y,k\sigma)-G(x,y,\sigma)\estimate(k-1)\sigma ^2 \nabla^2 GG(x,y ,kσ)−G(x,y,σ)≈(k−1)σ2∇2G は
次のように証明されます:
ガウス関数の係数を無視します:
G ( x , y , σ ) = 1 σ 2 exp ( − x 2 + y 2 2 σ 2 ) ∂ G ∂ x = − x σ 4 exp ( − x 2 + y 2 2 σ 2 ) ∂ 2 G ∂ x 2 = − σ 2 + x 2 σ 6 exp ( − x 2 + y 2 2 σ 2 ) ∇ 2 G ( x , y ) = ∂ 2 G ∂ x 2 + ∂ 2 G ∂ y 2 = − 2 σ 2 + x 2 + y 2 σ 6 exp ( − x 2 + y 2 2 σ 2 ) ∂ G ∂ σ = − 2 σ 2 + x 2 + y 2 σ 5 exp (− x 2 + y 2 2 σ 2 ) ⇒ σ ∇ 2 G = ∂ G ∂ σ
G(x,y,σ)=1σ2exp(−x2+y22σ2)∂G∂x=−xσ4exp(−x2+y22σ2)∂2G∂x2=−σ2+x2σ6exp(−x2+y22σ2)∇2G(x,y) )=∂2G∂x2+∂2G∂y2 =−2σ2+x2+y2σ6exp(−x2+y22σ2)∂G∂σ=−2σ2+x2+y2σ5exp(−x2+y22σ2)⇒σ∇2G=∂G∂σ

G(x,y,σ)=σ21 exp(−2σ2x2+y2)∂x∂G =−σ4x exp(−2σ2x2+y2)∂x2∂2G =σ6−σ2+x2 exp (−2σ2x2+y2 )∇2G(x,y)=∂x2∂2G +∂y2∂2G =σ6−2σ2+x2+y2 exp(−2σ2x2+y2 )∂σ∂G =σ5 −2σ2+x2+y2 exp(-2σ2x2+y2 )⇒σ∇2G=
∂σ∂G微分ガウスピラミッドの場合:
DOG = G ( x , y , k σ ) − G ( x , y , σ ) ( k − 1 ) σ ≈ ∂ G ∂ σ DOG ≈ ( k − 1 ) σ 2 ∇ 2 G \begin{aligned} &DOG=\frac{G(x,y,k\sigma)-G(x , y,\sigma)}{(k-1)\sigma}\estimate \frac{\partial G}{\partial \sigma}\ & DOG \estimate(k-1)\sigma 2\nabla 2G \ end { aligned } DOG=(k−1)σG(x,y,kσ)−G(x,y,σ)≈∂σ∂G DOG≈(k−1)
σ2∇2Gはガウス ピラミッド上で実行する必要があり、スケール レベル σ \sigma σ で層間差分を計算してガウス差分ピラミッド (DOG) を取得するだけで、特徴抽出操作が完了します。
ここに画像の説明を挿入

3. 特徴点処理

DOG を取得した後、理論的には固有値を取得しましたが、キャニー エッジ検出で使用した非最大値抑制のアイデアと同じように、特徴の低い固有値を削除するために固有値に対して何らかの処理を行う必要があります。
1. 閾値処理

単純なしきい値処理では、それほど急激に変換されていない点が削除されます。これらの点はノイズによって引き起こされている可能性があり、ガウス ラプラシアンに加えてノイズ除去手段の層を追加するとみなすことができます。
val = { valabs ( val ) > 0.5 T n 0 それ以外の場合 val =
{val0abs(val)>0.5T それ以外の場合

val={val0 abs(val)>0.5nT otherwise
ここでの経験値 0.04 であり、nnn は前述の抽出された特徴点の数です。
2. 非最大抑制

非最大一貫性の考え方は他のアルゴリズムと同じです. 選択された固有値がその領域内の極値である必要があります. 違いは, 他のアルゴリズムは 2 次元の固有値のみを必要とすることです.ここでは、スケール σ \sigma σ のレベルでも極値である必要があります。これは、DOG レイヤーの数が特徴の抽出に使用されるレイヤーの数より 2 多いという前の設定も継承します。
ここに画像の説明を挿入
3. 二次テイラー補正

私たちの画像は x 、 y 、 σ x,y,\sigma x,y,σ の方向でのみ離散値を取ることができるため、最初の 2 つのステップでいくつかの特徴点が取得されたとしても、これらの特徴点は正確ではありません。特徴点がサブピクセル(サブスケール)の位置に現れるように、補正のために 2 次のテイラー関数アライメントを導入する必要があります。
ここに画像の説明を挿入

f ( X ) = f ( X 0 ) + ∂ f T ∂ XX ^ + 1 2 XT ^ ∂ 2 f ∂ X 2 X ^ f(X)=f(X_0)+\frac{\partial f^T}{ \partial X}\hat{X}+\frac{1}{2}\hat{X T}\frac{\partial 2 f}{\partial X^2}\hat{X} f(X)=f (X0 )+∂X∂fT X +21 XT ∂X2∂2f X^
上式により、特徴点 X 0 付近の関数の近似値 f ( x ) f(x) f(x) が得られます。 X_0 X0 、ここで X ^ = X − X 0 \hat{X}=X-X_0 X^=X−X0 、この式の一次導関数のゼロ点を計算すると、実際の位置を取得できます。関数の極点と X 0 X_0 X0 を使用して、離散的な特徴点をサブスケールに補正します。
f ′ ( X ) = ∂ f T ∂ X + ∂ f 2 ∂ X 2 X ^ f'(X)=\frac{\partial f^T}{\partial X}+\frac{\partial f^2} {\partial X^2}\hat{X} f′(X)=∂X∂fT +∂X2∂f2 X^

X ^ ex = − ∂ 2 f − 1 ∂ X 2 ∂ f ∂ X \hat{X} { ex}=-\frac{\partial^2 f^{-1}}{\partial X^2}\frac {\partial f}{\partial X} X^ex =−∂X2∂2f−1 ∂X∂f 新しい特徴点のグレー値を取得するために前の式
に導入されます:
f ( X ′ ) = f ( X 0 ) + 1 2 ∂ f T ∂ X ′ X ^ exf(X')=f(X_0)+\frac{1}{2}\frac{\partial f^T}{\partial X'} \hat{X}
{ex} f(X′)=f(X0 )+21 ∂X′∂fT X^ex 上記の式は反復プロセスであることに注意
してください現在の特徴点の 2 次テイラーによって新しい特徴点を取得するプロセスは、X ^ \hat{X} X^ が小さすぎるなどの終了条件が満たされるまで繰り返されます。また、得られた解が離散的な極点の特定の範囲を超える場合、二次テイラー フィッティングはその付近でのみ有効であるため、その解を破棄する必要があることにも注意してください。

添付: 非常に興味深い点は、ここでの反復の目的は、勾配降下法の反復とは同じではないということです。勾配降下法で求めるのは、ある点での関数の勾配です。複雑な非線形ニューロンを理解するために、ネットワークはその一次微分のゼロ点を分割し、たとえそれが得られたとしても局所的な極値に陥る可能性があるため、ここでは関数の一次ゼロ点を直接取得します。反復の繰り返しの理由は、関数自体が近似であり、テイラー展開だけで済むためです。 2 番目の項目に関しては、元の関数を連続的に近似する必要があります。これら 2 つの反復の目的は同じではありません。
4. 低コントラストの除去

目的はそれらの間の閾値処理と同様であり、あまり急激に変化しない特徴点を除去することである。要件:
∣ f ( x ) ∣ ≥ T n |f(x)|\geq\frac{T}{n} ∣f(x)∣≥nT
5.エッジ効果の除去

冒頭で述べたように、抽出したい特徴点はエッジではなくコーナー点であり、前述の一連の対策ではグレー値が急激に変化する点のみが確実に取得され、エッジ点もこの特徴を満たすため、エッジポイントを削除するために次の方法を渡します。

计算黑森矩阵 H ( x , y ) = [ D x x ( x , y ) D x y ( x , y ) D y x ( x , y ) D y y ( x , y ) ] H(x,y)=
[Dxx(x,y)Dyx(x,y)Dxy(x,y)Dyy(x,y)]

H(x,y)=[Dxx​(x,y)Dyx​(x,y)​Dxy​(x,y)Dyy​(x,y)​]
若矩阵行列式 D e t ( H ) < 0 Det(H)<0 Det(H)<0,舍去该特征点
若矩阵行列式和迹不满足: T r ( H ) D e t ( H ) < ( γ 0 + 1 ) 2 γ 0 \frac{Tr(H)}{Det(H)}<\frac{(\gamma_0+1)^2}{\gamma_0} Det(H)Tr(H)​<γ0​(γ0​+1)2​,舍去该特征点, γ 0 \gamma_0 γ0​为有实际意义的经验值,通常设定为10。

次に、以下のステップの意味を説明しますと、コーナー点とエッジ点の違いは、画像上ではエッジが線として現れ、その線に垂直な方向の周波数が高く、その線に垂直な方向の周波数が高いことです。線に沿った方向は比較的低く、コーナー点は線の方向にあり、複数 (2 つ以上) の方向に強い高周波成分が現れます。ヘッセ行列は実際には、関数の 2 次偏導関数で構成される行列であり、関数の曲率変化を反映できます。二次行列の場合、次の特性があります。

假定二次型矩阵 H H H两个特征值为 α , β \alpha,\beta α,β,则 D e t ( H ) = α β Det(H)=\alpha\beta Det(H)=αβ, T r ( H ) = α + β Tr(H)=\alpha+\beta Tr(H)=α+β;
实二次型矩阵的特征值异号时,该矩阵为不定矩阵,黑森矩阵为不定矩阵时,该临界点为非极值点;
黑森矩阵的特征值标定了函数在相应特征向量方向上变化的快慢。

特性 1 と 2 から、D et ( H ) < 0 Det(H)<0 Det(H)<0 の場合、特徴点は非極値点であり、破棄されると推定できます。特性 1 と 3 から、
T r ( H ) D et ( H ) = ( α + β ) 2 α 2 β 2 \frac{Tr(H)}{Det(H)}=\frac{(\alpha+\beta) 2} のときを推定できます{ \alpha 2\beta^2} Det(H)Tr(H) = α2β2(α+β)2 小さすぎる、2 つの特徴ベクトルの比で構成される式 γ \gamma γ ( γ + 1 ) 2 γ \frac{(\gamma+1)^2}{\gamma} γ(γ+1)2 これも小さく、γ > 1 \gamma>1 γ>1 のときティック関数は単増加になります, T r ( H ) D et ( H ) \frac{Tr(H)}{Det(H)} Det(H)Tr(H) Size に従って、特徴ベクトルの相対的なサイズを判断できます。値が小さすぎるため、関数が次の状態にあることを示しています。点のさまざまな方向の変化は非常に不均一であり、エッジに似ているため、破棄されます。

4. 特徴点記述子

これまでの手順により、さまざまなスケールで安定した特徴点が得られたので、次にそれらを記述する必要があります。

  1. 特徴点領域の方向を決定する

冒頭で、特徴点に回転不変性を持たせるために、特徴点領域を特定の方向に一様に回転させると述べましたが、これが特徴点領域の主方向であるため、主方向を決定する必要があります。初め。
計算方法は、特徴点を中心とした、特徴点スケール σ ∗ \sigma^* σ∗, \sigma_{oct}, σoct に最も近いスケール層 σ oct の統計量 3 σ ′ = 3 ∗ 1.5 σ oct 3\sigma'=3 1.5\sigma_{oct} 3σ'=3∗1.5σoct 範囲内のピクセルの勾配の大きさと方向。範囲内の勾配の大きさには、1.5 σ ∗ 1.5\ を使用します。 sigma^ 1.5σ ∗ 距離重み付けのためのガウス カーネル フィルタリング。一連の勾配の大きさと方向のペア = { amp , ang } ペア={amp,ang} ペア={amp,ang} を取得した後、360° 360° 360° 方向を複数のビンに分割し、対応する ang を含みます。 ang ang のペアの amp と amp の値は対応するビンに累積され、ang ang ang が 2 つのビンの間にある場合、距離に応じて amp amp が割り当てられます。(これは HOG アルゴリズムに似ており、自分で確認できます)。最終的に、特徴点領域内の振幅方向のヒストグラムが得られ、最も振幅が大きい方向が主方向として選択されます。
ここに画像の説明を挿入します
。 添付ファイル: 統計領域の半径やガウス重み付けの分散など、ここにあるいくつかのパラメーターは設定方法が異なりますが、内部の考え方は同じです。また、主方向の外側に振幅が主方向振幅の80%に達する方向があった場合、それを補助方向として使用し、後続の方向には同じ位置、スケールで方向が異なる2つの特徴点が出現します。マッチングエリア
2. 特徴点領域記述子

特徴点領域の主方向を取得した後、この値を使用して回転不変の記述子を計算できます。まず、前のステップと同様に、特徴点が位置するスケール レベルでの特定の領域の勾配の振幅と方向の統計は、実装においてわずかに異なります。

首先在特征点所处尺度层面内划定特征区域,半径为:
r = 3 2 σ o c t ( d + 1 ) 2 r=\frac{3\sqrt{2}\sigma_{oct}(d+1)}{2} r=232

​σoct​(d+1)​,其中 d d d为我们在一个维度上划分的子块数目,通常为4;
将该区域划分为共 d ∗ d d*d d∗d个子块,每个子块内包含多个像素点 ;
将划定出来的区域旋转到该区域的主方向(前一步已求出);
在每个子块内构筑幅值-方向直方图,统计8个方向的梯度幅值。由此该区域可用 8 ∗ d ∗ d 8*d*d 8∗d∗d维向量表示,由此完成了特征点区域描述子的构建;在这里插入图片描述
附:需要注意的是以上的计算都是发生在相应的高斯金字塔尺度层面上,而非原图或者DOG上,此外由于旋转产生的像素值丢失通过插值算法解决,可以自行了解。如果想在原图上可视化SIFT特征,需要将我们获得的稳定特征点坐标变换回原始的图像尺寸上,简单的乘以原下采样倍数即可。

要約する

ここまで SIFT アルゴリズムについて説明してきましたが、マッチング部分では特徴に応じて他のクラスタリング アルゴリズムを使用することもできます。一般的にこのアルゴリズムはまだ難しいため、この記事では他のブログで言及されていない詳細について数学的導出のみを紹介します。 、思考プロセス全体をより一貫性のあるものにするため、有限差分法などのより詳細な数学的証明についてはこれを参照してください。
https://blog.csdn.net/Dr_maker/article/details/121442210

おすすめ

転載: blog.csdn.net/zyq880625/article/details/132192814