ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cloudViewer::pipelines::registration Namespace Reference

Classes

class  TransformationEstimationForColoredICP
 
class  CorrespondenceChecker
 Base class that checks if two (small) point clouds can be aligned. More...
 
class  CorrespondenceCheckerBasedOnEdgeLength
 Check if two point clouds build the polygons with similar edge lengths. More...
 
class  CorrespondenceCheckerBasedOnDistance
 Check if two aligned point clouds are close. More...
 
class  CorrespondenceCheckerBasedOnNormal
 Class to check if two aligned point clouds have similar normals. More...
 
class  FastGlobalRegistrationOption
 Options for FastGlobalRegistration. More...
 
class  TransformationEstimationForGeneralizedICP
 
class  GlobalOptimizationOption
 Option for GlobalOptimization. More...
 
class  GlobalOptimizationConvergenceCriteria
 Convergence criteria of GlobalOptimization. More...
 
class  GlobalOptimizationMethod
 Base class for global optimization method. More...
 
class  GlobalOptimizationGaussNewton
 Global optimization with Gauss-Newton algorithm. More...
 
class  GlobalOptimizationLevenbergMarquardt
 Global optimization with Levenberg-Marquardt algorithm. More...
 
class  PoseGraphNode
 Node of PoseGraph. More...
 
class  PoseGraphEdge
 Edge of PoseGraph. More...
 
class  PoseGraph
 Data structure defining the pose graph. More...
 
class  ICPConvergenceCriteria
 Class that defines the convergence criteria of ICP. More...
 
class  RANSACConvergenceCriteria
 Class that defines the convergence criteria of RANSAC. More...
 
class  RegistrationResult
 
class  RobustKernel
 
class  L2Loss
 
class  L1Loss
 
class  HuberLoss
 
class  CauchyLoss
 
class  GMLoss
 
class  TukeyLoss
 
class  TransformationEstimation
 
class  TransformationEstimationPointToPoint
 
class  TransformationEstimationPointToPlane
 
class  PyGlobalOptimizationMethod
 
class  PyTransformationEstimation
 
class  PyCorrespondenceChecker
 
class  PyRobustKernelT
 

Typedefs

typedef std::vector< Eigen::Vector2i > CorrespondenceSet
 
using PyRobustKernel = PyRobustKernelT< RobustKernel >
 
using PyL2Loss = PyRobustKernelT< L2Loss >
 
using PyL1Loss = PyRobustKernelT< L1Loss >
 
using PyHuberLoss = PyRobustKernelT< HuberLoss >
 
using PyCauchyLoss = PyRobustKernelT< CauchyLoss >
 
using PyGMLoss = PyRobustKernelT< GMLoss >
 
using PyTukeyLoss = PyRobustKernelT< TukeyLoss >
 

Enumerations

enum class  TransformationEstimationType {
  Unspecified = 0 , PointToPoint = 1 , PointToPlane = 2 , ColoredICP = 3 ,
  GeneralizedICP = 4
}
 

Functions

RegistrationResult RegistrationColoredICP (const ccPointCloud &source, const ccPointCloud &target, double max_distance, const Eigen::Matrix4d &init=Eigen::Matrix4d::Identity(), const TransformationEstimationForColoredICP &estimation=TransformationEstimationForColoredICP(), const ICPConvergenceCriteria &criteria=ICPConvergenceCriteria())
 Function for Colored ICP registration. More...
 
static std::vector< std::pair< int, int > > InitialMatching (const utility::Feature &src_features, const utility::Feature &dst_features)
 
static std::vector< std::pair< int, int > > AdvancedMatching (const ccPointCloud &src_point_cloud, const ccPointCloud &dst_point_cloud, const std::vector< std::pair< int, int >> &corres_cross, const FastGlobalRegistrationOption &option)
 
std::tuple< std::vector< Eigen::Vector3d >, double, double > NormalizePointCloud (std::vector< ccPointCloud > &point_cloud_vec, const FastGlobalRegistrationOption &option)
 
Eigen::Matrix4d OptimizePairwiseRegistration (const std::vector< ccPointCloud > &point_cloud_vec, const std::vector< std::pair< int, int >> &corres, double scale_start, const FastGlobalRegistrationOption &option)
 
Eigen::Matrix4d GetTransformationOriginalScale (const Eigen::Matrix4d &transformation, const std::vector< Eigen::Vector3d > &pcd_mean_vec, const double scale_global)
 
RegistrationResult FastGlobalRegistrationBasedOnCorrespondence (const ccPointCloud &source, const ccPointCloud &target, const CorrespondenceSet &corres, const FastGlobalRegistrationOption &option=FastGlobalRegistrationOption())
 Fast Global Registration based on a given set of correspondences. More...
 
