Open3D (C++ API)  0.20.0
Loading...
Searching...
No Matches
NearestNeighborSearch.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 <optional>
11#include <vector>
12
13#include "open3d/core/Tensor.h"
17
18namespace open3d {
19namespace core {
20namespace nns {
21
30public:
35 // NearestNeighborSearch(const Tensor &dataset_points)
36 // : dataset_points_(dataset_points){};
37 NearestNeighborSearch(const Tensor &dataset_points,
38 const Dtype &index_dtype = core::Int32)
39 : dataset_points_(dataset_points), index_dtype_(index_dtype) {}
43
44public:
48 bool KnnIndex();
49
55 bool MultiRadiusIndex();
56
62 bool FixedRadiusIndex(std::optional<double> radius = {});
63
69 bool HybridIndex(std::optional<double> radius = {});
70
79 std::pair<Tensor, Tensor> KnnSearch(const Tensor &query_points, int knn);
80
94 std::tuple<Tensor, Tensor, Tensor> FixedRadiusSearch(
95 const Tensor &query_points, double radius, bool sort = true);
96
110 std::tuple<Tensor, Tensor, Tensor> MultiRadiusSearch(
111 const Tensor &query_points, const Tensor &radii);
112
125 std::tuple<Tensor, Tensor, Tensor> HybridSearch(const Tensor &query_points,
126 const double radius,
127 const int max_knn) const;
128
129private:
130 bool SetIndex();
131
133 void AssertCPU(const Tensor &t) const;
134
135protected:
136 std::unique_ptr<NanoFlannIndex> nanoflann_index_;
137 std::unique_ptr<nns::FixedRadiusIndex> fixed_radius_index_;
138 std::unique_ptr<nns::KnnIndex> knn_index_;
141};
142} // namespace nns
143} // namespace core
144} // namespace open3d
int knn
Definition PointCloudSmoothing.cpp:131
Definition Dtype.h:20
Definition Tensor.h:32
FixedRadiusIndex for nearest neighbor range search.
Definition FixedRadiusIndex.h:432
Facade for batched KNN, fixed-radius, hybrid, and multi-radius search.
Definition NearestNeighborSearch.h:29
bool HybridIndex(std::optional< double > radius={})
Definition NearestNeighborSearch.cpp:66
bool MultiRadiusIndex()
Definition NearestNeighborSearch.cpp:32
NearestNeighborSearch(const NearestNeighborSearch &)=delete
std::unique_ptr< nns::KnnIndex > knn_index_
Definition NearestNeighborSearch.h:138
std::tuple< Tensor, Tensor, Tensor > HybridSearch(const Tensor &query_points, const double radius, const int max_knn) const
Definition NearestNeighborSearch.cpp:144
std::tuple< Tensor, Tensor, Tensor > FixedRadiusSearch(const Tensor &query_points, double radius, bool sort=true)
Definition NearestNeighborSearch.cpp:112
bool KnnIndex()
Definition NearestNeighborSearch.cpp:23
std::tuple< Tensor, Tensor, Tensor > MultiRadiusSearch(const Tensor &query_points, const Tensor &radii)
Definition NearestNeighborSearch.cpp:132
~NearestNeighborSearch()
Definition NearestNeighborSearch.cpp:16
const Tensor dataset_points_
Definition NearestNeighborSearch.h:139
NearestNeighborSearch & operator=(const NearestNeighborSearch &)=delete
std::unique_ptr< nns::FixedRadiusIndex > fixed_radius_index_
Definition NearestNeighborSearch.h:137
std::pair< Tensor, Tensor > KnnSearch(const Tensor &query_points, int knn)
Definition NearestNeighborSearch.cpp:93
std::unique_ptr< NanoFlannIndex > nanoflann_index_
Definition NearestNeighborSearch.h:136
const Dtype index_dtype_
Definition NearestNeighborSearch.h:140
NearestNeighborSearch(const Tensor &dataset_points, const Dtype &index_dtype=core::Int32)
Definition NearestNeighborSearch.h:37
const Dtype Int32
Definition Dtype.cpp:46
Definition PinholeCameraIntrinsic.cpp:16