キーポイント検出 SIFT アルゴリズムの注意事項

SIFTアルゴリズム

        SIFT (スケール不変特徴変換)、スケール不変特徴変換。回転不変性、スケール不変性、輝度変化不変性を持ち、非常に安定した局所特徴量です。ターゲットの検出と特徴抽出の方向において重要な位置を占めます。

        SIFT アルゴリズムによって検出されるキー ポイントは、コーナー ポイント、エッジ ポイント、暗い領域の明るい点、明るい領域内の暗い点など、照明、アフィン変換、ノイズなどの要因によって変化しないいくつかの非常に顕著な点です。

SIFTアルゴリズムのステップ

        1. スケール空間の極値検出: さまざまなスケールの画像上の極値位置を検索します。スケールと回転に対して不変である潜在的なキーポイントは、ガウス関数の違いによって識別されます。

        2. キーポイントの位置を特定します。各潜在的な位置で、適合した詳細モデルを使用して位置とスケールを決定します。キーポイントの選択は、その安定性に依存します。

        3. キーポイントの方向を決定します。ローカル画像の勾配方向に基づいて、各キーポイントの位置に 1 つ以上の方向が割り当てられます。画像データに対する後続のすべての操作は、キーポイントの方向、スケール、位置に応じて変換されるため、そのような変換の不変性が保証されます。

        4. キー ポイントの説明: 各キー ポイントの周囲の近傍では、画像の局所的な勾配が指定されたスケールで測定されます。これらの勾配はキー ポイントの記述子として使用され、局所的な形状や照明の変化の比較的大きな変化を可能にします。

スケール空間の極値の検出

        物体を近くと遠距離で見るとぼけ具合が異なり、近距離から遠距離になるほど画像の細部がぼやけていきます。SIFT でも画像のスケールの意味は同様ですが、ここでいうスケール空間とは画像の大きさではなく、画像のぼけ具合を指します。

        周波数領域の観点から見ると、画像のぼけ具合は、周波数領域の情報の低周波成分と高周波成分を表します。ぼやけた画像は、ほとんどの情報が低周波に集中しており、高周波の情報はほんの少量であることを表します。鮮明な画像とは、高周波情報と低周波情報を含む情報成分が豊富であることを意味します。

        ガウス カーネルは、マルチスケール空間を生成できる唯一のカーネル関数です。これは、T Lindeber の文書「スケール空間理論: さまざまなスケールで構造を分析するための基本ツール」で実証されています。

        画像のスケール空間は、可変スケールの 2 次元ガウス関数による元の画像 (x, y) の畳み込み演算L(x,y,\sigma)として定義されますG(x,y,\sigma)

        L(x,y,\sigma) = G(x,y,\sigma) * I(x,y)

        の:

G(x,y,\sigma) = \frac{1}{2\pi\sigma^2}e^{-(\frac{x^2 + y ^2}{2\sigma^2})}

        \シグマはスケール空間係数であり、画像がどの程度ぼやけるかを決定します。大きくする\シグマと縮尺が大きくなり、画像がぼやけ、主に概要が表示されます。\シグマ小さい場合、スケールは小さくなり、より詳細が表示されます。

        この時点で、誰もがスケール空間の概念について一定の理解を持っているはずだと思います。明確でない場合は、ここで不適切な例を示します。

        A と B という 2 人の人が同じ窓のそばに立って、遠くの木を見ているとします。A は優れた視力を持つマサイ族で、B は 300 度の近視です。A と B が見た木の画像は、異なるスケール空間に属します。\シグマここでは近視の程度として理解できます。

        ガウス関数の離散近似を計算する場合、3\シグマ距離外のピクセルの役割はほぼゼロであるため、これらのピクセルは無視できます。一般に、実際のアプリケーションでは、ガウス コンボリューション カーネルの計算のみが必要です(6\シグマ+1) *(6\シグマ+1)。 

        SIFT でスケール空間の極値検出を行う場合、ガウス ピラミッドを構築する必要がありますが、ガウス ピラミッドの詳細については、「リファレンス」のリンク「ガウス ピラミッド」を参照してください。ガウス ピラミッドを取得した後、さまざまなサイズの画像グループ (オクターブ) を取得します。各オクターブは、異なるスケールの複数の画像で構成されます。