RegistrationResult FastGlobalRegistrationBasedOnFeatureMatching (const ccPointCloud &source, const ccPointCloud &target, const utility::Feature &source_feature, const utility::Feature &target_feature, const FastGlobalRegistrationOption &option=FastGlobalRegistrationOption())
 Fast Global Registration based on a given set of FPFH features. More...
 
RegistrationResult RegistrationGeneralizedICP (const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &init=Eigen::Matrix4d::Identity(), const TransformationEstimationForGeneralizedICP &estimation=TransformationEstimationForGeneralizedICP(), const ICPConvergenceCriteria &criteria=ICPConvergenceCriteria())
 Function for Generalized ICP registration. More...
 
Eigen::Vector6d GetLinearized6DVector (const Eigen::Matrix4d &input)
 
Eigen::Vector6d GetMisalignmentVector (const Eigen::Matrix4d &X_inv, const Eigen::Matrix4d &Ts, const Eigen::Matrix4d &Tt_inv)
 
std::tuple< Eigen::Matrix4d, Eigen::Matrix4d, Eigen::Matrix4d > GetRelativePoses (const PoseGraph &pose_graph, int edge_id)
 
std::tuple< Eigen::Matrix6d, Eigen::Matrix6dGetJacobian (const Eigen::Matrix4d &X_inv, const Eigen::Matrix4d &Ts, const Eigen::Matrix4d &Tt_inv)
 
int UpdateConfidence (PoseGraph &pose_graph, const Eigen::VectorXd &zeta, const double line_process_weight, const GlobalOptimizationOption &option)
 
double ComputeResidual (const PoseGraph &pose_graph, const Eigen::VectorXd &zeta, const double line_process_weight, const GlobalOptimizationOption &option)
 Function to compute residual defined in [Choi et al 2015] See Eq (9). More...
 
Eigen::VectorXd ComputeZeta (const PoseGraph &pose_graph)
 Function to compute residual defined in [Choi et al 2015] See Eq (6). More...
 
std::tuple< Eigen::MatrixXd, Eigen::VectorXd > ComputeLinearSystem (const PoseGraph &pose_graph, const Eigen::VectorXd &zeta)
 
Eigen::VectorXd UpdatePoseVector (const PoseGraph &pose_graph)
 
std::shared_ptr< PoseGraphUpdatePoseGraph (const PoseGraph &pose_graph, const Eigen::VectorXd delta)
 
bool CheckRightTerm (const Eigen::VectorXd &right_term, const GlobalOptimizationConvergenceCriteria &criteria)
 
bool CheckRelativeIncrement (const Eigen::VectorXd &delta, const Eigen::VectorXd &x, const GlobalOptimizationConvergenceCriteria &criteria)
 
bool CheckRelativeResidualIncrement (double current_residual, double new_residual, const GlobalOptimizationConvergenceCriteria &criteria)
 
bool CheckResidual (double residual, const GlobalOptimizationConvergenceCriteria &criteria)
 
bool CheckMaxIteration (int iteration, const GlobalOptimizationConvergenceCriteria &criteria)
 
bool CheckMaxIterationLM (int iteration, const GlobalOptimizationConvergenceCriteria &criteria)
 
double ComputeLineProcessWeight (const PoseGraph &pose_graph, const GlobalOptimizationOption &option)
 
void CompensateReferencePoseGraphNode (PoseGraph &pose_graph_new, const PoseGraph &pose_graph_orig, int reference_node)
 
bool ValidatePoseGraphConnectivity (const PoseGraph &pose_graph, bool ignore_uncertain_edges=false)
 
bool ValidatePoseGraph (const PoseGraph &pose_graph)
 
std::shared_ptr< PoseGraphCreatePoseGraphWithoutInvalidEdges (const PoseGraph &pose_graph, const GlobalOptimizationOption &option)
 
void GlobalOptimization (PoseGraph &pose_graph, const GlobalOptimizationMethod &method, const GlobalOptimizationConvergenceCriteria &criteria, const GlobalOptimizationOption &option)
 
static RegistrationResult GetRegistrationResultAndCorrespondences (const ccPointCloud &source, const ccPointCloud &target, const geometry::KDTreeFlann &target_kdtree, double max_correspondence_distance, const Eigen::Matrix4d &transformation)
 
static RegistrationResult EvaluateRANSACBasedOnCorrespondence (const ccPointCloud &source, const ccPointCloud &target, const CorrespondenceSet &corres, double max_correspondence_distance, const Eigen::Matrix4d &transformation)
 
RegistrationResult EvaluateRegistration (const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &transformation=Eigen::Matrix4d::Identity())
 Function for evaluating registration between point clouds. More...
 
