2013-06-12 71 views
1

还是flann可以吗?我不是最有经验的编码器,我也可能只是被忽视的东西很基本的如何访问由cv :: flann knnsearch发现的最近邻居?

问题(C++,OpenCV的2.4.3。):

我有两个点云,并要计算位移图。我尝试使用flann .lib从第二个云点获取第一个云中点的最近邻点,并使用它们和距离来计算位移矢量(s)。

我走到这一步,是这样的:

int nn = 1; 
cv::Mat MyIndex(data1.size(),3,CV_64FC1); 
cv::Mat MyQuery(data2.size(),3,CV_64FC1); 
cv::Mat indices(data2.size(),1,CV_32SC1); 
cv::Mat distances(data2.size(),3,CV_64FC1); 

cv::flann::Index_<double> NN_Index(MyIndex, cvflann::KDTreeIndexParams(4)); 
NN_Index.knnsearch(MyQuery,indices,distances,nn,cvflann::SearchParams(32)); 

它的工作原理,据我所知道的,我得到了距离,我得到的查询点,我得到了指数。但是,如何从索引中获得与我的查询点相匹配的实际点?

我查看了flann.hpp,但无法找到任何提示。我用MyIndex,NN_Index和索引稍微弄乱了一些,但没有得到任何有用的结果。

回答

0

尝试

for (int queryIdx = 0; queryIdx < MyQuery.rows; ++queryIdx) { 
    int dbIdx = indices.at<int>(queryIdx, 0); 
    std::cout<<"Query Idx:"<<queryIdx<<" matched to "<<"Database Idx:"<<dbIdx<<std::endl; 
} 
+0

因此,它是'COUT << MyQuery.row(ⅰ)<< “匹配” << MyIndex.row(indices.at (I,0)<< ENDL;' ...我想我的最初思路是复杂的,谢谢 – user2478978