Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
KDTreeFlann.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <Eigen/Core>
11#include <memory>
12#include <vector>
13
17
19namespace nanoflann {
20struct metric_L2;
21template <class MatrixType, int DIM, class Distance, bool row_major>
22struct KDTreeEigenMatrixAdaptor;
23} // namespace nanoflann
25
26namespace open3d {
27namespace geometry {
28
33public:
39 KDTreeFlann(const Eigen::MatrixXd &data);
43 KDTreeFlann(const Geometry &geometry);
50 KDTreeFlann(const KDTreeFlann &) = delete;
51 KDTreeFlann &operator=(const KDTreeFlann &) = delete;
52
53public:
57 bool SetMatrixData(const Eigen::MatrixXd &data);
61 bool SetGeometry(const Geometry &geometry);
66
67 template <typename T>
68 int Search(const T &query,
69 const KDTreeSearchParam &param,
70 std::vector<int> &indices,
71 std::vector<double> &distance2) const;
72
73 template <typename T>
74 int SearchKNN(const T &query,
75 int knn,
76 std::vector<int> &indices,
77 std::vector<double> &distance2) const;
78
79 template <typename T>
80 int SearchRadius(const T &query,
81 double radius,
82 std::vector<int> &indices,
83 std::vector<double> &distance2) const;
84
85 template <typename T>
86 int SearchHybrid(const T &query,
87 double radius,
88 int max_nn,
89 std::vector<int> &indices,
90 std::vector<double> &distance2) const;
91
92private:
97 bool SetRawData(const Eigen::Map<const Eigen::MatrixXd> &data);
98
99protected:
100 using KDTree_t = nanoflann::KDTreeEigenMatrixAdaptor<const Eigen::MatrixXd,
101 -1,
102 nanoflann::metric_L2,
103 false>;
104
105 Eigen::MatrixXd data_;
106 std::unique_ptr<KDTree_t> nanoflann_index_;
107};
108
109} // namespace geometry
110} // namespace open3d
The base geometry class.
Definition Geometry.h:18
KDTree with FLANN for nearest neighbor search.
Definition KDTreeFlann.h:32
int Search(const T &query, const KDTreeSearchParam &param, std::vector< int > &indices, std::vector< double > &distance2) const
Definition KDTreeFlann.cpp:69
KDTreeFlann()
Default Constructor.
Definition KDTreeFlann.cpp:25
bool SetGeometry(const Geometry &geometry)
Definition KDTreeFlann.cpp:42
bool SetMatrixData(const Eigen::MatrixXd &data)
Definition KDTreeFlann.cpp:37
int SearchRadius(const T &query, double radius, std::vector< int > &indices, std::vector< double > &distance2) const
Definition KDTreeFlann.cpp:115
int SearchKNN(const T &query, int knn, std::vector< int > &indices, std::vector< double > &distance2) const
Definition KDTreeFlann.cpp:93
~KDTreeFlann()
Definition KDTreeFlann.cpp:35
bool SetFeature(const pipelines::registration::Feature &feature)
Definition KDTreeFlann.cpp:64
KDTreeFlann & operator=(const KDTreeFlann &)=delete
int SearchHybrid(const T &query, double radius, int max_nn, std::vector< int > &indices, std::vector< double > &distance2) const
Definition KDTreeFlann.cpp:140
nanoflann::KDTreeEigenMatrixAdaptor< const Eigen::MatrixXd, -1, nanoflann::metric_L2, false > KDTree_t
Definition KDTreeFlann.h:103
Eigen::MatrixXd data_
Definition KDTreeFlann.h:105
std::unique_ptr< KDTree_t > nanoflann_index_
Definition KDTreeFlann.h:106
KDTreeFlann(const KDTreeFlann &)=delete
Base class for KDTree search parameters.
Definition KDTreeSearchParam.h:16
Class to store featrues for registration.
Definition Feature.h:30
Definition PinholeCameraIntrinsic.cpp:16