RegistrationResult RegistrationICP (const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &init=Eigen::Matrix4d::Identity(), const TransformationEstimation &estimation=TransformationEstimationPointToPoint(false), const ICPConvergenceCriteria &criteria=ICPConvergenceCriteria())
 Functions for ICP registration. More...
 
RegistrationResult RegistrationRANSACBasedOnCorrespondence (const ccPointCloud &source, const ccPointCloud &target, const CorrespondenceSet &corres, double max_correspondence_distance, const TransformationEstimation &estimation=TransformationEstimationPointToPoint(false), int ransac_n=3, const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &checkers={}, const RANSACConvergenceCriteria &criteria=RANSACConvergenceCriteria(), utility::optional< unsigned int > seed=utility::nullopt)
 Function for global RANSAC registration based on a given set of correspondences. More...
 
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=TransformationEstimationPointToPoint(false), int ransac_n=3, const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &checkers={}, const RANSACConvergenceCriteria &criteria=RANSACConvergenceCriteria(), utility::optional< unsigned int > seed=utility::nullopt)
 Function for global RANSAC registration based on feature matching. More...
 
Eigen::Matrix6d GetInformationMatrixFromPointClouds (const ccPointCloud &source, const ccPointCloud &target, double max_correspondence_distance, const Eigen::Matrix4d &transformation)
 
static void BenchmarkCreateFromPointCloudBallPivoting (benchmark::State &state, const bool remove_non_finite_points)
 
 BENCHMARK_CAPTURE (BenchmarkCreateFromPointCloudBallPivoting, Without Non Finite Points, true) -> Unit(benchmark::kMillisecond)
 
static std::tuple< ccPointCloud, ccPointCloudLoadPointCloud (const std::string &source_filename, const std::string &target_filename, const double voxel_downsample_factor)
 
static void BenchmarkICPLegacy (benchmark::State &state, const TransformationEstimationType &type)
 
 BENCHMARK_CAPTURE (BenchmarkICPLegacy, PointToPlane/CPU, TransformationEstimationType::PointToPlane) -> Unit(benchmark::kMillisecond)
 
 BENCHMARK_CAPTURE (BenchmarkICPLegacy, PointToPoint/CPU, TransformationEstimationType::PointToPoint) -> Unit(benchmark::kMillisecond)
 
void pybind_feature (py::module &m)
 
void pybind_feature_methods (py::module &m)
 
void pybind_global_optimization (py::module &m)
 
void pybind_global_optimization_methods (py::module &m)
 
void pybind_registration_classes (py::module &m)
 
void pybind_registration_methods (py::module &m)
 
void pybind_registration (py::module &m)
 
void pybind_robust_kernels (py::module &m)
 

Variables

const std::vector< Eigen::Matrix4d, utility::Matrix4d_allocatorjacobian_operator
 
static const double relative_fitness = 1e-6
 
static const double relative_rmse = 1e-6
 
static const int max_iterations = 10
 
static const double voxel_downsampling_factor = 0.02
 
static const double max_correspondence_distance = 0.05
 
static const std::unordered_map< std::string, std::string > map_shared_argument_docstrings
 

Typedef Documentation

◆ CorrespondenceSet

typedef std::vector<Eigen::Vector2i> cloudViewer::pipelines::registration::CorrespondenceSet

Definition at line 23 of file TransformationEstimation.h.

◆ PyCauchyLoss

◆ PyGMLoss

◆ PyHuberLoss

◆ PyL1Loss

◆ PyL2Loss

◆ PyRobustKernel

◆ PyTukeyLoss

Enumeration Type Documentation

◆ TransformationEstimationType

Enumerator
Unspecified 
PointToPoint 
PointToPlane 
ColoredICP 
GeneralizedICP 

Definition at line 25 of file TransformationEstimation.h.

Function Documentation

◆ AdvancedMatching()

static std::vector<std::pair<int, int> > cloudViewer::pipelines::registration::AdvancedMatching ( const ccPointCloud src_point_cloud,
const ccPointCloud dst_point_cloud,
const std::vector< std::pair< int, int >> &  corres_cross,
const FastGlobalRegistrationOption option 
)
static

◆ BENCHMARK_CAPTURE() [1/3]

cloudViewer::pipelines::registration::BENCHMARK_CAPTURE ( BenchmarkCreateFromPointCloudBallPivoting  ,
Without Non Finite  Points,
true   
) -> Unit(benchmark::kMillisecond)

◆ BENCHMARK_CAPTURE() [2/3]

cloudViewer::pipelines::registration::BENCHMARK_CAPTURE ( BenchmarkICPLegacy  ,
PointToPlane/  CPU,
TransformationEstimationType::PointToPlane   
) -> Unit(benchmark::kMillisecond)

◆ BENCHMARK_CAPTURE() [3/3]