元の画像アドレス: Gaussian Pyramid_Xiaolu Huanhuan のブログ-CSDN ブログ

        スケール空間で極値を見つけるには、エッジ検出のメモで説明されている LoG (ガウスのラプラス法) を使用できます。その本質は、画像の 2 次導関数を使用して計算することです。ただし、LoG の計算は比較的大規模であり、SIFT アルゴリズムの元の論文では、ガウス消去関数を使用して正規化ラプラシアン演算子を近似し、隣接する 2 つのガウス スケール空間画像を直接減算すると述べられています。

D(x, y, \sigma)=(G(x, y, k\sigma)-G(x, y,\sigma))* I(x, y)

 = L(x, y, k\sigma) - L(x, y, \sigma)

        D(DoG) 関数と LoG の関係:

         具体的な証拠は以下のリンクを参照してください。

DoG 演算子と LoG 演算子 - DoG (ガウスの差) 演算子と LoG (ガウスのラプラシアン) 演算子は、極点検出 (ブロブ検出) の 2 つの一般的に使用される方法であることを知ってください。ガウス畳み込みはスケール変換に使用されます。では、ラップ ラシアンはどうですか? したがって、ここでは LapLacian 演算子が初めて紹介されます。画像エッジ検出... https://zhuanlan.zhihu.com/p/49447503         DoG オペレーターを介して、ガウス差分ピラミッドを取得できます。具体的な計算は非常に簡単で、各オクターブで 2 つの隣接するスケールの画像を減算するだけです。 :

         DoG ピラミッドの各オクターブの層の数は、元のガウス ピラミッドの層の数 - 1 であることがわかります。

        次に、DoG ピラミッドを使用して、さまざまなスケール空間で極大値または極小値を見つけます。以下に示すように:

         特定のピクセル ポイント (図の X でマーク) については、スケール スペース内の上下のレイヤーの 8 つの隣接ポイントおよび 18 の隣接ポイント (2x9) と比較する必要があります。これらすべての点の中で、その点の値が最大または最小である場合、その点はキー点である可能性があり、この点が候補点として使用されます。

        極大値の探索プロセスは、各グループの第 2 層から開始され、第 2 層を現在の層として、現在の層の DoG 画像内の 26 点 (現在の層の 8 点 + 上位および上位の 9 点) が対象となります。下の隣接レイヤー) ) 比較のための隣接ポイント。検索された極値点に含まれる情報には、位置座標 (DoG 画像座標) とスケール空間情報 (どの層か) の両方が含まれます。2 番目のレイヤーの検索が完了したら、3 番目のレイヤーを現在のレイヤーとして極大値検索プロセスを繰り返します。S = 3 の場合、各グループは 3 つのレイヤーを検索する必要があることを意味します。そのため、DoG には S+2 レイヤーが必要で、最初のガウス ピラミッドには S+3 レイヤーが必要です。

キーポイントの位置を決定する(キーポイントを正確に特定する)

        前のステップで見つけた極値候補点は離散空間内の極値点候補であるため、検出された極値点は実際の極値点とは多少異なります。実際の極値点をより正確に特定するために、SIFT アルゴリズムは 3 進秒を使用しますD(x,y,\sigma)。 -order スケール空間関数のテイラー展開を配置します。

        検出した極値点が であると仮定するとX_0 = (x_0,y_0,\sigma_0)、この点に対応するテイラー展開は次のようになります。

        f(\begin{bmatrix} x\\ y\\ \sigma \end{bmatrix}) = f(\begin{bmatrix} x_0\\ y_0\\ \sigma_0 \end{bmatrix}) + \begin{bmatrix} \ frac{\partial f}{\partial x}, & \frac{\partial f}{\partial y} ,& \frac{\partial f}{\partial \sigma} \end{bmatrix}\begin{bmatrix} \begin{bmatrix} x\\ y\\ \sigma \end{bmatrix} - \begin{bmatrix} x_0\\ y_0\\ \sigma_0 \end{bmatrix} \end{bmatrix}

