CVのキーポイント検出

ここに移ったのを財団のせいにしないで、自分で学んでください~~

画像にコーナー点がある場合、オブジェクトの端にある点、または特別な位置にある点が存在します。コーナー検出は、コンピュータ ビジョン システムで画像の特徴を取得する方法です。動き検出、画像マッチングのための方法です。 、ビデオトラッキング、3次元 再構築と物体認識の基礎。

ここでは、opencv で一般的に使用されるいくつかのコーナー検出方法の原理と、C++ に基づくその実装を紹介します。

ハリスコーナー検出

ハリス コーナーの原理: 長方形のフレームを設定し、画像内に長方形のフレームを配置し、長方形のフレーム内のピクセルを合計し、長方形のフレームを移動します。ボックスの内側にハリスのコーナーがあります。

通常、それが現れる場所: 直線の端点、直線の交点、直線の変曲点。

しかし、上記の検出原理で検出すると非常に面倒であり、枠内に角点がある場合、その長方形枠の移動方向や角点の具体的な位置を特定することが困難である。

したがって、プログラムでの検出には次の方法が一般的に使用されます。 1. Harris コーナー検出関数を次のように定義します。

ここで、M は勾配共分散行列であり、次の式で表されます。

3. 次に、ハリスの角評価関数を使用して、長方形のフレームに角があるかどうかを判断します。

ここで、det は行列の行列式、k はカスタム定数、tr は行列のトレースです。上記の方法で計算すると消費量が多くなってしまうため、以下の方法で評価してください。  

ここで、 λ は勾配共分散行列 M の固有ベクトルです。この評価係数によれば、評価係数が大きい場合には長方形の枠内に角が存在する可能性がありますが、評価係数が小さい場合には保持枠内に角が存在してはならないことになります。具体的な理由は、下図に示すように、λ1 と λ2 の両方の値が大きい場合、コーナー点があるに違いないと判断でき、一方の値が他方よりも大幅に大きい場合、 R 値も非常に大きくなりますが、現時点では非常に困難です。「エッジ」領域に位置する可能性があり、評価精度もカスタム定数 k に大きく関係します。 Harris コーナー検出のコードは次のとおりです。  

実行結果:  Shi-Tomas コーナー検出

前のセクションで紹介したハリス コーナーの計算方法では、最終的に問題があることがわかりました。コーナー検出の精度はカスタム定数 k と大きく関係しており、Shi-Tomas コーナー検出はハリス コーナー用です。評価係数の計算方法を再定義して改善しました。

この評価関数では、評価係数は λ1 と λ2 のうち小さい方の値をとり、R を用いてカスタム閾値と比較し、小さい固有ベクトルがすべて条件を満たしたとき、その点はコーナー点となるはずです。

以下の図に示すように、小さい固有ベクトルが条件を満たす場合、コーナー領域は図の緑色の領域であり、これはコーナー点である必要がありますが、図のオレンジ色の領域は端に位置する可能性があり、灰色の領域はコーナー点である必要があります。エリアはコーナーポイントであってはなりません。

Shi-Tomas コーナー検出コードは次のとおりです。  

 操作結果:

サブピクセルレベルのコーナー位置の最適化

上記のコーナー点検出アルゴリズムにより、元の画像からコーナー点の位置を検出できますが、関数をよく観察すると、検出されたコーナー点の座標はすべて整数値であることがわかります。ピクセルで構成され、離散的です。より詳細なコーナー座標を取得したい場合は、コーナー位置を最適化する必要があります。

最適化の原理は下図に示すとおりで、画素点qがコーナー点の場合、qを始点、その周囲の点p1またはp0を終点とした自領域付近の極大値となります。ベクトルを作成し、勾配を計算します。このとき、ベクトルと勾配の積は 0 になる必要があります。

opencv でコーナー点が検出された場合(この時のコーナー点の位置は正確ではありません)、一定の精度または反復回数に達するまで、この原理に従ってコーナー点 q の位置を調整し続けます。

実際の計算プロセスでは、通常、次の式で計算されます。