cloudViewer::pipelines::registration::BENCHMARK_CAPTURE ( BenchmarkICPLegacy  ,
PointToPoint/  CPU,
TransformationEstimationType::PointToPoint   
) -> Unit(benchmark::kMillisecond)

◆ BenchmarkCreateFromPointCloudBallPivoting()

static void cloudViewer::pipelines::registration::BenchmarkCreateFromPointCloudBallPivoting ( benchmark::State &  state,
const bool  remove_non_finite_points 
)
static

◆ BenchmarkICPLegacy()

◆ CheckMaxIteration()

◆ CheckMaxIterationLM()

◆ CheckRelativeIncrement()

◆ CheckRelativeResidualIncrement()

◆ CheckResidual()

◆ CheckRightTerm()

◆ CompensateReferencePoseGraphNode()

void cloudViewer::pipelines::registration::CompensateReferencePoseGraphNode ( PoseGraph pose_graph_new,
const PoseGraph pose_graph_orig,
int  reference_node 
)

◆ ComputeLinearSystem()

std::tuple<Eigen::MatrixXd, Eigen::VectorXd> cloudViewer::pipelines::registration::ComputeLinearSystem ( const PoseGraph pose_graph,
const Eigen::VectorXd &  zeta 
)

The information matrix used here is consistent with [Choi et al 2015]. It is [-p_x | I]^T[-p_x | I]. \zeta is [\alpha \beta \gamma a b c] Another definition of information matrix used for [Kümmerle et al 2011] is [I | p_x] ^ T[I | p_x] so \zeta is [a b c \alpha \beta \gamma].

To see how H can be derived see [Kümmerle et al 2011]. Eq (9) for definition of H and b for k-th constraint. To see how the covariance matrix forms H, check g2o technical note: https ://github.com/RainerKuemmerle/g2o/blob/master/doc/g2o.pdf Eq (20) and Eq (21). (There is a typo in the equation though. B should be J)

This function focuses the case that every edge has two nodes (not hyper graph) so we have two Jacobian matrices from one constraint.

Definition at line 189 of file GlobalOptimization.cpp.

References cloudViewer::pipelines::registration::PoseGraphEdge::confidence_, cloudViewer::pipelines::registration::PoseGraph::edges_, GetJacobian(), GetRelativePoses(), cloudViewer::pipelines::registration::PoseGraphEdge::information_, cloudViewer::pipelines::registration::PoseGraph::nodes_, cloudViewer::pipelines::registration::PoseGraphEdge::source_node_id_, and cloudViewer::pipelines::registration::PoseGraphEdge::target_node_id_.

Referenced by cloudViewer::pipelines::registration::GlobalOptimizationGaussNewton::OptimizePoseGraph(), and cloudViewer::pipelines::registration::GlobalOptimizationLevenbergMarquardt::OptimizePoseGraph().

◆ ComputeLineProcessWeight()

◆ ComputeResidual()

double cloudViewer::pipelines::registration::ComputeResidual ( const PoseGraph pose_graph,
const Eigen::VectorXd &  zeta,
const double  line_process_weight,
const GlobalOptimizationOption option 
)

◆ ComputeZeta()

Eigen::VectorXd cloudViewer::pipelines::registration::ComputeZeta ( const PoseGraph pose_graph)

◆ CreatePoseGraphWithoutInvalidEdges()

std::shared_ptr< PoseGraph > cloudViewer::pipelines::registration::CreatePoseGraphWithoutInvalidEdges ( const PoseGraph pose_graph,
const GlobalOptimizationOption option 
)

◆ EvaluateRANSACBasedOnCorrespondence()

static RegistrationResult cloudViewer::pipelines::registration::EvaluateRANSACBasedOnCorrespondence ( const ccPointCloud source,
const ccPointCloud target,
const CorrespondenceSet corres,
double  max_correspondence_distance,
const Eigen::Matrix4d &  transformation 
)
static

◆ EvaluateRegistration()

RegistrationResult cloudViewer::pipelines::registration::EvaluateRegistration ( const ccPointCloud source,
const ccPointCloud target,
double  max_correspondence_distance,
const Eigen::Matrix4d &  transformation = Eigen::Matrix4d::Identity() 
)

Function for evaluating registration between point clouds.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
max_correspondence_distanceMaximum correspondence points-pair distance.
transformationThe 4x4 transformation matrix to transform source to target. Default value: array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]).

Definition at line 110 of file Registration.cpp.

References GetRegistrationResultAndCorrespondences(), max_correspondence_distance, cloudViewer::geometry::KDTreeFlann::SetGeometry(), and ccPointCloud::Transform().

Referenced by FastGlobalRegistrationBasedOnCorrespondence(), and FastGlobalRegistrationBasedOnFeatureMatching().

◆ FastGlobalRegistrationBasedOnCorrespondence()

