Open3D (C++ API)  0.20.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-2026 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,
84 bool sorted = true) const;
85
86 template <typename T>
87 int SearchHybrid(const T &query,
88 double radius,
89 int max_nn,
90 std::vector<int> &indices,
91 std::vector<double> &distance2) const;
92
93private:
98 bool SetRawData(const Eigen::Map<const Eigen::MatrixXd> &data);
99
100protected:
101 using KDTree_t = nanoflann::KDTreeEigenMatrixAdaptor<const Eigen::MatrixXd,
102 -1,
103 nanoflann::metric_L2,
104 false>;
105
106 Eigen::MatrixXd data_;
107 std::unique_ptr<KDTree_t> nanoflann_index_;
108};
109
110} // namespace geometry
111} // namespace open3d
std::vector< int > indices
Definition PointCloudSmoothing.cpp:133
int knn
Definition PointCloudSmoothing.cpp:131
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 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:141
nanoflann::KDTreeEigenMatrixAdaptor< const Eigen::MatrixXd, -1, nanoflann::metric_L2, false > KDTree_t
Definition KDTreeFlann.h:104
int SearchRadius(const T &query, double radius, std::vector< int > &indices, std::vector< double > &distance2, bool sorted=true) const
Definition KDTreeFlann.cpp:115
Eigen::MatrixXd data_
Definition KDTreeFlann.h:106
std::unique_ptr< KDTree_t > nanoflann_index_
Definition KDTreeFlann.h:107
KDTreeFlann(const KDTreeFlann &)=delete
Base class for KDTree search parameters.
Definition KDTreeSearchParam.h:16
Class to store featrues for registration.
Definition Feature.h:31
Definition PinholeCameraIntrinsic.cpp:16