opencv flann库是否支持整数数据?

时间:2011-09-12 16:17:32

标签: opencv

您好我正在尝试对整数数据进行最近邻查询。 看来cv :: flann不支持这个。这是真的吗?

2 个答案:

答案 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