RegistrationResult cloudViewer::pipelines::registration::FastGlobalRegistrationBasedOnCorrespondence ( const ccPointCloud source,
const ccPointCloud target,
const CorrespondenceSet corres,
const FastGlobalRegistrationOption option = FastGlobalRegistrationOption() 
)

Fast Global Registration based on a given set of correspondences.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
corresCorrespondence indices between source and target point clouds.
optionFGR options

Definition at line 285 of file FastGlobalRegistration.cpp.

References AdvancedMatching(), EvaluateRegistration(), GetTransformationOriginalScale(), cloudViewer::pipelines::registration::FastGlobalRegistrationOption::maximum_correspondence_distance_, NormalizePointCloud(), OptimizePairwiseRegistration(), and cloudViewer::pipelines::registration::FastGlobalRegistrationOption::tuple_test_.

◆ FastGlobalRegistrationBasedOnFeatureMatching()

RegistrationResult cloudViewer::pipelines::registration::FastGlobalRegistrationBasedOnFeatureMatching ( const ccPointCloud source,
const ccPointCloud target,
const utility::Feature source_feature,
const utility::Feature target_feature,
const FastGlobalRegistrationOption option = FastGlobalRegistrationOption() 
)

Fast Global Registration based on a given set of FPFH features.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
corresCorrespondence indices between source and target point clouds.
optionFGR options

Definition at line 326 of file FastGlobalRegistration.cpp.

References AdvancedMatching(), EvaluateRegistration(), GetTransformationOriginalScale(), InitialMatching(), cloudViewer::pipelines::registration::FastGlobalRegistrationOption::maximum_correspondence_distance_, NormalizePointCloud(), OptimizePairwiseRegistration(), cloudViewer::PointCloudTpl< T >::size(), std::swap(), and cloudViewer::pipelines::registration::FastGlobalRegistrationOption::tuple_test_.

◆ GetInformationMatrixFromPointClouds()

Eigen::Matrix6d cloudViewer::pipelines::registration::GetInformationMatrixFromPointClouds ( const ccPointCloud source,
const ccPointCloud target,
double  max_correspondence_distance,
const Eigen::Matrix4d &  transformation 
)
Parameters
sourceThe source point cloud.
targetThe target point cloud.
max_correspondence_distanceMaximum correspondence points-pair distance.
transformationThe 4x4 transformation matrix to transform source to target.

Definition at line 358 of file Registration.cpp.

References cloudViewer::PointCloudTpl< T >::getEigenPoint(), GetRegistrationResultAndCorrespondences(), max_correspondence_distance, result, and ccPointCloud::Transform().

◆ GetJacobian()

std::tuple<Eigen::Matrix6d, Eigen::Matrix6d> cloudViewer::pipelines::registration::GetJacobian ( const Eigen::Matrix4d &  X_inv,
const Eigen::Matrix4d &  Ts,
const Eigen::Matrix4d &  Tt_inv 
)

Definition at line 106 of file GlobalOptimization.cpp.

References GetLinearized6DVector(), and jacobian_operator.

Referenced by ComputeLinearSystem().

◆ GetLinearized6DVector()

Eigen::Vector6d cloudViewer::pipelines::registration::GetLinearized6DVector ( const Eigen::Matrix4d &  input)
inline

This function is intended for linearized form of SE(3). It is an approximate form. See [Choi et al 2015] for derivation. Alternatively, explicit representation that uses quaternion can be used here to replace this function. Refer to linearizeOplus() in https://github.com/RainerKuemmerle/g2o/blob/master/g2o/types/slam3d/edge_se3.cpp

Definition at line 78 of file GlobalOptimization.cpp.

Referenced by GetJacobian(), and GetMisalignmentVector().

◆ GetMisalignmentVector()

Eigen::Vector6d cloudViewer::pipelines::registration::GetMisalignmentVector ( const Eigen::Matrix4d &  X_inv,
const Eigen::Matrix4d &  Ts,
const Eigen::Matrix4d &  Tt_inv 
)
inline

Definition at line 87 of file GlobalOptimization.cpp.

References GetLinearized6DVector().

Referenced by ComputeZeta().

◆ GetRegistrationResultAndCorrespondences()

static RegistrationResult cloudViewer::pipelines::registration::GetRegistrationResultAndCorrespondences ( const ccPointCloud source,
const ccPointCloud target,
const geometry::KDTreeFlann target_kdtree,
double  max_correspondence_distance,
const Eigen::Matrix4d &  transformation 
)
static

◆ GetRelativePoses()

◆ GetTransformationOriginalScale()

Eigen::Matrix4d cloudViewer::pipelines::registration::GetTransformationOriginalScale ( const Eigen::Matrix4d &  transformation,
const std::vector< Eigen::Vector3d > &  pcd_mean_vec,
const double  scale_global 
)

