Ошибка в вычислении точных ближайших соседей по радиусу с FLANN

Я пытаюсь найти точное количество соседних узлов в большом наборе данных 3D-точек. Целью каждой точки набора данных является получение всех возможных соседей в регионе с заданным радиусом. FLANN гарантирует, что для данных меньшего размера можно получить точных соседей, в то время как по сравнению с поиском методом грубой силы это не так. Соседи необходимы для дальнейших расчетов, и поэтому мне нужно точное число. Я немного увеличил радиус, но, похоже, проблема не в этом. Кто-нибудь знает, как вычислить точных соседей с FLANN или другой библиотекой C ++?

Код:

// All nodes to be tested for inclusion in support domain.
flann::Matrix<double> query_nodes = flann::Matrix<double>(&nodes_pos[0].x, nodes_pos.size(), 3);

// Set default search parameters
flann::SearchParams search_parameters = flann::SearchParams();
search_parameters.checks = -1;
search_parameters.sorted = false;
search_parameters.use_heap = flann::FLANN_True;

flann::KDTreeSingleIndexParams index_parameters = flann::KDTreeSingleIndexParams();
flann::KDTreeSingleIndex<flann::L2_3D<double> > index(query_nodes, index_parameters);
index.buildIndex();

//FLANN uses L2 for radius search.
double l2_radius = (this->support_layer_*grid.spacing)*(this->support_layer_*grid.spacing);
double extension = l2_radius/10.;
l2_radius+= extension;

index.radiusSearch(query_nodes, indices, dists, l2_radius, search_parameters);

1

Решение

Вы должны проверить страницу 6+ из Flann-руководство, для точной настройки параметров поиска, таких как target_precision, который должен быть установлен в 1, для «максимальной» точности.

Этот параметр часто встречается как epsilon (ε) в Приближенном поиске ближайшего соседа (ANNS), который используется в большой размер пробелы, чтобы (попытаться) победить проклятие размерности. Насколько я могу судить, FLANN обычно используется в 128 измерениях, а не в 3, что может объяснить плохую производительность, которую вы испытываете.

библиотека, которая хорошо работает в 3-х измерениях CGAL. Однако он намного больше, чем FLANN, потому что это библиотека для вычислительной геометрии, поэтому он обеспечивает функциональность для многих задач, а не только для NNS.

0

Другие решения

Других решений пока нет …