2011-09-12 3 views

答えて

1

いいえ、FLANNは浮動小数点記述子専用です。 OpenCVのマッチャーと記述子のセットは注意深く使用されなければなりません。

さらに詳しく説明するとbug report on the ros tracですが、基本的には記述子とマッチャーは特定の種類のデータのみを処理します。これは尊重する必要があります。

記述子:
フロート記述子:SIFT、SURF
UCHAR記述子:ORBのBRIEF

マッチャー:フロート記述子の
私が参照するために、ここで前述したページからの抽出物が含まれていました: UCHAR記述子のFlannBasedブルートフォースブルートフォース-L1
:ブルートフォース - ハミングブルートフォース - HammingLUT

3

Y整数データに対してFLANN最近傍検索を使用することは可能です。あなたは整数のための距離測定を使用する必要があります。距離尺度の中には、テンプレートであり、データ型でパラメータ化されたもの(下の例のように)、他のものはハードコード化されたタイプ(例えばHammingLUTunsigned char要素タイプ、int結果独自の距離測定を実装することもできます。詳しくは、<opencv2/flann/dist.h>を参照してください。

例 - unsigned charデータを使用しているコードからの引用:

// we use euclidean distances on unsigned chars: 
typedef cv::flann::L2<unsigned char> Distance_U8; 
cv::flann::GenericIndex<Distance_U8> * m_flann; 

// ... 
// we have 3d features 
cv::Mat features(features_count, 3, CV_8UC1); 

// ... fill the features matrix ... 

// ... build the index ... 
m_flann = new cv::flann::GenericIndex<Distance_U8> (features, params); 

// ... 

// how many neighbours per query? 
in knn = 5; 
// search params - see documentation 
cvflann::SearchParams params; 

// prepare the matrices 
// query data - unsigned chars, 3d (like features) 
cv::Mat input_1(n_pixels, 3, CV_8UC1), 
     // indices into features array - integers 
     indices_1(n_pixels, knn, CV_32S), 
     // distances - floats (even with integer data distances are floats) 
     dists_1(n_pixels, knn, CV_32F); 

m_flann->knnSearch(input_1, indices_1, dists_1, 1, params); 
+0

こんにちは@artm - このコードサンプルから取られていますか? ipはオープンソースですか?ありがとう。 – rkellerm

+0

はい、このプロジェクトのものです:https://github.com/v2lab/vote-counter – artm

+0

ありがとうございます!私はちょうどこのような例を探していた。 – rkellerm

関連する問題