jlblancoc/nanoflann

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

解決する問題

nanoflann は、高速な最近傍探索のためのKDツリーを構築する高性能C++ライブラリです。仮想メソッド呼び出しを排除し、不要なデータ複製を避けることで、以前のライブラリ(FLANNなど)に見られたパフォーマンスとメモリオーバーヘッドの問題に対処しています。

仕組み

このライブラリは、Curiously Recurring Template Pattern(CRTP)とインラインメソッドに基づくヘッダーのみの実装を使用して、実行速度を最大化します。データセットを内部行列にコピーする代わりに、アダプタインターフェースを使用して、KDツリーがユーザー自身のデータ構造に直接アクセスできるようにします。静的インデックスと動的インデックス(スライディングウィンドウマップ用のBentley-Saxe対数フォレストや自己平衡ツリーなど)の両方をサポートしています。

対象ユーザー

主に、点群、ロボティクス、N次元データセットを扱うC++開発者向けで、最小限のメモリとCPUオーバーヘッドで正確な最近傍探索を必要とする方々です。

ハイライト

  • ヘッダーのみ:コンパイルやインストールは不要で、ヘッダーファイルをインクルードするだけです。
  • 正確な探索:デフォルトで正確な最近傍を返し、オプションで近似モードも利用可能です。
  • 多様体サポート:C++17を使用して、コンパイル時の積多様体(例:SO(2)、SO(3)、SE(2)、SE(3)、単位球面、トーラス)上での正確な最近傍探索をサポートします。
  • 動的インデックス:LiDARマップなど、時間とともに変化するデータセット向けの増分および動的KDツリーインデックスを提供します。
  • メモリ効率:データセット全体をコピーするのではなく、アダプタを介してデータに直接アクセスします。
  • C++標準サポート:コアのユークリッド機能はC++11、多様体メトリクスはC++17が必要です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト