2013-06-12 2 views
1

Или это возможно даже с фланном? Im не самый опытный верстальщик, я также мог бы быть просто вид что-то действительно основногоКак получить доступ к ближайшим соседям, найденным cv :: flann knnsearch?

Проблемы (C++, OpenCV 2.4.3.):

У меня есть два pointclouds и хотим, чтобы вычислить карту смещения. Я пытаюсь использовать flann .lib, чтобы получить ближайшего соседа к точке в первом облаке из точек второго облака и использовать их и расстояние, чтобы вычислить вектор (ы) смещения.

То, что я получил до сих пор это:

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

Так что 'соиЬ << MyQuery.row (я) << "согласованы" << MyIndex.row (indices.at (г, 0) << End L,; ' ... Я думаю, что мой первоначальный ход мысли был сложным. – user2478978

Смежные вопросы