Point Cloud Library (PCL) 1.15.1-dev
Loading...
Searching...
No Matches
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar > Class Template Reference

TransformationEstimationPointToPointRobust implements SVD-based estimation of the transformation aligning the given correspondences for minimizing the Welsch function instead of L2-norm, For additional details, see "Fast and Robust Iterative Closest Point", Juyong Zhang, Yuxin Yao, Bailin Deng, 2021. More...

#include <pcl/registration/transformation_estimation_point_to_point_robust.h>

+ Inheritance diagram for pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >:
+ Collaboration diagram for pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >:

Public Types

using Ptr = shared_ptr< TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar > >
 
using ConstPtr = shared_ptr< const TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar > >
 
using Matrix4 = typename TransformationEstimation< PointSource, PointTarget, Scalar >::Matrix4
 
- Public Types inherited from pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >
using Matrix4 = Eigen::Matrix< Scalar, 4, 4 >
 
using Ptr = shared_ptr< TransformationEstimation< PointSource, PointTarget, Scalar > >
 
using ConstPtr = shared_ptr< const TransformationEstimation< PointSource, PointTarget, Scalar > >
 

Public Member Functions

 TransformationEstimationPointToPointRobust ()=default
 Constructor.
 
 ~TransformationEstimationPointToPointRobust () override=default
 
void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const override
 Estimate a rigid rotation transformation between a source and a target point cloud using SVD.
 
void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::Indices &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const override
 Estimate a rigid rotation transformation between a source and a target point cloud using SVD.
 
void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::Indices &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Indices &indices_tgt, Matrix4 &transformation_matrix) const override
 Estimate a rigid rotation transformation between a source and a target point cloud using SVD.
 
void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Correspondences &correspondences, Matrix4 &transformation_matrix) const override
 Estimate a rigid rotation transformation between a source and a target point cloud using SVD.
 
void setSigma (Scalar sigma)
 Set the Welsch scale parameter used for robust reweighting.
 
- Public Member Functions inherited from pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >
 TransformationEstimation ()=default
 
virtual ~TransformationEstimation ()=default
 

Protected Member Functions

void estimateRigidTransformation (ConstCloudIterator< PointSource > &source_it, ConstCloudIterator< PointTarget > &target_it, Matrix4 &transformation_matrix) const
 Estimate a rigid rotation transformation between a source and a target.
 
virtual void getTransformationFromCorrelation (const Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > &cloud_src_demean, const Eigen::Matrix< Scalar, 4, 1 > &centroid_src, const Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > &cloud_tgt_demean, const Eigen::Matrix< Scalar, 4, 1 > &centroid_tgt, const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &weights, Matrix4 &transformation_matrix) const
 Obtain a 4x4 rigid transformation matrix from a correlation matrix H = src.
 
template<typename PointT >
unsigned int computeWeighted3DCentroid (ConstCloudIterator< PointT > &cloud_iterator, const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &weights, Eigen::Matrix< Scalar, 4, 1 > &centroid) const
 Compute the 3D (X-Y-Z) centroid of a set of weighted points and return it as a 3D vector.
 

Protected Attributes

Scalar sigma_ = -1
 parameter for the Welsch function
 

Detailed Description

template<typename PointSource, typename PointTarget, typename Scalar = float>
class pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >

TransformationEstimationPointToPointRobust implements SVD-based estimation of the transformation aligning the given correspondences for minimizing the Welsch function instead of L2-norm, For additional details, see "Fast and Robust Iterative Closest Point", Juyong Zhang, Yuxin Yao, Bailin Deng, 2021.

Note
The class is templated on the source and target point types as well as on the output scalar of the transformation matrix (i.e., float or double). Default: float.
Author
Yuxin Yao

Definition at line 29 of file transformation_estimation_point_to_point_robust.h.

Member Typedef Documentation

◆ ConstPtr

template<typename PointSource , typename PointTarget , typename Scalar = float>
using pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::ConstPtr = shared_ptr<const TransformationEstimationPointToPointRobust<PointSource, PointTarget, Scalar> >

◆ Matrix4

template<typename PointSource , typename PointTarget , typename Scalar = float>
using pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::Matrix4 = typename TransformationEstimation<PointSource, PointTarget, Scalar>::Matrix4

◆ Ptr

template<typename PointSource , typename PointTarget , typename Scalar = float>
using pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::Ptr = shared_ptr< TransformationEstimationPointToPointRobust<PointSource, PointTarget, Scalar> >

Constructor & Destructor Documentation

◆ TransformationEstimationPointToPointRobust()

template<typename PointSource , typename PointTarget , typename Scalar = float>
pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::TransformationEstimationPointToPointRobust ( )
default

Constructor.

◆ ~TransformationEstimationPointToPointRobust()

template<typename PointSource , typename PointTarget , typename Scalar = float>
pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::~TransformationEstimationPointToPointRobust ( )
overridedefault

Member Function Documentation

◆ estimateRigidTransformation() [1/5]

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::estimateRigidTransformation ( const pcl::PointCloud< PointSource > &  cloud_src,
const pcl::Indices indices_src,
const pcl::PointCloud< PointTarget > &  cloud_tgt,
const pcl::Indices indices_tgt,
Matrix4 transformation_matrix 
) const
inlineoverridevirtual

Estimate a rigid rotation transformation between a source and a target point cloud using SVD.