+ \frac{1}{2}\begin{bmatrix} \begin{bmatrix} x\\ y\\ \sigma \end{bmatrix} - \begin{bmatrix} x_0\\ y_0\\ \sigma_0 \end{bmatrix } \end{bmatrix}^T\begin{bmatrix} \frac{\partial ^2f}{\partial x \partial x}, & \frac{\partial ^2f}{\partial x \partial y}, & \ frac{\partial ^2f}{\partial x \partial \sigma} \\ \frac{\partial ^2f}{\partial x \partial y}, & \frac{\partial ^2f}{\partial y \partial y}, & \frac{\partial ^2f}{\partial y \partial \sigma}\\ \frac{\partial ^2f}{\partial x \partial \sigma}, &\frac{\partial ^2f} {\partial x \partial \sigma} & \frac{\partial ^2f}{\partial \sigma \partial \sigma} \end{bmatrix}\begin{bmatrix} \begin{bmatrix} x\\ y\\ \ sigma \end{bmatrix} - \begin{bmatrix} x_0\\ y_0\\ \sigma_0 \end{bmatrix} \end{bmatrix}

これを、候補極値点に対する曲線上の点のオフセットを表すベクトルに\ワイドハット{X}置き換えます         。このベクトルは、 で表されます取得します:\begin{bmatrix} x\\ y\\ \sigma \end{bmatrix} - \begin{bmatrix} x_0\\ y_0\\ \sigma_0 \end{bmatrix}X_0バツ\begin{bmatrix} x\\ y\\ \sigma \end{bmatrix}

        f(X) = f(X_0) + \frac{\partial f}{\partial X}^T\widehat{X} + \frac{1}{2}\widehat{X}^T\frac{\partial ^2f}{\部分 X^2}\ワイドハット{X}

        これは、f(X)私たちが話しているスケール空間関数の近似多項式形式です。したがって、 と は同じであるとD(X)単純に考えることができ、その後の導出では引き続きこの記号が使用されます。f(X)D(X)f(X)

        2 次テイラー展開の目的は、元の関数を近似する多項式を取得することであることがわかっています。この展開を取得した後、実際の極値点を求めることは、この関数の一次導関数が 0 になる位置を見つけることです。

         まず、この関数の一次導関数を求めます

        この形式の右端の行列は\frac{1}{2}\widehat{X}^T\frac{\partial^2f}{\partial X^2}\widehat{X}二次形式であり、その導関数は次のようになります。\frac{1}{2}(\frac{\partial^2 f}{\partial X^2} + \frac{\partial ^2f}{\partial X}^T)\widehat{X}

        2次行列の係数行列の転置はそれ自体に等しいので、\frac{1}{2}(\frac{\partial^2 f}{\partial X^2} + \frac{\partial ^2f}{\partial X}^T)\widehat{X} =\frac {\partial^2 f}{\partial X^2} \widehat{X}

        要約すると、利用可能な関数の一次導関数は次のようになります。

        \frac{\partial f(X)}{\partial X} =\frac{\partial f}{\partial X} +\frac{\partial^2 f}{\partial X^2} \widehat{X}

       導関数をゼロとして、次のように解きます。

        \frac{\partial f}{\partial X} +\frac{\partial^2 f}{\partial X^2} \widehat{X} = 0 \Rightarrow \widehat{X} = -\frac{\partial ^2 f}{\partial X^2} ^{-1}\frac{\partial f}{\partial X}

        \ワイドハット{X}Taylor 展開に再度代入すると、次のようになります。

        f(X) = f(X_0) + \frac{\partial f}{\partial X}^T\widehat{X} + \frac{1}{2}(-\frac{\partial^2f}{\部分 X^2}^{-1}\frac{\partial f}{\partial X})^T\frac{\partial^2f}{\partial X^2}(-\frac{\partial^2f} {\部分 X^2}^{-1}\frac{\部分 f}{\部分 X})

                   = f(X_0) + \frac{\partial f}{\partial X}^T\widehat{X} + \frac{1}{2}\frac{\partial f}{\partial X}^T\frac {\partial^2f}{\partial X^2}^{-T}\frac{\partial^2f}{\partial X^2}(-\frac{\partial^2f}{\partial X^2} ^{-1}\frac{\部分 f}{\部分 X})

                  = f(X_0) + \frac{\partial f}{\partial X}^T\widehat{X} + \frac{1}{2}\frac{\partial f}{\partial X}^T(\ frac{\partial^2f}{\partial X^2}^{-1}\frac{\partial f}{\partial X})

                 = f(X_0) + \frac{\partial f}{\partial X}^T\widehat{X} + \frac{1}{2}\frac{\partial f}{\partial X}^T(- \ワイドハット{X})

                 = f(X_0) + \frac{1}{2}\frac{\partial f}{\partial X}^T(\widehat{X})


        極値点を見つけるプロセスは基本的に、近似曲線を通じて極値点の位置を見つけ、継続的に反復することです。

        反復とは、極点のより正確な位置を見つけ、それを曲線に適合させるための基礎として使用して、この曲線上の極点を特定することを意味します。したがって、次の 2 つの問題に注意する必要があります: 反復回数を制限する必要がある (複数の計算後に収束せず、3 つの成分のいずれも 0.5 未満ではない); テイラー展開の方が曲線によく適合するため、遠い特定の点の位置に近い場合、遠すぎる場合は不正確になります)。

        コントラストの低い点を破棄します。

        より粗いキー ポイントの位置はテイラー展開によって取得されており、このときのキー ポイントにはコントラストの低いピクセル ノイズが含まれる可能性があります。極値点のグレー値をしきい値 (通常は約 0.03、論文ではピクセル値の範囲が [0,1] であると仮定します) と比較することにより、極値点を破棄するかどうかを決定します。しきい値より小さい場合、アルゴリズムはそのポイントをノイズとみなし、破棄します。

        エッジ応答を削除します。

        DoG はエッジでの反応が強く、エッジに沿った点が処理されないとキー ポイントと判断されます。エッジ応答を除去するには、ヘシアン (Hessian) 行列を導入して処理する必要があります。

        H(x,y) = \begin{bmatrix} D_{xx}(x,y) & D_{xy}(x,y) \\ D_{xy}(x,y)& D_{yy}(x, y) \end{bmatrix}

       ヘッセ行列 H を導入する目的は、H が曲線の局所的な曲率を記述し、ヘッセ行列の固有値が対応する固有ベクトルの方向に関数が変化する速度を校正するためです。その点で関数の曲率がほぼ異なる方向に変化する場合、それはコーナー点です。ヘッセ行列の固有値は局所曲率に正比例します (ハリスのコーナー検出アルゴリズムと比較できます。エッジが検出された場合、その M 行列の固有値の 1 つが大きく、特定の値になります) 1 つは小さい; コーナーが検出された場合、両方の固有値は大きい)。

        SIFT アルゴリズムでは、H 行列の固有値は直接計算されませんが、行列式に対する行列のトレースの比率を通じて 2 つの関係が間接的にわかります。

        トレース(H) = D_{xx} + D_{yy} = \alpha + \beta

        Det(H) = D_{xx}D_{yy} - (D_{xy})^2 = \alpha\beta

        ここで\アルファ、 と は\ベータ2 つの固有値、 および です\alpha > \beta、\alpha = r\beta\アルファ2 つの固有値の最大値として表され、\ベータの r 倍になります。

        Det(H)が0未満の場合、点Xが削除されるため、このとき2つの固有値の符号が異なり、変化が不均一となり、これがエッジとなります。

