導入にふる(スケール不変特徴変換)
ふる立のためのスケール不変特徴に変換した初めて発表されたのは、2004年には、D.Lowe,ブリティッシュ-コロンビア大学. SIFTは、画像のスケールと回転に対して不変です。 このアルゴリズムは特許を取得しているため、このアルゴリズムはOpenCVのNon-freeモジュールに含まれています。div>
主な利点特徴:個々の特徴は、オブジェクトの大規模なデータベースに一致させることができます
これは7シリー 他の記事が含まれています
- 特徴検出とマッチングの紹介
- ハリスコーナー検出器の紹介
- SURFの紹介(高速化された堅牢な機能)
- FASTの紹介(加速セグ SIFTアルゴリズムには主に4つのステップがあります。 私たちはそれらを一つずつ見るでしょう。
- スケール-スペースピーク選択: 機能を見つけるための潜在的な場所。
- キーポイントローカリゼーション:フィーチャキーポイントを正確に配置します。
- 方向の割り当て:キーポイントに方向を割り当てます。
- キーポイント記述子:キーポイントを高次元ベクトルとして記述します。
- キーポイントマッチング
Scale-space peak Selection
現実世界のオブジェクトは、特定のスケールでのみ意味があります。 あなたはテーブルの上に完全に角砂糖を見るかもしれません。 しかし、天の川全体を見ると、それは単に存在しません。 オブジェクトのこのマルチスケールの性質は、本質的には非常に一般的です。 スケールスペースは、デジタル画像上でこの概念を複製しようとします。div>
画像のスケールスペースは関数ですl(x,y,θ)は、入力イメージとの異なるスケールでのガウス核の畳み込み(ぼかし)から生成されます。 スケール-スペースはオクターブに分離され、オクターブとスケールの数は元の画像のサイズに依存します。 そこで、元の画像のいくつかのオクターブを生成します。 各オクターブの画像サイズは前の半分です。
ぼかし
オクターブ内では、ガウスぼかし演算子を使用して画像が徐々にぼかしられます。 数学的には、「ぼかし」は、ガウス演算子と画像の畳み込みと呼ばれます。 ガウスぼかしには、各ピクセルに適用される特定の式または”演算子”があります。 どのような結果がぼやけた画像です。P>
dog(difference of gaussian kernel)
ここで、これらのぼやけた画像を使用して、別の画像セット、ガウスの差(dog)を生成します。 これらの犬の画像は、画像内の興味深いキーポイントを見つけるのに最適です。 ガウスの差は、2つの異なるπを持つ画像のガウスぼかしの差として得られ、それをπとk πとする。 このプロセスは、ガウスピラミッド内の画像の異なるオクターブに対して行われます。 それは下の画像で表されます:
keypoints
これまで、スケール空間を生成し、スケール空間を使用してガウスの差を計算してきました。 これらは、スケール不変であるガウス近似のラプラシアンを計算するために使用されます。p>
画像内の一つのピクセルがそのピクセルと比較されます次のスケールの9ピクセルと前のスケールの9ピクセルだけでなく、8つの隣接しています。 このようにして、合計26のチェックが行われます。 それが局所極値であれば、それは潜在的なキーポイントである。 基本的には、キーポイントがそのスケールで最もよく表現されることを意味します。
キーポイントローカリゼーション
前のステップで生成されたKey0Pointsは、多くのキーポイントを生成します。 それらのいくつかは、エッジに沿って横たわっている、または彼らは十分なコントラストを持っていません。 どちらの場合も、それらは機能ほど有用ではありません。 だから我々はそれらを取り除く。 この方法は、エッジフィーチャを除去するためにHarris Corner Detectorで使用される方法に似ています。 低い対照の特徴のために、私達は強度を単に点検する。
彼らは、スケール空間のテイラー級数展開を使用して、極値のより正確な位置を取得し、この極値での強度がしきい値(紙ごとに0.03)未満の場合、それは拒否されます。
DoGはエッジに対する応答が高いため、エッジも削除する必要があります。 彼らは主曲率を計算するために2×2ヘッセ行列(H)を使用しました。Div>
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
方向割り当て
今、私たちは正当なキーポイントを持っています。 彼らは安定していることがテストされています。 キーポイントが検出されたスケールはすでにわかっています(ぼやけた画像のスケールと同じです)。 だから我々はスケール不変性を持っています。 次のことは、回転不変にするために各キーポイントに向きを割り当てることです。div>
キーポイントの位置に応じて近傍が取得されますスケール上で、勾配の大きさと方向がその領域で計算されます。 360度をカバーする36個のビンを持つ向きヒストグラムが作成されます。 特定の点(「向き収集領域」内)の勾配方向が18.759度であるとしましょう。 そして、ビンに追加される「量」は、その点での勾配の大きさに比例します。 キーポイントの周りのすべてのピクセルに対してこれを行うと、ヒストグラムはある時点でピークを持ちます。p>
ヒストグラムの最高峰が取られ、その80%を超えるピークは、方位を計算するためにも考慮されます。 同じ場所とスケールでキーポイントを作成しますが、方向は異なります。 それは一致の安定性に貢献します。
キーポイント記述子
この時点で、各キーポイントには位置、スケール、方向があります。 次に、視点および照明の変化のような変化に対して可能な限り非常に特徴的で不変である各キーポイントについての局所画像領域の記述子を計算
これを行うには、キーポイントの周りに16×16のウィンドウが取得されます。 それは4×4サイズの16個のサブブロックに分割されています。
For each sub-block, 8 bin orientation histogram is created.
So 4 X 4 descriptors over 16 X 16 sample array were used in practice. 4 X 4 X 8 directions give 128 bin values. It is represented as a feature vector to form keypoint descriptor. この特徴ベクトルは、いくつかの複雑さを導入します。 指紋を確定する前にそれらを取り除く必要があります。
- 回転依存性特徴ベクトルは勾配の向きを使用します。 明らかに、画像を回転させると、すべてが変わります。 すべての勾配の向きも変化します。 回転の独立性を達成するために、キーポイントの回転は各方向から減算されます。 したがって、各勾配の向きは、キーポイントの向きに相対的です。
- 照明依存性閾値数が大きい場合、照明依存性を達成することができます。 したがって、0.2より大きい(128の)任意の数は0.2に変更されます。 この結果の特徴ベクトルは再び正規化されます。 そして今、あなたは照明独立した特徴ベクトルを持っています!
キーポイントの一致
二つの画像間のキーポイントは、それらの最近傍を識別することによって一致します。 しかし、場合によっては、2番目の最も近い一致が最初の一致に非常に近い場合があります。 ノイズやその他の理由により発生する可能性があります。 その場合、最も近い距離と2番目の最も近い距離の比が取られます。 それが0.8より大きい場合、それらは拒否されます。 それは偽の一致の約90%を排除し、紙に従って5%の正しい一致のみを破棄します。OpenCV(3.4)を使用してsiftを実装できました。 ここで私はそれをやった方法です:
コードのGithubリンク:https://github.com/deepanshut041/feature-detection/tree/master/sift