您好我正在尝试对整数数据进行最近邻查询。 看来cv :: flann不支持这个。这是真的吗?
答案 0 :(得分:3)
是的,可以对整数数据使用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);
答案 1 :(得分:1)
不,FLANN仅用于浮点描述符。虽然记录不完整,但必须仔细使用OpenCV的匹配器和描述符集。
有一个bug report on the ros trac更详细地解释,但基本上描述符和匹配器只处理某些类型的数据,这必须得到尊重。我在此处提到了前面提到的页面的摘录供参考:
描述符:
浮点描述符:SIFT,SURF
uchar描述符:ORB简介匹配器:
浮点描述符:FlannBased BruteForce BruteForce-L1
对于uchar描述符:BruteForce-Hamming BruteForce-HammingLUT