Features2D + Homography という名前のこの基本的なチュートリアルを見て、既知のオブジェクトを見つけてみましょう。SurfFeatureDetector を使用して特徴を検出します。
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_object, keypoints_scene;
detector.detect( img_object, keypoints_object );
detector.detect( img_scene, keypoints_scene );
次に、SurfDescriptorExtractor
検出された特徴を使用して記述子 (特徴ベクトル) を計算します。
私の質問は次のとおりです。
- 独自の特徴検出器を作成したい場合 (たとえば、Trajkovic または Harris アルゴリズムを使用)、どの Descriptor Extractor を使用すればよいですか?
- SurfFeatureDetector で見つかった機能は、単なる共通点ですか、それとも点の領域ですか?
****追加**** _
1) この例では、特徴検出の Surf アルゴリズムが使用されました。私は独自のアルゴリズム (Trajkovic) を作成しましたが、うまく機能します - すべてのコーナー (画像の特徴) が見つかりました。次に、例で使用されているように、SurfDescriptorExtractor を使用しようとします。問題は、SurfDescriptorExtractor が作成したポイントを正しい方法で使用したくないことです (結果の画像は間違った接続で表示されます。つまり、エクストラクタはベクトルを正しく計算しませんでした)。
2)opencvを使用して正確に作成する必要があります。それがポイントです。
3)「特徴検出器」は、画像上のキーポイント(特徴またはコーナー)を見つけようとするアルゴリズムです。「記述子抽出器」は、キーポイントの位置と方向を最もよく理解するために特徴ベクトルを計算するアルゴリズムです。
4) 結論として、例では、すべてのキーポイントが両方の画像で接続され (チュートリアルの最後の写真でわかるように)、長方形で強調表示されます。しかし、Trajkovic アルゴリズムを使用すると、間違った方法で接続されたため、強調表示された四角形がありません。