Parameters
[in]cloud_srcthe source point cloud dataset
[in]indices_srcthe vector of indices describing the points of interest in cloud_src
[in]cloud_tgtthe target point cloud dataset
[in]indices_tgtthe vector of indices describing the correspondences of the interest points from indices_src
[out]transformation_matrixthe resultant transformation matrix

Implements pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >.

Definition at line 68 of file transformation_estimation_point_to_point_robust.hpp.

◆ estimateRigidTransformation() [2/5]

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::estimateRigidTransformation ( const pcl::PointCloud< PointSource > &  cloud_src,
const pcl::Indices indices_src,
const pcl::PointCloud< PointTarget > &  cloud_tgt,
Matrix4 transformation_matrix 
) const
inlineoverridevirtual

Estimate a rigid rotation transformation between a source and a target point cloud using SVD.

Parameters
[in]cloud_srcthe source point cloud dataset
[in]indices_srcthe vector of indices describing the points of interest in cloud_src
[in]cloud_tgtthe target point cloud dataset
[out]transformation_matrixthe resultant transformation matrix

Implements pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >.

Definition at line 46 of file transformation_estimation_point_to_point_robust.hpp.

References pcl::PointCloud< PointT >::size().

◆ estimateRigidTransformation() [3/5]

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::estimateRigidTransformation ( const pcl::PointCloud< PointSource > &  cloud_src,
const pcl::PointCloud< PointTarget > &  cloud_tgt,
const pcl::Correspondences correspondences,
Matrix4 transformation_matrix 
) const
overridevirtual

Estimate a rigid rotation transformation between a source and a target point cloud using SVD.

Parameters
[in]cloud_srcthe source point cloud dataset
[in]cloud_tgtthe target point cloud dataset
[in]correspondencesthe vector of correspondences between source and target point cloud
[out]transformation_matrixthe resultant transformation matrix

Implements pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >.

Definition at line 91 of file transformation_estimation_point_to_point_robust.hpp.

◆ estimateRigidTransformation() [4/5]

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::estimateRigidTransformation ( const pcl::PointCloud< PointSource > &  cloud_src,
const pcl::PointCloud< PointTarget > &  cloud_tgt,
Matrix4 transformation_matrix 
) const
inlineoverridevirtual

Estimate a rigid rotation transformation between a source and a target point cloud using SVD.

Parameters
[in]cloud_srcthe source point cloud dataset
[in]cloud_tgtthe target point cloud dataset
[out]transformation_matrixthe resultant transformation matrix

Implements pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >.

Definition at line 24 of file transformation_estimation_point_to_point_robust.hpp.

References pcl::PointCloud< PointT >::size().

◆ estimateRigidTransformation() [5/5]

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::estimateRigidTransformation ( ConstCloudIterator< PointSource > &  source_it,
ConstCloudIterator< PointTarget > &  target_it,
Matrix4 transformation_matrix 
) const
inlineprotected

Estimate a rigid rotation transformation between a source and a target.

Parameters
[in]source_itan iterator over the source point cloud dataset
[in]target_itan iterator over the target point cloud dataset
[out]transformation_matrixthe resultant transformation matrix

Definition at line 104 of file transformation_estimation_point_to_point_robust.hpp.

References pcl::demeanPointCloud(), pcl::ConstCloudIterator< PointT >::reset(), and pcl::ConstCloudIterator< PointT >::size().

◆ getTransformationFromCorrelation()

template<typename PointSource , typename PointTarget , typename Scalar >
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::getTransformationFromCorrelation ( const Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > &  cloud_src_demean,
const Eigen::Matrix< Scalar, 4, 1 > &  centroid_src,
const Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > &  cloud_tgt_demean,
const Eigen::Matrix< Scalar, 4, 1 > &  centroid_tgt,
const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &  weights,
Matrix4 transformation_matrix 
) const
protectedvirtual

Obtain a 4x4 rigid transformation matrix from a correlation matrix H = src.

  • tgt'
    Parameters
    [in]cloud_src_demeanthe input source cloud, demeaned, in Eigen format
    [in]centroid_srcthe input source centroid, in Eigen format
    [in]cloud_tgt_demeanthe input target cloud, demeaned, in Eigen format
    [in]centroid_tgtthe input target cloud, in Eigen format
    [out]transformation_matrixthe resultant 4x4 rigid transformation matrix

Definition at line 175 of file transformation_estimation_point_to_point_robust.hpp.

References pcl::console::isVerbosityLevelEnabled(), and pcl::console::L_DEBUG.

◆ setSigma()

template<typename PointSource , typename PointTarget , typename Scalar = float>
void pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::setSigma ( Scalar  sigma)
inline

Set the Welsch scale parameter used for robust reweighting.

If set to a positive value, this exact sigma is used. If set to a negative value (default), sigma is estimated automatically from current correspondences. Smaller positive values increase outlier suppression, larger values make the estimator closer to standard least-squares behavior.

Definition at line 106 of file transformation_estimation_point_to_point_robust.h.

References pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::sigma_.

Member Data Documentation

◆ sigma_

template<typename PointSource , typename PointTarget , typename Scalar = float>
Scalar pcl::registration::TransformationEstimationPointToPointRobust< PointSource, PointTarget, Scalar >::sigma_ = -1
protected

The documentation for this class was generated from the following files: