2011-09-12 75 views

回答

1

不,FLANN僅用於浮點描述符。儘管文檔不完整,必須謹慎使用OpenCV的匹配器和描述符集。

有一個bug report on the ros trac更詳細說明,但基本上描述符和匹配器僅處理特定類型的數據,而這必須得到遵守。我已經包括從這裏前面提到的頁面引用的摘錄:

描述符:
浮動描述:SIFT,SURF
UCHAR描述:ORB簡單

匹配器:
浮法描述: FlannBased暴力破解暴力破解-L1
爲UCHAR描述:猜解,海明猜解,HammingLUT

3

ÿ es,可以在整數數據上使用FLANN最近鄰搜索。您需要使用整數的距離度量。一段距離措施是模板,數據類型參數化(如在下面的例子中),其他人硬編碼類型(例如HammingLUT具有unsigned 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