jlblancoc/nanoflann

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

해결하는 문제

nanoflann는 다차원 데이터셋에서 빠른 최근접 이웃 검색을 위한 고성능 C++ 라이브러리입니다. 이전 라이브러리인 FLANN에서 발견된 오버헤드와 메모리 비효율성을 해결하기 위해, 가상 메서드의 성능 저하와 불필요한 데이터 중복을 피하는 헤더 온리 구현을 제공합니다.

작동 방식

이 라이브러리는 유럽 공간(R2, R3), 2차원 회전군(SO2), 3차원 회전군(SO3)을 포함한 다양한 토폴로지에서 데이터 포인트를 정리하기 위해 KD 트리를 구축합니다. 고유한 재귀 템플릿 패턴(CRTP)과 인라인 메서드를 결합하여 실행 속도를 극대화합니다. 메모리 절약을 위해 어댑터 인터페이스를 사용하여 사용자의 기존 데이터에 직접 접근하며, 데이터 전체를 사용자 정의 행렬에 복사할 필요가 없습니다.

대상 사용자

점군, 로보틱스, 다차원 데이터셋을 다루는 C++ 개발자 중에서 매우 빠르고 스레드 세이프한 최근접 이웃 쿼리가 필요한 사용자에게 적합합니다.

주요 특징

  • 헤더 온리: 컴파일이나 설치가 필요 없으며, 헤더 파일을 포함하기만 하면 됩니다.
  • 메모리 효율적: 어댑터를 사용해 데이터를 인플레이스로 접근하여 데이터셋 중복을 방지합니다.
  • 유연한 토폴로지: R^N, SO(2), SO(3) 거리 메트릭을 지원합니다.
  • 동적 데이터셋: 동적 점군을 위한 특수 어댑터를 제공하며, 슬라이딩 윈도우 LiDAR 맵용 자가 균형 트리도 포함합니다.
  • 스레드 세이프: 병렬 인덱스 생성과 동시 쿼리를 지원합니다.
  • 통합성: Eigen::Matrix와 표준 C++ 벡터와 직접 연동 가능합니다.

관련

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