OpenCVのFAST検出アルゴリズム

それはコーナー検出来る前述の説明は、画像に対して、特徴点はコーナー検出と、3つのエッジを含むタイプ、OpenCVのフォーカススポットに分割され、実際の角画像特徴点であります次の総画像特徴点検出方法

FAST
SURFは
ORB
BRISKザ
KAZE
AKAZE
MESR
にGFTT良いタック機能
ボブはスポット
STAR
AGAST
  約画像特徴検出アルゴリズム、それぞれ次に、しかし、最初にOpenCVの、キーポイント構造のヘッダ構造定義のデータ構造を理解する必要次のように:

クラスのKeyPoint

{

Point2f PTは; //画像の特徴点の座標

フロートサイズ;直径の//機能周辺

フロート角度、特徴点の//方向、ゼロ〔の値、$ 360)、彼らは、この方向で、負の値を使用して特徴点を認識度が高い可能、又は時には単に座標と直径ていないと述べました偽の特徴点

フロート応答; //応答のレベル、後の使用のために、そのコーナー点程度である度合の強い点の代表、およびソーティング

int型オクターブ;ピラミッド画像の特徴点群//

int型はCLASS_ID; //クラスタIDについて

}

各画像特徴点検出アルゴリズムの最終的な目標の一つ、及び特徴点の画像が検出された場合、それは別の一致特徴点であると類似度に応じて2つの画像の類似度を決定することができます。

例えば、我々のような、このように人間の顔と顔の他の画像の位置を確認し、別の図面における特徴点セットの類似度が高いか否かを検索するように、人の顔の画像内の特徴点を検出することができます。オブジェクト検出、視覚追跡、時間3D再構成における特徴検出アルゴリズムが重要な役割を担っています。

A汎用インタフェース画像特徴点検出
  すべて、でのPTRクラステンプレートと呼ばれるOpenCVのユーザーを容易にするために検出された特徴点の全てが同様のAPIに封入されている画像特徴点検出アルゴリズムを使用して、特徴検出アルゴリズムは、同様の方法を用いて、画像特徴点検出の検出、同じ言い訳を得る。
  のPtr <対応する特徴点検出クラス名> =変数名を特徴点検出基づい::作成()に対応する
  変数名- >検出します(原画像、特徴点ベクトル)
  アルゴリズムを使用しては、ほとんどすべて。但し、オーバーロードされた複数の機能画像特徴検出アルゴリズムを呼び出すことができ、それが空である場合、画像検出アルゴリズムの各々が自分が使用され、関数を作成上記初期クラスのデフォルトの初期値、あなたはパラメータを変更したい場合は、検出の異なるタイプを作成する必要が、異なる初期化変数を提供する関数呼び出し。
  さらに、として、画像の特徴点を、高速OpenCVの機能表示を提供しながら、
  drawKeyPoints (結果画像特徴点ベクトルセット、出力カラーレンダリング、レンダリングモードの値が描画キャンバス)
  一般的には、キャンバスは、我々の検出機能の画像を使用します 原画像は、(典型的には、アルゴリズムの複雑さが簡単である特徴点は、元の画像を検出した後にグレースケール画像に変換されている検出)。
  DrawMatchesFlagsの列挙された描画モードは、以下の方法で選択することができる
  デフォルト:唯一の特徴点座標点描き、画像は小さなドットの座標上に表示され、各特徴点の中心座標は、小さなドットがある。
  DRAW_OVER_OUTIMGは:関数は、出力画像を作成しませんが、出力画像変数のスペース自体に直接描画するには、可変出力イメージが必要良いサイズと種類の変数が初期化されている、の良い初期化され
  た特徴点のシングルポイントNOT_DRAW_SINGLEが描かれていません
  描画するときDRAW_RICH_KEYPOINTは、特徴点をプロットした方向の円であり、この方法はまた、座標、サイズ、および画像の向き、最良の方法を示す特性図を示しているが、欠点は、結果があまりにも面倒プロットされています。

A. FAST特徴検出アルゴリズム
FASTアルゴリズムは、画像特徴点検出角度に基づいています。

特徴点検出アルゴリズムの最初のステップは、特徴点であるかを定義することで、特徴点を定義FASTアルゴリズムは、画素と異なる領域内の画素の十分な数を囲む他の領域場合、画素点を、特徴点であるということです十分なグレースケール画像、すなわちグレー値の異なるグレー値と周辺画素点は、次に画素点は特徴点です。

次のようにアルゴリズムの詳細な算出工程であります

取得された点の画素値を、画像から座標点を選択し、次の点が特徴点であるか否かが判断される
半径の中心三ブレゼンハム円(離散対数を計算する円形軌道に等しいように座標点を選択するための選択積分円トラックポイントをもたらす)、一般的には、円上の16点は、図3に示します。
ここに画像を挿入説明

