2011-09-12 55 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