2013-06-12 46 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