gtsam_points
Loading...
Searching...
No Matches
ransac.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2025 Kenji Koide (k.koide@aist.go.jp)
3#pragma once
4
5#include <random>
6#include <vector>
7#include <Eigen/Core>
8#include <Eigen/Geometry>
9
10#include <gtsam_points/types/point_cloud.hpp>
11#include <gtsam_points/ann/nearest_neighbor_search.hpp>
12#include <gtsam_points/registration/registration_result.hpp>
13
14namespace gtsam_points {
15
18 int max_iterations = 5000;
20 double poly_error_thresh = 0.5;
22 int dof = 6;
23 std::uint64_t seed = 5489u;
24 int num_threads = 4;
25
26 double taboo_thresh_rot = 0.5 * M_PI / 180.0;
27 double taboo_thresh_trans = 0.25;
28 std::vector<Eigen::Isometry3d> taboo_list;
29};
30
40template <typename PointCloud, typename Features>
41RegistrationResult estimate_pose_ransac_(
42 const PointCloud& target,
43 const PointCloud& source,
44 const Features& target_features,
45 const Features& source_features,
46 const NearestNeighborSearch& target_tree,
47 const NearestNeighborSearch& target_features_tree,
48 const RANSACParams& params = RANSACParams());
49
50//
51RegistrationResult estimate_pose_ransac(
52 const PointCloud& target,
53 const PointCloud& source,
54 const Eigen::Matrix<double, 33, 1>* target_features,
55 const Eigen::Matrix<double, 33, 1>* source_features,
56 const NearestNeighborSearch& target_tree,
57 const NearestNeighborSearch& target_features_tree,
58 const RANSACParams& params = RANSACParams()) {
59 using ConstFeaturePtr = const Eigen::Matrix<double, 33, 1>*;
60 return estimate_pose_ransac_<PointCloud, ConstFeaturePtr>(
61 target,
62 source,
63 target_features,
64 source_features,
65 target_tree,
66 target_features_tree,
67 params);
68}
69
70RegistrationResult estimate_pose_ransac(
71 const PointCloud& target,
72 const PointCloud& source,
73 const Eigen::Matrix<double, 125, 1>* target_features,
74 const Eigen::Matrix<double, 125, 1>* source_features,
75 const NearestNeighborSearch& target_tree,
76 const NearestNeighborSearch& target_features_tree,
77 const RANSACParams& params = RANSACParams()) {
78 using ConstFeaturePtr = const Eigen::Matrix<double, 125, 1>*;
79 return estimate_pose_ransac_<PointCloud, ConstFeaturePtr>(
80 target,
81 source,
82 target_features,
83 source_features,
84 target_tree,
85 target_features_tree,
86 params);
87}
88
89RegistrationResult estimate_pose_ransac(
90 const PointCloud& target,
91 const PointCloud& source,
92 const Eigen::VectorXd* target_features,
93 const Eigen::VectorXd* source_features,
94 const NearestNeighborSearch& target_tree,
95 const NearestNeighborSearch& target_features_tree,
96 const RANSACParams& params = RANSACParams()) {
97 using ConstFeaturePtr = const Eigen::VectorXd*;
98 return estimate_pose_ransac_<PointCloud, ConstFeaturePtr>(
99 target,
100 source,
101 target_features,
102 source_features,
103 target_tree,
104 target_features_tree,
105 params);
106}
107
108} // namespace gtsam_points
Nearest neighbor search interface.
Definition nearest_neighbor_search.hpp:16
Standard point cloud class that holds only pointers to point attributes.
Definition point_cloud.hpp:19
RANSAC parameters.
Definition ransac.hpp:17
int dof
Degrees of freedom (must be 6 (SE3) or 4 (XYZ+RZ))
Definition ransac.hpp:22
std::vector< Eigen::Isometry3d > taboo_list
Taboo list.
Definition ransac.hpp:28
double poly_error_thresh
Polynomial error threshold.
Definition ransac.hpp:20
double inlier_voxel_resolution
Inlier voxel resolution.
Definition ransac.hpp:21
double taboo_thresh_rot
Taboo threshold in radian.
Definition ransac.hpp:26
int num_threads
Number of threads.
Definition ransac.hpp:24
int max_iterations
Maximum number of iterations.
Definition ransac.hpp:18
double early_stop_inlier_rate
Maximum inlier rate for early stopping.
Definition ransac.hpp:19
double taboo_thresh_trans
Taboo threshold in meter.
Definition ransac.hpp:27
std::uint64_t seed
Random seed.
Definition ransac.hpp:23
Registration result.
Definition registration_result.hpp:11