◆ GlobalOptimization()

void cloudViewer::pipelines::registration::GlobalOptimization ( PoseGraph pose_graph,
const GlobalOptimizationMethod method = GlobalOptimizationLevenbergMarquardt(),
const GlobalOptimizationConvergenceCriteria criteria = GlobalOptimizationConvergenceCriteria(),
const GlobalOptimizationOption option = GlobalOptimizationOption() 
)

Function to optimize a PoseGraph Reference: [Kümmerle et al 2011] R Kümmerle, G. Grisetti, H. Strasdat, K. Konolige, W. Burgard g2o: A General Framework for Graph Optimization, ICRA 2011 [Choi et al 2015] S. Choi, Q.-Y. Zhou, V. Koltun, Robust Reconstruction of Indoor Scenes, CVPR 2015 [M. Lourakis 2009] M. Lourakis, SBA: A Software Package for Generic Sparse Bundle Adjustment, Transactions on Mathematical Software, 2009

Definition at line 677 of file GlobalOptimization.cpp.

References CompensateReferencePoseGraphNode(), CreatePoseGraphWithoutInvalidEdges(), cloudViewer::pipelines::registration::GlobalOptimizationMethod::OptimizePoseGraph(), cloudViewer::pipelines::registration::GlobalOptimizationOption::reference_node_, and ValidatePoseGraph().

Referenced by pybind_global_optimization_methods().

◆ InitialMatching()

static std::vector<std::pair<int, int> > cloudViewer::pipelines::registration::InitialMatching ( const utility::Feature src_features,
const utility::Feature dst_features 
)
static

◆ LoadPointCloud()

static std::tuple<ccPointCloud, ccPointCloud> cloudViewer::pipelines::registration::LoadPointCloud ( const std::string &  source_filename,
const std::string &  target_filename,
const double  voxel_downsample_factor 
)
static

◆ NormalizePointCloud()

std::tuple<std::vector<Eigen::Vector3d>, double, double> cloudViewer::pipelines::registration::NormalizePointCloud ( std::vector< ccPointCloud > &  point_cloud_vec,
const FastGlobalRegistrationOption option 
)

◆ OptimizePairwiseRegistration()

◆ pybind_feature()

◆ pybind_feature_methods()

void cloudViewer::pipelines::registration::pybind_feature_methods ( py::module &  m)

◆ pybind_global_optimization()

void cloudViewer::pipelines::registration::pybind_global_optimization ( py::module &  m)

Definition at line 32 of file global_optimization.cpp.

References cloudViewer::docstring::ClassMethodDocInject(), cloudViewer::pipelines::registration::PoseGraphEdge::confidence_, cloudViewer::pipelines::registration::GlobalOptimizationOption::edge_prune_threshold_, cloudViewer::pipelines::registration::PoseGraph::edges_, cloudViewer::pipelines::registration::PoseGraphEdge::information_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::lower_scale_factor_, max_correspondence_distance, cloudViewer::pipelines::registration::GlobalOptimizationOption::max_correspondence_distance_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::max_iteration_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::max_iteration_lm_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::min_relative_increment_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::min_relative_residual_increment_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::min_residual_, cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::min_right_term_, cloudViewer::pipelines::registration::PoseGraph::nodes_, cloudViewer::pipelines::registration::GlobalOptimizationMethod::OptimizePoseGraph(), cloudViewer::pipelines::registration::PoseGraphNode::pose_, cloudViewer::pipelines::registration::GlobalOptimizationOption::preference_loop_closure_, cloudViewer::pipelines::registration::GlobalOptimizationOption::reference_node_, cloudViewer::pipelines::registration::PoseGraphEdge::source_node_id_, cloudViewer::docstring::static_property, cloudViewer::pipelines::registration::PoseGraphEdge::target_node_id_, patch::to_string(), cloudViewer::pipelines::registration::PoseGraphEdge::transformation_, cloudViewer::pipelines::registration::PoseGraphEdge::uncertain_, and cloudViewer::pipelines::registration::GlobalOptimizationConvergenceCriteria::upper_scale_factor_.

◆ pybind_global_optimization_methods()

void cloudViewer::pipelines::registration::pybind_global_optimization_methods ( py::module &  m)

◆ pybind_registration()

void cloudViewer::pipelines::registration::pybind_registration ( py::module &  m)

Definition at line 689 of file registration.cpp.

Referenced by cloudViewer::pipelines::pybind_pipelines().

◆ pybind_registration_classes()

void cloudViewer::pipelines::registration::pybind_registration_classes ( py::module &  m)

Definition at line 67 of file registration.cpp.

