-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
Copy pathFeature.h
66 lines (59 loc) · 3.04 KB
/
Feature.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// ----------------------------------------------------------------------------
// - Open3D: www.open3d.org -
// ----------------------------------------------------------------------------
// Copyright (c) 2018-2024 www.open3d.org
// SPDX-License-Identifier: MIT
// ----------------------------------------------------------------------------
#pragma once
#include "open3d/core/Tensor.h"
#include "open3d/utility/Optional.h"
namespace open3d {
namespace t {
namespace geometry {
class PointCloud;
}
namespace pipelines {
namespace registration {
/// Function to compute FPFH feature for a point cloud.
/// It uses KNN search (Not recommended to use on GPU) if only max_nn parameter
/// is provided, Radius search (Not recommended to use on GPU) if only radius
/// parameter is provided, and Hybrid search (Recommended) if both are provided.
///
/// \param input The input point cloud with data type float32 or float64.
/// \param max_nn [optional] Neighbor search max neighbors parameter. [Default =
/// 100].
/// \param radius [optional] Neighbor search radius parameter. [Recommended ~5x
/// voxel size].
/// \param indices [optional] Tensor with the indices of the points to compute "
/// FPFH features on. [Default = None].
/// \return A Tensor of FPFH feature of the input point cloud with
/// shape {N, 33}, data type and device same as input.
core::Tensor ComputeFPFHFeature(
const geometry::PointCloud &input,
const utility::optional<int> max_nn = 100,
const utility::optional<double> radius = utility::nullopt,
const utility::optional<core::Tensor> &indices = utility::nullopt);
/// \brief Function to find correspondences via 1-nearest neighbor feature
/// matching. Target is used to construct a nearest neighbor search
/// object, in order to query source.
/// \param source_feats (N, D) tensor
/// \param target_feats (M, D) tensor
/// \param mutual_filter Boolean flag, only return correspondences (i, j) s.t.
/// source_features[i] and target_features[j] are mutually the nearest neighbor.
/// \param mutual_consistency_ratio Float threshold to decide whether the number
/// of correspondences is sufficient. Only used when mutual_filter is set to
/// True.
/// \return (K, 2, Int64) tensor. When mutual_filter is disabled: the first
/// column is arange(0, N) of source, and the second column is the corresponding
/// index of target. When mutual_filter is enabled, return the filtering subset
/// of the aforementioned correspondence set where source[i] and target[j] are
/// mutually the nearest neighbor. If the subset size is smaller than
/// mutual_consistency_ratio * N, return the unfiltered set.
core::Tensor CorrespondencesFromFeatures(const core::Tensor &source_features,
const core::Tensor &target_features,
bool mutual_filter = false,
float mutual_consistency_ratio = 0.1);
} // namespace registration
} // namespace pipelines
} // namespace t
} // namespace open3d