19

ORB 記述子で FLANN を使用しようとしていますが、次の単純なコードで opencv がクラッシュします。

vector<vector<KeyPoint> > dbKeypoints;
vector<Mat> dbDescriptors;
vector<Mat> objects;   

/*
  load Descriptors from images (with OrbDescriptorExtractor())
*/

FlannBasedMatcher matcher;

matcher.add(dbDescriptors); 
matcher.train() //> Crash!

私が使用するSurfDescriptorExtractor()と、うまく機能します。

どうすればこれを解決できますか?

OpenCV 言います:

OpenCV Error: Unsupported format or combination of formats (type=0
) in unknown function, file D:\Value\Personal\Parthenope\OpenCV\modules\flann\sr
c\miniflann.cpp, line 299
4

4 に答える 4

34

Flann は記述子を CV_32F 型にする必要があるため、それらを変換する必要があります! find_object/example/main.cpp :

if(dbDescriptors.type()!=CV_32F) {
    dbDescriptors.convertTo(dbDescriptors, CV_32F);
}

うまくいくかもしれません;-)

于 2012-08-03T15:20:45.880 に答える
7

バグです。すぐに修正されます。

http://answers.opencv.org/question/503/how-to-use-the-lshindexparams/

于 2012-07-27T21:24:50.267 に答える
7

ORB を使用する場合は、マッチャーを次のように構築する必要があります。

FlannBasedMatcher matcher(new cv::flann::LshIndexParams(5, 24, 2));

私はまた、このコンストラクターが提案されているのを見てきました:

FlannBasedMatcher matcher(new flann::LshIndexParams(20,10,2));
于 2015-04-20T19:49:38.323 に答える
5

バイナリ文字列記述子- ORB、BRIEF、BRISK、FREAK、AKAZE など。

浮動小数点記述子- SIFT、SURF、GLOH など。


バイナリ記述子の特徴マッチングは、浮動小数点記述子に使用されるユークリッド距離とは対照的に、ハミング距離を比較することで効率的に実行できます。

OpenCV でバイナリ記述子を比較するには、FLANN + LSH インデックスまたはブルート フォース + ハミング距離を使用します。

http://answers.opencv.org/question/59996/flann-error-in-opencv-3/


デフォルトでは、FlannBasedMatcher は L2 ノルムの KDTreeIndex として機能します。これが、SIFT/SURF 記述子でうまく機能し、ORB 記述子の例外をスローする理由です。

バイナリ機能とローカリティ センシティブ ハッシュ (LSH)

2 進記述子と浮動小数点記述子のパフォーマンス比較

于 2018-10-24T13:22:58.503 に答える