References pybind11::detail::bind_default_constructor(), cloudViewer::pipelines::registration::CorrespondenceChecker::Check(), cloudViewer::docstring::ClassMethodDocInject(), cloudViewer::pipelines::registration::TransformationEstimation::ComputeRMSE(), cloudViewer::pipelines::registration::TransformationEstimation::ComputeTransformation(), cloudViewer::pipelines::registration::RANSACConvergenceCriteria::confidence_, cloudViewer::pipelines::registration::RegistrationResult::correspondence_set_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::decrease_mu_, cloudViewer::pipelines::registration::CorrespondenceCheckerBasedOnDistance::distance_threshold_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::division_factor_, cloudViewer::pipelines::registration::TransformationEstimationForGeneralizedICP::epsilon_, cloudViewer::pipelines::registration::RegistrationResult::fitness_, format, cloudViewer::pipelines::registration::RegistrationResult::inlier_rmse_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::iteration_number_, cloudViewer::pipelines::registration::TransformationEstimationForColoredICP::kernel_, cloudViewer::pipelines::registration::TransformationEstimationForGeneralizedICP::kernel_, cloudViewer::pipelines::registration::TransformationEstimationPointToPlane::kernel_, cloudViewer::pipelines::registration::TransformationEstimationForColoredICP::lambda_geometric_, cloudViewer::pipelines::registration::ICPConvergenceCriteria::max_iteration_, cloudViewer::pipelines::registration::RANSACConvergenceCriteria::max_iteration_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::maximum_tuple_count_, cloudViewer::pipelines::registration::ICPConvergenceCriteria::relative_fitness_, cloudViewer::pipelines::registration::ICPConvergenceCriteria::relative_rmse_, cloudViewer::pipelines::registration::CorrespondenceChecker::require_pointcloud_alignment_, patch::to_string(), cloudViewer::pipelines::registration::RegistrationResult::transformation_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::tuple_scale_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::tuple_test_, cloudViewer::pipelines::registration::FastGlobalRegistrationOption::use_absolute_scale_, and cloudViewer::pipelines::registration::TransformationEstimationPointToPoint::with_scaling_.

◆ pybind_registration_methods()

void cloudViewer::pipelines::registration::pybind_registration_methods ( py::module &  m)

Definition at line 588 of file registration.cpp.

◆ pybind_robust_kernels()

◆ RegistrationColoredICP()

RegistrationResult cloudViewer::pipelines::registration::RegistrationColoredICP ( const ccPointCloud source,
const ccPointCloud target,
double  max_distance,
const Eigen::Matrix4d &  init = Eigen::Matrix4d::Identity(),
const TransformationEstimationForColoredICP estimation = TransformationEstimationForColoredICP(),
const ICPConvergenceCriteria criteria = ICPConvergenceCriteria() 
)

Function for Colored ICP registration.

This is implementation of following paper J. Park, Q.-Y. Zhou, V. Koltun, Colored Point Cloud Registration Revisited, ICCV 2017.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
max_distanceMaximum correspondence points-pair distance.
initInitial transformation estimation. Default value: array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]).
estimationTransformationEstimationForColoredICP method. Can only change the lambda_geometric value and the robust kernel used in the optimization
criteriaConvergence criteria.

Definition at line 246 of file ColoredICP.cpp.

References ccPointCloud::hasColors(), ccPointCloud::hasNormals(), LogError, and RegistrationICP().

◆ RegistrationGeneralizedICP()

RegistrationResult cloudViewer::pipelines::registration::RegistrationGeneralizedICP ( const ccPointCloud source,
const ccPointCloud target,
double  max_correspondence_distance,
const Eigen::Matrix4d &  init = Eigen::Matrix4d::Identity(),
const TransformationEstimationForGeneralizedICP estimation = TransformationEstimationForGeneralizedICP(),
const ICPConvergenceCriteria criteria = ICPConvergenceCriteria() 
)

Function for Generalized ICP registration.

This is implementation of following paper Generalized-ICP, RSS 2009.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
max_distanceMaximum correspondence points-pair distance.
initInitial transformation estimation. Default value: array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]).
criteriaConvergence criteria.

Definition at line 150 of file GeneralizedICP.cpp.

References cloudViewer::pipelines::registration::TransformationEstimationForGeneralizedICP::epsilon_, max_correspondence_distance, and RegistrationICP().

◆ RegistrationICP()

RegistrationResult cloudViewer::pipelines::registration::RegistrationICP ( const ccPointCloud source,
const ccPointCloud target,
double  max_correspondence_distance,
const Eigen::Matrix4d &  init = Eigen::Matrix4d::Identity(),
const TransformationEstimation estimation = TransformationEstimationPointToPoint(false),
const ICPConvergenceCriteria criteria = ICPConvergenceCriteria() 
)

◆ RegistrationRANSACBasedOnCorrespondence()

