Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
FixedRadiusIndex.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 <vector>
11
12#include "open3d/core/Dtype.h"
13#include "open3d/core/Tensor.h"
16
17namespace open3d {
18namespace core {
19namespace nns {
20
48template <class T>
49void BuildSpatialHashTableCPU(const Tensor& points,
50 double radius,
51 const Tensor& points_row_splits,
52 const Tensor& hash_table_splits,
53 Tensor& hash_table_index,
54 Tensor& hash_table_cell_splits);
55
117template <class T, class TIndex>
118void FixedRadiusSearchCPU(const Tensor& points,
119 const Tensor& queries,
120 double radius,
121 const Tensor& points_row_splits,
122 const Tensor& queries_row_splits,
123 const Tensor& hash_table_splits,
124 const Tensor& hash_table_index,
125 const Tensor& hash_table_cell_splits,
126 const Metric metric,
127 const bool ignore_query_point,
128 const bool return_distances,
129 const bool sort,
130 Tensor& neighbors_index,
131 Tensor& neighbors_row_splits,
132 Tensor& neighbors_distance);
133
185template <class T, class TIndex>
186void HybridSearchCPU(const Tensor& points,
187 const Tensor& queries,
188 double radius,
189 int max_knn,
190 const Tensor& points_row_splits,
191 const Tensor& queries_row_splits,
192 const Tensor& hash_table_splits,
193 const Tensor& hash_table_index,
194 const Tensor& hash_table_cell_splits,
195 const Metric metric,
196 Tensor& neighbors_index,
197 Tensor& neighbors_count,
198 Tensor& neighbors_distance);
199
200#ifdef BUILD_CUDA_MODULE
226template <class T>
227void BuildSpatialHashTableCUDA(const Tensor& points,
228 double radius,
229 const Tensor& points_row_splits,
230 const Tensor& hash_table_splits,
231 Tensor& hash_table_index,
232 Tensor& hash_table_cell_splits);
233
234// Fixed radius search. This function computes a list of neighbor indices
295template <class T, class TIndex>
296void FixedRadiusSearchCUDA(const Tensor& points,
297 const Tensor& queries,
298 double radius,
299 const Tensor& points_row_splits,
300 const Tensor& queries_row_splits,
301 const Tensor& hash_table_splits,
302 const Tensor& hash_table_index,
303 const Tensor& hash_table_cell_splits,
304 const Metric metric,
305 const bool ignore_query_point,
306 const bool return_distances,
307 const bool sort,
308 Tensor& neighbors_index,
309 Tensor& neighbors_row_splits,
310 Tensor& neighbors_distance);
311
363template <class T, class TIndex>
364void HybridSearchCUDA(const Tensor& points,
365 const Tensor& queries,
366 double radius,
367 int max_knn,
368 const Tensor& points_row_splits,
369 const Tensor& queries_row_splits,
370 const Tensor& hash_table_splits,
371 const Tensor& hash_table_index,
372 const Tensor& hash_table_cell_splits,
373 const Metric metric,
374 Tensor& neighbors_index,
375 Tensor& neighbors_count,
376 Tensor& neighbors_distance);
377#endif
378
379#ifdef BUILD_SYCL_MODULE
384template <class T>
385void BuildSpatialHashTableSYCL(const Tensor& points,
386 double radius,
387 const Tensor& points_row_splits,
388 const Tensor& hash_table_splits,
389 Tensor& hash_table_index,
390 Tensor& hash_table_cell_splits);
391
393template <class T, class TIndex>
394void FixedRadiusSearchSYCL(const Tensor& points,
395 const Tensor& queries,
396 double radius,
397 const Tensor& points_row_splits,
398 const Tensor& queries_row_splits,
399 const Tensor& hash_table_splits,
400 const Tensor& hash_table_index,
401 const Tensor& hash_table_cell_splits,
402 const Metric metric,
403 const bool ignore_query_point,
404 const bool return_distances,
405 const bool sort,
406 Tensor& neighbors_index,
407 Tensor& neighbors_row_splits,
408 Tensor& neighbors_distance,
409 int64_t tile_bytes);
410
412template <class T, class TIndex>
413void HybridSearchSYCL(const Tensor& points,
414 const Tensor& queries,
415 double radius,
416 int max_knn,
417 const Tensor& points_row_splits,
418 const Tensor& queries_row_splits,
419 const Tensor& hash_table_splits,
420 const Tensor& hash_table_index,
421 const Tensor& hash_table_cell_splits,
422 const Metric metric,
423 Tensor& neighbors_index,
424 Tensor& neighbors_count,
425 Tensor& neighbors_distance,
426 int64_t tile_bytes);
427#endif
428
433public:
436
441 FixedRadiusIndex(const Tensor& dataset_points, double radius);
442 FixedRadiusIndex(const Tensor& dataset_points,
443 double radius,
444 const Dtype& index_dtype);
445
455 FixedRadiusIndex(const Tensor& dataset_points,
456 double radius,
457 const Dtype& index_dtype,
458 int64_t tile_bytes);
459
463
464public:
465 bool SetTensorData(const Tensor& dataset_points,
466 const Dtype& index_dtype = core::Int64) override {
467 utility::LogError(
468 "FixedRadiusIndex::SetTensorData without radius not "
469 "implemented.");
470 }
471
472 bool SetTensorData(const Tensor& dataset_points,
473 double radius,
474 const Dtype& index_dtype = core::Int64) override;
475 bool SetTensorData(const Tensor& dataset_points,
476 const Tensor& points_row_splits,
477 double radius,
478 const Dtype& index_dtype = core::Int64);
479
480 std::pair<Tensor, Tensor> SearchKnn(const Tensor& query_points,
481 int knn) const override {
482 utility::LogError("FixedRadiusIndex::SearchKnn not implemented.");
483 }
484
485 std::tuple<Tensor, Tensor, Tensor> SearchRadius(
486 const Tensor& query_points,
487 const Tensor& radii,
488 bool sort = true) const override {
489 utility::LogError(
490 "FixedRadiusIndex::SearchRadius with multi-radii not "
491 "implemented.");
492 }
493
494 std::tuple<Tensor, Tensor, Tensor> SearchRadius(
495 const Tensor& query_points,
496 double radius,
497 bool sort = true) const override;
498 std::tuple<Tensor, Tensor, Tensor> SearchRadius(
499 const Tensor& query_points,
500 const Tensor& queries_row_splits,
501 double radius,
502 bool sort = true,
503 Metric metric = L2,
504 bool ignore_query_point = false) const;
505
506 std::tuple<Tensor, Tensor, Tensor> SearchHybrid(const Tensor& query_points,
507 double radius,
508 int max_knn) const override;
509
510 std::tuple<Tensor, Tensor, Tensor> SearchHybrid(
511 const Tensor& query_points,
512 const Tensor& queries_row_splits,
513 double radius,
514 int max_knn) const;
515
516 const double hash_table_size_factor = 1.0 / 32;
517 const int64_t max_hash_tabls_size = 33554432;
518
519protected:
526};
527
528} // namespace nns
529} // namespace core
530} // namespace open3d
Definition Dtype.h:20
Definition Tensor.h:32
FixedRadiusIndex for nearest neighbor range search.
Definition FixedRadiusIndex.h:432
FixedRadiusIndex(const FixedRadiusIndex &)=delete
Tensor hash_table_splits_
Definition FixedRadiusIndex.h:521
const int64_t max_hash_tabls_size
Definition FixedRadiusIndex.h:517
Tensor hash_table_cell_splits_
Definition FixedRadiusIndex.h:522
int64_t tile_bytes_
Distance tile budget for SYCL (bytes). See kSYCLKnnDefaultTileBytes.
Definition FixedRadiusIndex.h:525
Tensor points_row_splits_
Definition FixedRadiusIndex.h:520
bool SetTensorData(const Tensor &dataset_points, const Dtype &index_dtype=core::Int64) override
Definition FixedRadiusIndex.h:465
std::tuple< Tensor, Tensor, Tensor > SearchHybrid(const Tensor &query_points, double radius, int max_knn) const override
Definition FixedRadiusIndex.cpp:219
Tensor hash_table_index_
Definition FixedRadiusIndex.h:523
const double hash_table_size_factor
Definition FixedRadiusIndex.h:516
~FixedRadiusIndex()
Definition FixedRadiusIndex.cpp:44
FixedRadiusIndex()
Default Constructor.
Definition FixedRadiusIndex.cpp:18
std::tuple< Tensor, Tensor, Tensor > SearchRadius(const Tensor &query_points, const Tensor &radii, bool sort=true) const override
Definition FixedRadiusIndex.h:485
std::pair< Tensor, Tensor > SearchKnn(const Tensor &query_points, int knn) const override
Definition FixedRadiusIndex.h:480
FixedRadiusIndex & operator=(const FixedRadiusIndex &)=delete
Definition NNSIndex.h:21
Shared types and SYCL nearest-neighbor search tuning defaults.
int points
Definition FilePCD.cpp:55
Metric
Supported metrics.
Definition NeighborSearchCommon.h:22
@ L2
Definition NeighborSearchCommon.h:22
void FixedRadiusSearchSYCL(const Tensor &points, const Tensor &queries, double radius, const Tensor &points_row_splits, const Tensor &queries_row_splits, const Tensor &hash_table_splits, const Tensor &hash_table_index, const Tensor &hash_table_cell_splits, const Metric metric, const bool ignore_query_point, const bool return_distances, const bool sort, Tensor &neighbors_index, Tensor &neighbors_row_splits, Tensor &neighbors_distance, int64_t)
Definition KnnSearchOpsSYCL.cpp:583
void HybridSearchSYCL(const Tensor &points, const Tensor &queries, double radius, int max_knn, const Tensor &points_row_splits, const Tensor &queries_row_splits, const Tensor &hash_table_splits, const Tensor &hash_table_index, const Tensor &hash_table_cell_splits, const Metric metric, Tensor &neighbors_index, Tensor &neighbors_count, Tensor &neighbors_distance, int64_t)
Definition KnnSearchOpsSYCL.cpp:712
void HybridSearchCPU(const Tensor &points, const Tensor &queries, double radius, int max_knn, const Tensor &points_row_splits, const Tensor &queries_row_splits, const Tensor &hash_table_splits, const Tensor &hash_table_index, const Tensor &hash_table_cell_splits, const Metric metric, Tensor &neighbors_index, Tensor &neighbors_count, Tensor &neighbors_distance)
Definition FixedRadiusSearchOps.cpp:74
void BuildSpatialHashTableCPU(const Tensor &points, double radius, const Tensor &points_row_splits, const Tensor &hash_table_splits, Tensor &hash_table_index, Tensor &hash_table_cell_splits)
Definition FixedRadiusSearchOps.cpp:21
void FixedRadiusSearchCPU(const Tensor &points, const Tensor &queries, double radius, const Tensor &points_row_splits, const Tensor &queries_row_splits, const Tensor &hash_table_splits, const Tensor &hash_table_index, const Tensor &hash_table_cell_splits, const Metric metric, const bool ignore_query_point, const bool return_distances, const bool sort, Tensor &neighbors_index, Tensor &neighbors_row_splits, Tensor &neighbors_distance)
Definition FixedRadiusSearchOps.cpp:38
void BuildSpatialHashTableSYCL(const Tensor &points, double radius, const Tensor &points_row_splits, const Tensor &hash_table_splits, Tensor &hash_table_index, Tensor &hash_table_cell_splits)
Definition FixedRadiusSearchSYCLImpl.h:176
constexpr int64_t kSYCLKnnDefaultTileBytes
SYCL NNS defaults for KnnIndex and FixedRadiusIndex constructors.
Definition NeighborSearchCommon.h:64
const Dtype Int64
Definition Dtype.cpp:47
Definition PinholeCameraIntrinsic.cpp:16