黒の点座標(0、0)、ステップ1の座標

閾値がTであると仮定される選択今、キー工程は、それは16点が、N個の連続画素があると仮定される、それらの輝度値と中心点の画素値との差がtよりもより大きいか小さい場合、この点は、特徴であります点(特徴点とき以降の処理、データサンプルの比較的多くの量、より取得することができるので、9又は12の一般的な値のn値は、図9に示すように、より良い結果を達成することが証明しました)。
各トラックポイントにトラバーサルが必要加え、比較的長い時間が必要その後、比較的単純な方法があり、それが唯一の4つの画素位置1,9,5及び13点の位置でチェックされ、選択することができ、第一検出位置及び位置9、それらの閾値よりも暗い又は閾値は、検出された位置5よりも軽い場合および位置13、P「役割=」プレゼンテーション「スタイル=」ワードラップする場合:通常、最大幅:なし、最大高さ:なし;最小幅:0PX;最小高さ:0PX;フロート:なし;「idは=」MathJax要素-8-フレーム「>中心点が4つの画素で、コーナー点では、少なくとも3でなければなりません大きいIP + tよりも「役割=」プレゼンテーション「スタイル=」ワードラップ:ノーマル;最大幅:なし;最大高さ:なし;分幅:0PX;分の高さ:0PX;フロート:なし;「ID =「MathJax要素-9-フレーム」>中心点の輝度値+閾値以下IP-Tよりも「役割=」プレゼンテーション「スタイル=」ワードラップ:通常、最大幅:なし、最大高さ:なし;分-width:0PX;最小高さ:0PX;フロート:なし;「ID =」MathJax元素10フレーム「>中心点の輝度値 - 閾値、角度Aならため 最大幅:.なし;最大高さノーマル:なし;最小幅決意条件が、その後、P「ロール=」プレゼンテーション「スタイル=」ワードラップを満たしていない場合はより多くの円形部分のより四分の三を満たしている必要があります:0PX;最小高さ:0PX;フロート:なし。
しかし、この検出方法は、高周波数の画像を繰り返し発生における複数の特徴点を特徴点クラスタの効果を引き起こしている問題をもたらす、FASTアルゴリズムは、非最大抑制アプローチを提案し以下の具体的な対策は、この状況を解消する。
検出された各特徴点について、その振幅応答(スコア関数)VVを算出します。VVは、16個の画素の絶対偏差と中心点とその周囲と定義される。
二つの隣接する特徴点を考慮し、それらの値VVを比較する
VV値のポイントが削除される低下
  の特徴点の迅速な検出よりも次のOpenCVで定義された特徴点APIの迅速な検出アルゴリズムの検出原理

静的ptrが、(int型のしきい値= 10、BOOL nonmaxSuppression = trueを作成します

                             int type=FastFeatureDetector::TYPE_9_16 );

第三の工程と比較した場合には、閾値t、高速の検出結果は、ケースをクラスタ化が見つかった場合、非極大抑制する第5のステップは、それができるかどうかを代表nonmaxSuppressionであるエッジ点とトラックの中心点の閾値を指し、FastFeatureDetector列挙、以下の値から三番目のパラメータタイプの値を考慮してください。

TYPE_5_8 5点が特徴点という条件を満たして存在する場合、トラック8つの点から取ら。
TYPE_7_12が軌道に12ポイントを取って、7条件は、特徴点である、満足される。
TYPE_9_16テイクトラック16点、9条件が満たされたときに、特徴点がある。
  要約すると、我々が見ることができ、高速検出アルゴリズムはないマルチスケール問題を行い、その計算速度は比較的速いですが、ときに、よりノイズにエラーが特徴点は、より堅牢発生絵で性は良好ではなく、アルゴリズムの効果は、閾値tにさらに依存しています。無FAST FASTマルチスケール機能と特徴点は、回転不変性を失う方向情報ではない。しかし、このようなビデオ監視対象認識などのリアルタイム要件、の場合に、使用することができます。

#include "stdafx.h"
#include<opencv2\opencv.hpp>
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/features2d/features2d.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
	Mat img = imread("1.jpg");
	Mat grayimg;
	cvtColor(img, grayimg, CV_RGB2GRAY);
	Ptr<FeatureDetector> fast = FeatureDetector::create("FAST");
	vector<KeyPoint> keypoint1;
	fast->detect(grayimg, keypoint1);
	Mat img2;
	drawKeypoints(grayimg, keypoint1, img2, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
	imshow("结果图", img2);
	waitKey(0);
    return 0;
}

ここに画像を挿入説明

公開された47元の記事 ウォンの賞賛3 ビュー1424

おすすめ

転載: blog.csdn.net/weixin_42076938/article/details/105234654