qと周囲の点ベクトルと勾配の積を合計し、その合計が一定値以下になった場合に一定の精度に達していると判断します。

サブピクセルレベルのコーナー位置最適化コードは次のとおりです。

 実行結果:最適化されたコーナー位置に小数点が付いていることがわかり、位置が最適化されたことがわかります。

高速コーナー検出

他のコーナー検出方法と比較して、FAST コーナー検出方法の精度は比較的低いですが、FAST の利点も非常に明白で、その名前 - FAST のように、高速であり、高速な計算速度と低リソース消費を備えています。コンピューティング リソースが限られている状況 (組み込みデバイスに基づく SLAM ロボットなど) で広く使用されています。

FAST コーナー検出の原理は次のとおりです。

1. ピクセル値を Ip と仮定して、画像内の点 p をランダムに選択します。

2. 以下の図に示すように、点 p の周りの 16 ピクセルをカバーする半径 3 の円を描きます。

3. 閾値 t を設定し、周囲 16 個の画素のうち連続する n 個の画素の画素値がすべて (Ip−t) より小さいか、または (Ip+t) より大きい場合、点 p はコーナーであると判定します。ポイント。OpenCV 実装では、n の値は 12 (16 ピクセルの周囲の 3/4) となります。

4. より高速な改善方法は、まず点 p の周囲の 4 点、つまり 4 つの点 1、5、9、12 のうちの 3 点が Ip+t を満たすかどうかを検出し、満たさない場合は直接スキップします。 , その後、引き続き前のアルゴリズムを使用して、16 点のうち 12 点が条件を満たすかどうかを判断します。FASTコーナー検出コードは次のとおりです。 実行結果は次のとおりです。FAST の欠点も明らかです。

1. スケール不変性を持たない

2. 回転不変性を持たない

3. ノイズの影響を受けやすい

ORB 特徴点検出は、上記の欠点に対処するために特別に改良されており、高速な計算速度の利点を維持しながら FAST をより堅牢にしています。

ポイント検出による ORB 機能

ORB の正式名は ORiented Brief で、FAST コーナー検出と BRIEF 機能の説明を組み合わせて改良しています。

(1) BRIEF アルゴリズムの回転不変性を解決するには、特徴点の主方向を計算する必要があります。ORB は、重心を使用して次のように計算します ((x, y) はフィーチャ近傍内の点です)。

1. 画像の瞬間を計算する

2. 長方形領域の重心を計算します。

3. FAST コーナーポイントと重心を接続して方向ベクトルを取得します 

得られたθ値がFAST特徴点の主方向となります。

(2) バイナリコード化された記述子である BRIEF 記述子は、特徴点を記述するために領域グレー ヒストグラムを使用する従来の方法を放棄し、特徴記述子の確立を大幅に高速化します。

特徴点を中心として、SxSの近傍ウィンドウを取ります。ウィンドウ内のペア (2 つ) の点をランダムに選択し、2 つのピクセルのサイズを比較し、次のバイナリ割り当てを実行します。

ウィンドウ内で n 個のランダムな点のペアをランダムに選択し、それらを回転してから識別を実行します。その後、上記のステップのバイナリ割り当てを繰り返して、特徴点の記述であるバイナリ コード、つまり特徴記述子を形成します。 。(通常 N=256)

ORB特徴点検出コードは以下のとおりです。

操作結果: 

要約する

非常に一般的に使用され、古典的な特徴検出アルゴリズムには、SIFT アルゴリズムと SUFT アルゴリズムが含まれます。これら 2 つのアルゴリズムは特許出願中であり、市販されていません。opencv で実装する場合は、まず opencv_contrib 拡張パッケージを構成し、次にヘッダー ファイルをインクルードし、次に初期化する必要がありますORB 検出のメソッドは Ptrsift = SIFT::create に似ています。

BaiduによるSIFT特徴点検出について

他の検出方法はあまり拡張されない

wwwosoft あなたはhttp://143ai.com にアクセスします 

おすすめ

転載: blog.csdn.net/qq_29788741/article/details/132307311