В настоящее время я пытаюсь найти ближайших соседей (NN) точки в ее пространстве признаков, используя модуль FLANN из библиотеки PCL.
Точки, которые я пытаюсь сравнить, представляют собой дескрипторы RIFT в форме pcl::Histogram<32>
, поскольку я использую 4 ячейки для расстояния и 8 для градиента (как в оригинальной статье).
Мне интересно, какую меру расстояния я должен использовать, поскольку по умолчанию используется норма L2, которая кажется слабой при сопоставлении точек в пространстве пространственных объектов с высокой размерностью.
Я использую индекс KdTreeMultiIndexCreator
FLANN для ускорения поиска.
Я обязан использовать фланговый модуль, как показано ниже:
// Useful types
typedef pcl::Histogram<32> FeatureT;
typedef flann::L2<float> DistanceT;
typedef pcl::search::FlannSearch<FeatureT, DistanceT> SearchT;
typedef typename SearchT::FlannIndexCreatorPtr CreatorPtrT;
typedef typename SearchT::KdTreeMultiIndexCreator IndexT;
typedef typename SearchT::PointRepresentationPtr RepresentationPtrT;
// Instantiate search object with 4 randomized trees and 128 checks
SearchT search (true, CreatorPtrT (new IndexT (4)));
search.setPointRepresentation (RepresentationPtrT (new DefaultFeatureRepresentation<FeatureT>));
search.setChecks (128); // The more checks the more precise the solution
// search_cloud is filled with the keypoints to match
search.setInputCloud (search_cloud);
search.nearestKSearch(point_to_match, 1, indices, distances);
Итак, какова наилучшая мера расстояния, доступная во FLANN для решения моей проблемы?