RegistrationResult cloudViewer::pipelines::registration::RegistrationRANSACBasedOnCorrespondence ( const ccPointCloud source,
const ccPointCloud target,
const CorrespondenceSet corres,
double  max_correspondence_distance,
const TransformationEstimation estimation = TransformationEstimationPointToPoint(false),
int  ransac_n = 3,
const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &  checkers = {},
const RANSACConvergenceCriteria criteria = RANSACConvergenceCriteria(),
utility::optional< unsigned int >  seed = utility::nullopt 
)

Function for global RANSAC registration based on a given set of correspondences.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
corresCorrespondence indices between source and target point clouds.
max_correspondence_distanceMaximum correspondence points-pair distance.
estimationEstimation method.
ransac_nFit ransac with ransac_n correspondences.
checkersCorrespondence checker.
criteriaConvergence criteria.
seedRandom seed.

Definition at line 180 of file Registration.cpp.

References cloudViewer::utility::ceil(), cloudViewer::pipelines::registration::TransformationEstimation::ComputeTransformation(), cloudViewer::pipelines::registration::RANSACConvergenceCriteria::confidence_, EvaluateRANSACBasedOnCorrespondence(), cloudViewer::pipelines::registration::RegistrationResult::fitness_, cloudViewer::utility::optional< T >::has_value(), cloudViewer::pipelines::registration::RegistrationResult::inlier_rmse_, cloudViewer::pipelines::registration::RegistrationResult::IsBetterRANSACThan(), LogDebug, max_correspondence_distance, cloudViewer::pipelines::registration::RANSACConvergenceCriteria::max_iteration_, result, ccPointCloud::Transform(), and cloudViewer::utility::optional< T >::value().

Referenced by RegistrationRANSACBasedOnFeatureMatching().

◆ RegistrationRANSACBasedOnFeatureMatching()

RegistrationResult cloudViewer::pipelines::registration::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 = TransformationEstimationPointToPoint(false),
int  ransac_n = 3,
const std::vector< std::reference_wrapper< const CorrespondenceChecker >> &  checkers = {},
const RANSACConvergenceCriteria criteria = RANSACConvergenceCriteria(),
utility::optional< unsigned int >  seed = utility::nullopt 
)

Function for global RANSAC registration based on feature matching.

Parameters
sourceThe source point cloud.
targetThe target point cloud.
source_featureSource point cloud feature.
target_featureTarget point cloud feature.
mutual_filterEnables mutual filter such that the correspondence of the source point's correspondence is itself.
max_correspondence_distanceMaximum correspondence points-pair distance.
ransac_nFit ransac with ransac_n correspondences.
checkersCorrespondence checker.
criteriaConvergence criteria.
seedRandom seed.

Definition at line 276 of file Registration.cpp.

References cloudViewer::utility::Feature::data_, LogDebug, max_correspondence_distance, RegistrationRANSACBasedOnCorrespondence(), cloudViewer::geometry::KDTreeFlann::SearchKNN(), and cloudViewer::PointCloudTpl< T >::size().

◆ UpdateConfidence()

◆ UpdatePoseGraph()

◆ UpdatePoseVector()

◆ ValidatePoseGraph()

◆ ValidatePoseGraphConnectivity()

Variable Documentation

◆ jacobian_operator

const std::vector<Eigen::Matrix4d, utility::Matrix4d_allocator> cloudViewer::pipelines::registration::jacobian_operator

Definition of linear operators used for computing Jacobian matrix. If the relative transform of the two geometry is reasonably small, they can be approximated as below linearized form SE(3) \approx = | 1 -gamma beta a | | gamma 1 -alpha b | | -beta alpha 1 c | | 0 0 0 1 | It is from sin(x) \approx x and cos(x) \approx 1 when x is almost zero. See [Choi et al 2015] for more detail. Reference list in GlobalOptimization.h

Definition at line 40 of file GlobalOptimization.cpp.

Referenced by GetJacobian().

◆ map_shared_argument_docstrings

const std::unordered_map<std::string, std::string> cloudViewer::pipelines::registration::map_shared_argument_docstrings
static

Definition at line 541 of file registration.cpp.

◆ max_correspondence_distance

◆ max_iterations

const int cloudViewer::pipelines::registration::max_iterations = 10
static

◆ relative_fitness

const double cloudViewer::pipelines::registration::relative_fitness = 1e-6
static

Definition at line 27 of file Registration.cpp.

Referenced by BenchmarkICPLegacy().

◆ relative_rmse

const double cloudViewer::pipelines::registration::relative_rmse = 1e-6
static

Definition at line 28 of file Registration.cpp.

Referenced by BenchmarkICPLegacy().

◆ voxel_downsampling_factor

const double cloudViewer::pipelines::registration::voxel_downsampling_factor = 0.02
static

Definition at line 31 of file Registration.cpp.

Referenced by BenchmarkICPLegacy().