\アルファ合計が\ベータ同じ符号        の場合\アルファ > \ベータ、r は 1 より大きく、検出は二乗とトレースの行列式の比によって行われます。

        \frac{トレース(H)^2}{Det(H)} = \frac{(\alpha + \beta)^2}{\alpha\beta} = \frac{(r+1)^2\beta^ 2}{r\beta^2} = \frac{(r+1)^2}{r}

        この式から、2つの固有値がほぼ等しい場合のみ、この式の値が最も小さく、rが大きくなるにつれて式の値が大きくなることがわかります。この関数\frac{(r+1)^2}{r} \ \ \{r \geqslant 1\}は、最小値が 4 の単調増加関数です。

         したがって、SIFT アルゴリズムでは、しきい値 r (論文では 10 とされています) が設定され、次の不等式が真であるかどうかが判断されます。

        \frac{トレース(H)^2}{Det(H)} < \frac{(r+1)^2}{r}

        この条件が満たされない場合、ポイントは要件を満たさず、破棄されます。

キーポイント検出プロセスの概要の概要

        (a) 元の 233x189 画像。

        (b) DoG 関数の極値によって検出された最初の 832 個のキーポイントの位置。

        (c) しきい値を使用して低コントラストのポイントを削除した後、729 個のキー ポイントが残ります。

        (d) エッジ応答を削除すると、最終的に 536 個のキーポイントが残ります。

