jlblancoc/nanoflann

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

해결하는 문제

nanoflann은 빠른 최근접 이웃 탐색을 위한 KD-트리를 구축하도록 설계된 고성능 C++ 라이브러리입니다. 가상 메서드 호출을 제거하고 불필요한 데이터 복제를 피함으로써 이전 라이브러리(예: FLANN)에서 발견된 성능 및 메모리 오버헤드 문제를 해결합니다.

작동 방식

이 라이브러리는 CRTP(Curiously Recurring Template Pattern)와 인라인 메서드를 기반으로 한 헤더 전용 구현을 사용하여 실행 속도를 최대화합니다. 데이터 세트를 내부 행렬에 복사하는 대신 어댑터 인터페이스를 사용하여 KD-트리가 사용자 자신의 데이터 구조에 직접 액세스할 수 있도록 합니다. 정적 인덱스와 동적 인덱스(예: 슬라이딩 윈도우 맵용 Bentley-Saxe 로그 포레스트 또는 자체 균형 트리)를 모두 지원합니다.

대상 사용자

주로 포인트 클라우드, 로보틱스 및 N차원 데이터 세트를 다루는 C++ 개발자를 대상으로 하며, 최소한의 메모리 및 CPU 오버헤드로 정확한 최근접 이웃 탐색이 필요한 경우에 적합합니다.

주요 특징

  • 헤더 전용: 컴파일이나 설치가 필요 없으며 헤더 파일을 포함하기만 하면 됩니다.
  • 정확한 탐색: 기본적으로 정확한 최근접 이웃을 반환하며, 선택적으로 근사 모드를 제공합니다.
  • 다양체 지원: C++17을 사용하여 컴파일 타임 곱 다양체(예: SO(2), SO(3), SE(2), SE(3), 단위 구, 토러스)에서 정확한 최근접 이웃 탐색을 지원합니다.
  • 동적 인덱스: LiDAR 맵과 같이 시간이 지남에 따라 변하는 데이터 세트를 위한 증분 및 동적 KD-트리 인덱스를 제공합니다.
  • 메모리 효율성: 전체 데이터 세트를 복사하는 대신 어댑터를 통해 데이터에 직접 액세스합니다.
  • C++ 표준 지원: 핵심 유클리드 기능은 C++11, 다양체 메트릭은 C++17이 필요합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트