opencv の共通キーポイント検出アルゴリズムを 1 つの記事で取得します (コード付き)

導入

画像にコーナー点がある場合、オブジェクトの端にある点、または特別な位置にある点が存在します。コーナー検出は、コンピュータ ビジョン システムで画像の特徴を取得する方法です。動き検出、画像マッチングのための方法です。 、ビデオトラッキング、3次元 再構築と物体認識の基礎。
この記事では、opencv で一般的に使用されるいくつかのコーナー検出方法の原理と、C++ に基づくその実装について紹介します。

ハリスコーナー検出

ハリス コーナーの原理: 長方形のフレームを設定し、画像内に長方形のフレームを配置し、長方形のフレーム内のピクセルを合計し、長方形のフレームを移動します。ボックスの内側にハリスのコーナーがあります。
通常、それが現れる場所: 直線の端点、直線の交点、直線の変曲点。
しかし、上記の検出原理で検出すると非常に面倒であり、枠内に角点がある場合、その長方形枠の移動方向や角点の具体的な位置を特定することが困難である。
したがって、プログラムでは通常、検出は次の方法で実行されます。 1. ハリス コーナー検出関数を次のように定義します

ここに画像の説明を挿入

このうち、M は勾配共分散行列で、次の式で表されます。
3. 次に、ハリスの角評価関数を使用して、長方形の枠内に角点があるかどうかを判断します
ここに画像の説明を挿入

ここで、det は行列の行列式、k はカスタム定数、tr は行列のトレースです。上記の方法による計算は比較的高価であるため、評価には次の方法を使用します
ここに画像の説明を挿入

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

Harris コーナー検出のコードは次のとおりです

ここに画像の説明を挿入

操作結果:

ここに画像の説明を挿入

シトーマスコーナー検出

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

この評価関数では、評価係数は λ1 と λ2 のうち小さい方の値をとり、R を用いてカスタム閾値と比較し、小さい固有ベクトルがすべて条件を満たしたとき、その点はコーナー点となるはずです。
以下の図に示すように、小さい固有ベクトルが条件を満たす場合、コーナー領域は図の緑色の領域であり、これはコーナー点である必要がありますが、図のオレンジ色の領域は端に位置する可能性があり、灰色の領域はコーナー点である必要があります。エリアはコーナーポイントであってはなりません。

ここに画像の説明を挿入

Shi-Tomas コーナー検出コードは次のとおりです。
ここに画像の説明を挿入

実行結果

ここに画像の説明を挿入

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

上記のコーナー点検出アルゴリズムにより、元の画像からコーナー点の位置を検出できますが、関数をよく観察すると、検出されたコーナー点の座標はすべて整数値であることがわかります。ピクセルで構成され、離散的です。より詳細なコーナー座標を取得したい場合は、コーナー位置を最適化する必要があります。
最適化の原理は下図に示すとおりで、画素点qがコーナー点の場合、qを始点、その周囲の点p1またはp0を終点とした自領域付近の極大値となります。ベクトルを作成し、勾配を計算します。この時点で、ベクトルと勾配の積は 0 になるはずです。
ここに画像の説明を挿入

opencv でコーナー点が検出された場合(この時のコーナー点の位置は正確ではありません)、一定の精度または反復回数に達するまで、この原理に従ってコーナー点 q の位置を調整し続けます。
実際の計算プロセスでは、通常、次の式で計算されます
ここに画像の説明を挿入

qと周囲の点ベクトルと勾配の積を合計し、その合計が一定値以下になった場合に一定の精度に達していると判断します。
サブピクセルレベルのコーナー位置最適化コードは次のとおりです

ここに画像の説明を挿入

実行結果

最適化された角の位置に小数点が表示され、その位置が最適化されたことがわかります。

高速コーナー検出

他のコーナー検出方法と比較して、FAST コーナー検出方法の精度は比較的低いですが、FAST の利点も非常に明白であり、その名前のように、FAST は高速であり、計算速度が速く、リソース消費が少ないです。コンピューティング リソース (組み込みデバイスに基づく SLAM ロボットなど) が広く使用されています。
FAST コーナー検出の原理は次のとおりです。
1. 画像内の点 p を選択し、そのピクセル値を Ip と仮定します。 2.
以下の図に示すように、点 p の周りの 16 ピクセルをカバーする半径 3 の円を描きます。
3. 閾値 t を設定し、周囲 16 個の画素のうち連続する n 個の画素の画素値が (Ip−t) 未満または (Ip+t) より大きい場合、点 p がコーナー点であると判断します。OpenCV の実装では、n の値は 12 (16 ピクセルの周囲の 3/4)
4. より高速な改善方法は、まず点 p の周囲の 4 つの点、つまり 1、5、9、12 を検出します。 4 点が 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 に似ています。
SIFT 特徴点検出については、この記事をご覧ください (https://blog.csdn.net/wuzhongqiang/article/details/123969628?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168786332316800186532255%252 2%252) C% 2522scm %2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168786332316800186532255&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog - 2 すべて first_rank_ecpm_v1~rank_v31_ecpm-2-123969628-null-null.142%5Ev88% 5Econtrol_2、239%5Ev2%5Einsert_chatgpt&utm_term=opencv%20sift%E7%89%B9%E5%BE%81%E7%82%B9%E5%8C%B9%E9%85%8Dc%2B%2B&spm=1018.2226.3001.4187)
その他検出方法はあまり拡張されず、インターネット上の情報を検索して学習できます。

WeChat Computer Vision Workshop公式アカウントから転送

おすすめ

転載: blog.csdn.net/limingmin2020/article/details/132269235