キーポイントの方向

        キーポイントを回転に対して不変にするために、SIFT アルゴリズムは特徴点領域を特定の方向 (特徴点領域の主な方向) に均一に回転します。この方向性はどうやって決めるのでしょうか?

        各キー ポイントについて、SIFT 統計は、ポイントが位置するガウス スケール イメージに基づいており、そのポイントが中心で半径 3*1.5 になります (この半径は私が見た論文には見つかりませんでした。参考資料\シグマはネットワーク データの場合は、円内のすべてのピクセルの勾配の方向と勾配の大きさに注意してください。各点の勾配と大きさは次のように計算されます。

        

        キー ポイントを正確に特定する前のセクションから、キー ポイントのスケール (サブピクセル レベル) が元のガウス ピラミッドの特定のスケールと\シグマ同じ値ではないことがわかります。ここで言うガウス イメージのスケールとは、サブピクセル レベルのキー ポイント スケール値に最も近いガウス イメージのレイヤーを見つけることです。(注: このとき、勾配と大きさの計算は DoG ピラミッドの画像ではなく、ガウス ピラミッドの画像で実行されます)。

        計算された情報はヒストグラムで表されます(論文では10度ごとの範囲、つまり36方向があります。次の図は模式図であり、36方向は描画されていません)。

        ヒストグラムの各ビン (列) は 10 度であり、円内の勾配方向のピクセルがこの角度で検出され、その振幅がビン (列) の高さとして加算されます。なお、円の中心から遠ざかるほど振幅への寄与は小さくなりますが、実際に振幅を計算する際には単純に加算するのではなく、ガウス関数で重み付けを行います。 . ガウス関数の分散は 1.5 です\シグマ

        ヒストグラムのピーク値に対応する方向が主方向であり、ピーク値の 80% を超える方向が特徴点の補助方向です。ここで得られる方向角度の値は範囲であり、より正確に特定の角度を知るには、ヒストグラムの主方向と副方向の放物線をフィッティングすることで求めることができます。

        これで、キーポイントの 3 つの重要な情報 (位置、スケール、方向) が得られました(x,y,\sigma,\theta)。 

キーポイント機能記述子

        次に、キー ポイントの特徴記述子を確立する必要がありますが、この記述子には、キー ポイントの情報だけでなく、それに寄与するキー ポイントの周囲のピクセルの情報も含まれます。主なアイデアは、キー ポイントの周囲のピクセル領域をブロックに分割し、ブロック内の勾配ヒストグラムを計算して、特徴ベクトルを取得することです。

        記述子のスケールと特徴点は関連しているため、キーポイントに対応するガウススケール画像上に記述子が生成されます。キーポイントを中心として、その近傍を d*d 個の部分領域 (d は通常 4) に分割し、各領域は正方形になります。各正方形領域の勾配情報をカウントします。キーポイントの面積をカウントするには、回転の不変性を確保するために、まず画像の x 軸をキーポイントの主方向に回転する必要があります。

         そして、各サブブロックにおいて、8方向の画素の勾配値がカウントされ、一般に、勾配値をカウントする際にガウス重み付けが行われる。

           d は通常 4 で、これは 16 個のサブブロックがあり、各サブブロックが 8 つの値 (8 方向) を取得することを意味し、8 つの勾配情報を記録してキー ポイントの特徴記述子を取得します。したがって、機能記述子の次元は 4*4*8 = 128 となります。

参考文献

        ガウスピラミッド

ガウス ピラミッド_Xiaolu Huanhuan のブログ - CSDN ブログ1. ガウス ピラミッドを構築する理由? ガウス ピラミッドは画像のさまざまなスケールを模倣します。スケールはどのように理解すべきですか? 画像の場合、近くで観察した場合と、1メートル離れて観察した場合では、前者はより鮮明に、後者はぼやけ、前者は大きく、1メートル離れて観察した場合では、見えている画像の印象が異なります。前者では、画像の詳細が表示され、画像の概要情報が表示されます。これは画像のスケールであり、画像のスケールは人工的に作成されたものではなく、自然に存在します。さて、ここで、実際には、以前は画像の処理が比較的単調であったことがわかります。これは、私たちが 2 次元空間だけに焦点を当てており、「画像の深さ」という概念が考慮されていなかったためです。 will we know_ガウスピラミッドhttps://blog.csdn.net/qq_44771627/article/details/123840316         SIFT アルゴリズム原著論文

https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf https://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

画像アルゴリズム: ガウス関数の差分(DOG) ガウス関数の差分_ガウス関数の差分_SSS_369のブログ-CSDNブログコンセプト ガウス関数の差分(DOG)はガウス関数の差分です。画像をガウス関数で畳み込むことで得られるローパスフィルタリング結果、つまりノイズ除去処理です ここでのガウスはガウスローパスフィルタのガウスと同じで、正規分布関数。同時に、ガウス ラプラシアン LoG を近似し、隣接する 2 つのガウス スケール空間の画像を減算して DoG 応答値画像を取得することで、特定のスケールでの特徴検出を取得できます。基本理論 まずはガウス関数…_ガウス差分https://blog.csdn.net/sss_369/article/details/84674639 SIFTアルゴリズムの詳細解説_Midnight Kulinのブログ - CSDNブログ概要 はじめに 1、ガウスピラミッド 2、ガウス差分ピラミッド 3. 特徴点処理 1. しきい値処理 2. 非最大値抑制 3. 二次テイラー補正(続き) はじめに SIFT アルゴリズムは、画像のマッチング問題を解決するためのもので、ある種の画像サイズと回転変動を維持するものを抽出したいと考えています。堅牢な機能によりマッチングが可能になります。このアルゴリズムのインスピレーションも非常に直感的で、人間の目は 2 つの画像が一致するかどうかを観察するときに、典型的な領域 (特徴点の部分) に気づきます。この特徴点領域の抽出プロセスを実現し、特徴点の一致を抽出することができれば、領域を記述することで実現できます。そこで問題は、どのような点を特徴点として選択するべきかという副問題に発展しました。: 人間の目は画像内の高周波領域に対してより敏感であるため、_sift アルゴリズムhttps://blog.csdn.net/Dr_maker/article/details/121442210

          二次行列とその導出の関連内容については、ここを参照してください。

二次型 - AcWing上位数値https://www.acwing.com/blog/content/35231/

二次微分の導出プロセス? - Zhihu がクラス内の PPT を直接示します。下の図では、a は xT に対応し、b は Ax に対応します。プロセスは、次の公式を直接適用することです。最後のステップ、導出ニーズ... https://www.zhihu.com/question/22455493/answer/131136246?utm_id=0

極値の正確な位置決め_哔哩哔哩_bilibili極値の正確な位置決めは、6.SIFT (Scale Invariant Feature Transform) の 2 番目のエピソードです。関連するビデオ コンテンツの詳細をご覧ください。https://www.bilibili.com/video/BV1Qb411W7cK/?p=2&vd_source=474bff49614e62744eb84e9f8340d91a

        多変量関数のテイラー展開

多変量関数のテイラー展開 -テイラー公式 f(x) = f(x_k)+(x-x_k)f'(x_k)+\frac{1}{2!}(x-x_k)^ 2f''( x_k)+\cdot\cdot\cdot+\frac{1}{n!}(x-x_k)^nf^{(n)}(x_k)+o^n 多変量関数の偏導関数の法則によれば、多変量関数のタイ語を導入できます… https://zhuanlan.zhihu.com/p/490766872

       ヘシアン行列

https://www.cnblogs.com/zywnnblog/p/16605038.html https://www.cnblogs.com/zywnnblog/p/16605038.html        有限差分法

        有限差分法 (絶対に覚えておきたい画像処理) ナレッジポイント解説 (論文情報) - Docin.com有限差分法 (必読画像処理) ナレッジポイント解説 (論文情報) https://www.docin.com/p-1288918830。 html

有限差分 - 画像の偏導出_画像の有限差分の計算方法_wmz13248のブログ-CSDNブログ 関数の偏導出、離散化法を求める - 有限差分_画像の有限差分の計算方法https://blog.csdn .net/wmz13248/article/details/ 120811877

おすすめ

転載: blog.csdn.net/vivo01/article/details/131674983