jlblancoc/nanoflann

nanoflann: a C++11 header-only library for Nearest Neighbor (NN) search with KD-trees

解决的问题

nanoflann 是一个高性能的 C++ 库,专为构建 KD-tree 以执行快速最近邻搜索而设计。它通过消除虚方法调用和避免不必要的数据复制,解决了早期库(如 FLANN)中的性能和内存开销问题。

工作原理

该库使用基于奇异递归模板模式(CRTP)和内联方法的仅头文件实现,以最大化执行速度。它不会将数据集复制到内部矩阵,而是使用适配器接口,让 KD-tree 能直接访问用户自己的数据结构。它支持静态索引和动态索引(例如用于滑动窗口地图的 Bentley-Saxe 对数森林或自平衡树)。

适用对象

主要适用于处理点云、机器人和 N 维数据集的 C++ 开发者,这些开发者需要以最小的内存和 CPU 开销进行精确的最近邻搜索。

亮点

  • 仅头文件:无需编译或安装;只需包含头文件即可。
  • 精确搜索:默认返回精确的最近邻,并提供可选的近似模式。
  • 流形支持:使用 C++17 支持在编译期乘积流形(例如 SO(2)、SO(3)、SE(2)、SE(3)、单位球面和环面)上进行精确最近邻搜索。
  • 动态索引:为随时间变化的数据集(例如 LiDAR 地图)提供增量式和动态 KD-tree 索引。
  • 内存效率:通过适配器直接访问数据,而非复制整个数据集。
  • C++ 标准支持:核心欧几里得功能需要 C++11;流形度量需要 C++17。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目