ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Registration.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 #include <Eigen.h>
10 #include <Optional.h>
11 
12 #include <Eigen/Core>
13 #include <tuple>
14 #include <vector>
15 
17 #include "pipelines/registration/TransformationEstimation.h"
18 
19 class ccPointCloud;
20 namespace cloudViewer {
21 
22 namespace utility {
23 class Feature;
24 }
25 
26 namespace pipelines {
27 namespace registration {
28 
37 public:
46  double relative_rmse = 1e-6,
47  int max_iteration = 30)
50  max_iteration_(max_iteration) {}
52 
53 public:
62 };
63 
78 public:
84  RANSACConvergenceCriteria(int max_iteration = 100000,
85  double confidence = 0.999)
86  : max_iteration_(max_iteration), confidence_(confidence) {}
87 
89 
90 public:
94  double confidence_;
95 };
96 
101 public:
106  const Eigen::Matrix4d &transformation = Eigen::Matrix4d::Identity())
107  : transformation_(transformation), inlier_rmse_(0.0), fitness_(0.0) {}
109  bool IsBetterRANSACThan(const RegistrationResult &other) const {
110  return fitness_ > other.fitness_ || (fitness_ == other.fitness_ &&
111  inlier_rmse_ < other.inlier_rmse_);
112  }
113 
114 public:
120  double inlier_rmse_;
125  double fitness_;
126 };
127 
137  const ccPointCloud &source,
138  const ccPointCloud &target,
140  const Eigen::Matrix4d &transformation = Eigen::Matrix4d::Identity());
141 
153  const ccPointCloud &source,
154  const ccPointCloud &target,
156  const Eigen::Matrix4d &init = Eigen::Matrix4d::Identity(),
157  const TransformationEstimation &estimation =
159  const ICPConvergenceCriteria &criteria = ICPConvergenceCriteria());
160 
175  const ccPointCloud &source,
176  const ccPointCloud &target,
177  const CorrespondenceSet &corres,
179  const TransformationEstimation &estimation =
181  int ransac_n = 3,
182  const std::vector<std::reference_wrapper<const CorrespondenceChecker>>
183  &checkers = {},
184  const RANSACConvergenceCriteria &criteria = RANSACConvergenceCriteria(),
186 
202  const ccPointCloud &source,
203  const ccPointCloud &target,
204  const utility::Feature &source_feature,
205  const utility::Feature &target_feature,
206  bool mutual_filter,
208  const TransformationEstimation &estimation =
209  TransformationEstimationPointToPoint(false),
210  int ransac_n = 3,
211  const std::vector<std::reference_wrapper<const CorrespondenceChecker>>
212  &checkers = {},
213  const RANSACConvergenceCriteria &criteria = RANSACConvergenceCriteria(),
215 
222  const ccPointCloud &source,
223  const ccPointCloud &target,
225  const Eigen::Matrix4d &transformation);
226 } // namespace registration
227 } // namespace pipelines
228 } // namespace cloudViewer
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Class that defines the convergence criteria of ICP.
Definition: Registration.h:36
int max_iteration_
Maximum iteration before iteration stops.
Definition: Registration.h:61
ICPConvergenceCriteria(double relative_fitness=1e-6, double relative_rmse=1e-6, int max_iteration=30)
Parameterized Constructor.
Definition: Registration.h:45
Class that defines the convergence criteria of RANSAC.
Definition: Registration.h:77
int max_iteration_
Maximum iteration before iteration stops.
Definition: Registration.h:92
RANSACConvergenceCriteria(int max_iteration=100000, double confidence=0.999)
Parameterized Constructor.
Definition: Registration.h:84
RegistrationResult(const Eigen::Matrix4d &transformation=Eigen::Matrix4d::Identity())
Parameterized Constructor.
Definition: Registration.h:105
double inlier_rmse_
RMSE of all inlier correspondences. Lower is better.
Definition: Registration.h:120
Eigen::Matrix4d_u transformation_
The estimated transformation matrix.
Definition: Registration.h:116
bool IsBetterRANSACThan(const RegistrationResult &other) const
Definition: Registration.h:109
CorrespondenceSet correspondence_set_
Correspondence set between source and target point cloud.
Definition: Registration.h:118
Class to store featrues for registration.
Definition: ecvFeature.h:29
Eigen::Matrix< double, 4, 4, Eigen::DontAlign > Matrix4d_u
Definition: Eigen.h:113
Eigen::Matrix< double, 6, 6 > Matrix6d
Extending Eigen namespace by adding frequently used matrix type.
Definition: Eigen.h:106
RegistrationResult RegistrationRANSACBasedOnCorrespondence(const ccPointCloud &source, const ccPointCloud &target, const CorrespondenceSet &corres, double max_correspondence_distance, const TransformationEstimation &estimation, int ransac_n, const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &checkers, const RANSACConvergenceCriteria &criteria, utility::optional< unsigned int > seed)
Function for global RANSAC registration based on a given set of correspondences.
Eigen::Matrix6d GetInformationMatrixFromPointClouds(const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &transformation)
std::vector< Eigen::Vector2i > CorrespondenceSet
RegistrationResult RegistrationICP(const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &init, const TransformationEstimation &estimation, const ICPConvergenceCriteria &criteria)
Functions for ICP registration.
static const double max_correspondence_distance
RegistrationResult RegistrationRANSACBasedOnFeatureMatching(const ccPointCloud &source, const ccPointCloud &target, const utility::Feature &source_feature, const utility::Feature &target_feature, bool mutual_filter, double max_correspondence_distance, const TransformationEstimation &estimation, int ransac_n, const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &checkers, const RANSACConvergenceCriteria &criteria, utility::optional< unsigned int > seed)
Function for global RANSAC registration based on feature matching.
RegistrationResult EvaluateRegistration(const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &transformation)
Function for evaluating registration between point clouds.
constexpr nullopt_t nullopt
Definition: Optional.h:136
Generic file read and write utility for python interface.