c++ - 使用 FLANN 计算半径中的精确最近邻时出错

标签 c++ nearest-neighbor flann exact-match approximate-nn-searching

我正在尝试在大型 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);

最佳答案

尝试 nanoflann .它专为低维空间而设计,并提供精确最近邻。此外,它只是一个头文件,您可以“安装”或复制到您的项目中。

关于c++ - 使用 FLANN 计算半径中的精确最近邻时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332402/

相关文章:

r - 如何正确使用K近邻?

c++ - 尽管随机初始化,但K均值聚类中心每次运行都相同

c++ - 如何根据类型为元组元素创建专门的函数

c++ - 关于线程数的奇怪现象

hash - 局部敏感哈希 (LSH) 如何工作?

c - 将 2D 数组的 1D 索引最近邻映射到更小的 2D 数组

c++ - 最近的邻居用nanoflann搜索

c# - Opencv Surf和FlannIndex在图像数据库中查找图像

c++ - 使用 C++ 创建处理 RTL 语言和复杂脚本的 PDF

c# - 如何设计应从 C++ 和 C# 访问的组件