web-dev-qa-db-ja.com

OpenCV ORB Feature Detectorはどのように機能しますか?

ORBの特徴検出器と抽出器を使用して、特徴ベースのアライメントアルゴリズムを実装したい。
これまでのところ、OpenCVから [〜#〜] orb [〜#〜] クラスを使用して機能を抽出しました_ORB orb;_
orb(gray_image,Mat(),features.keypoints,features.descriptors);
そしてopenCVのknnMatch関数を使用してそれらを照合しましたmatcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2);その後、findHomography関数を使用してホモグラフィを見つけようとしていますが、この関数は画像の特徴間で少なくとも4つの一致を必要とします。テストした画像のうち、4枚未満でした。

誰かがこの機能を使用しましたか?それ、またはOpenCVのORBクラス(ORBコンストラクタパラメータの意味)に関するドキュメントはありますか?

追伸これが私の最初の質問です。投稿できるリンクは2つまでです。 opencvのドキュメントについては this を使用してください。

27
Adrian Chitescu

更新:OpenCVドキュメントのisです: http://opencv.itseez.com/modules/features2d/doc/ feature_detection_and_description.html#orb

アルゴリズムの詳細な説明はここにあります: http://www.willowgarage.com/sites/default/files/orb_final.pdf


OpenCVのドキュメントには記載されていませんが、実際にはOpenCVには次のような特徴があります。

2種類の記述子:

  • float記述子:
    • シフト
    • SURF
  • uchar記述子:
    • ORB
    • 簡単な

そして対応するマッチャー:

  • float記述子の場合:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > //2.3.1以降
    • BruteForce<L1<float> >
  • uchar記述子の場合:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased LSHインデックス付き//2.4.0以降

したがって、たとえばORB記述子にBruteForce<Hamming>マッチャーを使用するようにコードを変更する必要があります。 L2またはL1距離を使用してuchar記述子を照合することは可能ですが、結果は正しくなく、findHomographyは満足のいく結果を返しません。

48
Andrey Kamaev