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が必要です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト