Loading...
Searching...
No Matches
pcl::GeneralizedIterativeClosestPoint6D Class Reference
Module registration

GeneralizedIterativeClosestPoint6D integrates L*a*b* color space information into the Generalized Iterative Closest Point (GICP) algorithm. More...

`#include <pcl/registration/gicp6d.h>`

Inheritance diagram for pcl::GeneralizedIterativeClosestPoint6D:

## Classes

class | MyPointRepresentation
| Custom point representation to perform kdtree searches in more than 3 (i.e. More...

## Public Member Functions

| GeneralizedIterativeClosestPoint6D (float lab_weight=0.032f)
| constructor.
void | setInputSource (const PointCloudSourceConstPtr &cloud) override
| Provide a pointer to the input source (e.g., the point cloud that we want to align to the target).
void | setInputTarget (const PointCloudTargetConstPtr &target) override
| Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to).
Public Member Functions inherited from pcl::GeneralizedIterativeClosestPoint< PointXYZRGBA, PointXYZRGBA >
PCL_MAKE_ALIGNED_OPERATOR_NEW | GeneralizedIterativeClosestPoint ()
| Empty constructor.
void | setInputSource (const PointCloudSourceConstPtr &cloud) override
| Provide a pointer to the input dataset.
void | setSourceCovariances (const MatricesVectorPtr &covariances)
| Provide a pointer to the covariances of the input source (if computed externally!).
void | setInputTarget (const PointCloudTargetConstPtr &target) override
| Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to).
void | setTargetCovariances (const MatricesVectorPtr &covariances)
| Provide a pointer to the covariances of the input target (if computed externally!).
void | estimateRigidTransformationBFGS (const PointCloudSource &cloud_src, const pcl::Indices &indices_src, const PointCloudTarget &cloud_tgt, const pcl::Indices &indices_tgt, Matrix4 &transformation_matrix)
| Estimate a rigid rotation transformation between a source and a target point cloud using an iterative non-linear BFGS approach.
void | estimateRigidTransformationNewton (const PointCloudSource &cloud_src, const pcl::Indices &indices_src, const PointCloudTarget &cloud_tgt, const pcl::Indices &indices_tgt, Matrix4 &transformation_matrix)
| Estimate a rigid rotation transformation between a source and a target point cloud using an iterative non-linear Newton approach.
const Eigen::Matrix3d & | mahalanobis (std::size_t index) const
void | computeRDerivative (const Vector6d &x, const Eigen::Matrix3d &dCost_dR_T, Vector6d &g) const
| Computes the derivative of the cost function w.r.t rotation angles.
void | setRotationEpsilon (double epsilon)
| Set the rotation epsilon (maximum allowable difference between two consecutive rotations) in order for an optimization to be considered as having converged to the final solution.
double | getRotationEpsilon () const
| Get the rotation epsilon (maximum allowable difference between two consecutive rotations) as set by the user.
void | setCorrespondenceRandomness (int k)
| Set the number of neighbors used when selecting a point neighbourhood to compute covariances.
int | getCorrespondenceRandomness () const
| Get the number of neighbors used when computing covariances as set by the user.
void | useBFGS ()
| Use BFGS optimizer instead of default Newton optimizer.
void | setMaximumOptimizerIterations (int max)
| Set maximum number of iterations at the optimization step.
int | getMaximumOptimizerIterations () const
| Return maximum number of iterations at the optimization step.
void | setTranslationGradientTolerance (double tolerance)
| Set the minimal translation gradient threshold for early optimization stop.
double | getTranslationGradientTolerance () const
| Return the minimal translation gradient threshold for early optimization stop.
void | setRotationGradientTolerance (double tolerance)
| Set the minimal rotation gradient threshold for early optimization stop.
double | getRotationGradientTolerance () const
| Return the minimal rotation gradient threshold for early optimization stop.
void | setNumberOfThreads (unsigned int nr_threads=0)
| Initialize the scheduler and set the number of threads to use.
Public Member Functions inherited from pcl::IterativeClosestPoint< PointXYZRGBA, PointXYZRGBA, float >
| IterativeClosestPoint ()
| Empty constructor.
IterativeClosestPoint & | operator= (const IterativeClosestPoint &)=delete
| ~IterativeClosestPoint () override=default
| Empty destructor.
pcl::registration::DefaultConvergenceCriteria< float >::Ptr | getConvergeCriteria ()
| Returns a pointer to the DefaultConvergenceCriteria used by the IterativeClosestPoint class.
void | setInputSource (const PointCloudSourceConstPtr &cloud) override
| Provide a pointer to the input source (e.g., the point cloud that we want to align to the target).
void | setInputTarget (const PointCloudTargetConstPtr &cloud) override
| Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to).
void | setUseReciprocalCorrespondences (bool use_reciprocal_correspondence)
| Set whether to use reciprocal correspondence or not.
bool | getUseReciprocalCorrespondences () const
| Obtain whether reciprocal correspondence are used or not.
void | setNumberOfThreads (unsigned int nr_threads)
| Set the number of threads to use.
Public Member Functions inherited from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >
| Registration ()
| Empty constructor.
| ~Registration () override=default
| destructor.
void | setTransformationEstimation (const TransformationEstimationPtr &te)
| Provide a pointer to the transformation estimation object.
void | setCorrespondenceEstimation (const CorrespondenceEstimationPtr &ce)
| Provide a pointer to the correspondence estimation object.
PointCloudSourceConstPtr const | getInputSource ()
| Get a pointer to the input point cloud dataset target.
PointCloudTargetConstPtr const | getInputTarget ()
| Get a pointer to the input point cloud dataset target.
void | setSearchMethodTarget (const KdTreePtr &tree, bool force_no_recompute=false)
| Provide a pointer to the search object used to find correspondences in the target cloud.
KdTreePtr | getSearchMethodTarget () const
| Get a pointer to the search method used to find correspondences in the target cloud.
void | setSearchMethodSource (const KdTreeReciprocalPtr &tree, bool force_no_recompute=false)
| Provide a pointer to the search object used to find correspondences in the source cloud (usually used by reciprocal correspondence finding).
KdTreeReciprocalPtr | getSearchMethodSource () const
| Get a pointer to the search method used to find correspondences in the source cloud.
Matrix4 | getFinalTransformation ()
| Get the final transformation matrix estimated by the registration method.
Matrix4 | getLastIncrementalTransformation ()
| Get the last incremental transformation matrix estimated by the registration method.
void | setMaximumIterations (int nr_iterations)
| Set the maximum number of iterations the internal optimization should run for.
int | getMaximumIterations ()
| Get the maximum number of iterations the internal optimization should run for, as set by the user.
void | setRANSACIterations (int ransac_iterations)
| Set the number of iterations RANSAC should run for.
double | getRANSACIterations ()
| Get the number of iterations RANSAC should run for, as set by the user.
void | setRANSACOutlierRejectionThreshold (double inlier_threshold)
| Set the inlier distance threshold for the internal RANSAC outlier rejection loop.
double | getRANSACOutlierRejectionThreshold ()
| Get the inlier distance threshold for the internal outlier rejection loop as set by the user.
void | setMaxCorrespondenceDistance (double distance_threshold)
| Set the maximum distance threshold between two correspondent points in source <-> target.
double | getMaxCorrespondenceDistance ()
| Get the maximum distance threshold between two correspondent points in source <-> target.
void | setTransformationEpsilon (double epsilon)
| Set the transformation epsilon (maximum allowable translation squared difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution.
double | getTransformationEpsilon ()
| Get the transformation epsilon (maximum allowable translation squared difference between two consecutive transformations) as set by the user.
void | setTransformationRotationEpsilon (double epsilon)
| Set the transformation rotation epsilon (maximum allowable rotation difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution.
double | getTransformationRotationEpsilon ()
| Get the transformation rotation epsilon (maximum allowable difference between two consecutive transformations) as set by the user (epsilon is the cos(angle) in a axis-angle representation).
void | setEuclideanFitnessEpsilon (double epsilon)
| Set the maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged.
double | getEuclideanFitnessEpsilon ()
| Get the maximum allowed distance error before the algorithm will be considered to have converged, as set by the user.
void | setPointRepresentation (const PointRepresentationConstPtr &point_representation)
| Provide a boost shared pointer to the PointRepresentation to be used when comparing points.
bool | registerVisualizationCallback (std::function< UpdateVisualizerCallbackSignature > &visualizerCallback)
| Register the user callback function which will be called from registration thread in order to update point cloud obtained after each iteration.
double | getFitnessScore (double max_range=std::numeric_limits< double >::max())
| Obtain the Euclidean fitness score (e.g., mean of squared distances from the source to the target).
bool | hasConverged () const
| Return the state of convergence after the last align run.
void | align (PointCloudSource &output)
| Call the registration algorithm which estimates the transformation and returns the transformed source (input) as output.
const std::string & | getClassName () const
| Abstract class get name method.
bool | initCompute ()
| Internal computation initialization.
bool | initComputeReciprocal ()
| Internal computation when reciprocal lookup is needed.
void | addCorrespondenceRejector (const CorrespondenceRejectorPtr &rejector)
| Add a new correspondence rejector to the list.
std::vector< CorrespondenceRejectorPtr > | getCorrespondenceRejectors ()
| Get the list of correspondence rejectors.
bool | removeCorrespondenceRejector (unsigned int i)
| Remove the i-th correspondence rejector in the list.
void | clearCorrespondenceRejectors ()
| Clear the list of correspondence rejectors.
Public Member Functions inherited from pcl::PCLBase< PointXYZRGBA >
| PCLBase ()
| Empty constructor.
virtual | ~PCLBase ()=default
| Destructor.
virtual void | setInputCloud (const PointCloudConstPtr &cloud)
| Provide a pointer to the input dataset.
PointCloudConstPtr const | getInputCloud () const
| Get a pointer to the input point cloud dataset.
virtual void | setIndices (const IndicesPtr &indices)
| Provide a pointer to the vector of indices that represents the input data.
IndicesPtr | getIndices ()
| Get a pointer to the vector of indices used.
const PointXYZRGBA & | operator[] (std::size_t pos) const
| Override PointCloud operator[] to shorten code.

## Protected Member Functions

void | computeTransformation (PointCloudSource &output, const Eigen::Matrix4f &guess) override
| Rigid transformation computation method with initial guess.
bool | searchForNeighbors (const PointXYZLAB &query, pcl::Indices &index, std::vector< float > &distance)
| Search for the closest nearest neighbor of a given point.
Protected Member Functions inherited from pcl::GeneralizedIterativeClosestPoint< PointXYZRGBA, PointXYZRGBA >
void | computeCovariances (typename pcl::PointCloud< PointT >::ConstPtr cloud, const typename pcl::search::KdTree< PointT >::Ptr tree, MatricesVector &cloud_covariances)
| compute points covariances matrices according to the K nearest neighbors.
double | matricesInnerProd (const Eigen::MatrixXd &mat1, const Eigen::MatrixXd &mat2) const
void | computeTransformation (PointCloudSource &output, const Matrix4 &guess) override
| Rigid transformation computation method with initial guess.
bool | searchForNeighbors (const PointXYZRGBA &query, pcl::Indices &index, std::vector< float > &distance)
| Search for the closest nearest neighbor of a given point.
void | applyState (Matrix4 &t, const Vector6d &x) const
| compute transformation matrix from transformation matrix
Protected Member Functions inherited from pcl::IterativeClosestPoint< PointXYZRGBA, PointXYZRGBA, float >
virtual void | transformCloud (const PointCloudSource &input, PointCloudSource &output, const Matrix4 &transform)
| Apply a rigid transform to a given dataset.
void | computeTransformation (PointCloudSource &output, const Matrix4 &guess) override
| Rigid transformation computation method with initial guess.
virtual void | determineRequiredBlobData ()
| Looks at the Estimators and Rejectors and determines whether their blob-setter methods need to be called.
Protected Member Functions inherited from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >
bool | searchForNeighbors (const PointCloudSource &cloud, int index, pcl::Indices &indices, std::vector< float > &distances)
| Search for the closest nearest neighbor of a given point.
virtual void | computeTransformation (PointCloudSource &output, const Matrix4 &guess)=0
| Abstract transformation computation method with initial guess.
Protected Member Functions inherited from pcl::PCLBase< PointXYZRGBA >
bool | initCompute ()
| This method should get called before starting the actual computation.
bool | deinitCompute ()
| This method should get called after finishing the actual computation.

## Protected Attributes

pcl::PointCloud< PointXYZLAB >::Ptr | cloud_lab_
| Holds the converted (LAB) data cloud.
pcl::PointCloud< PointXYZLAB >::Ptr | target_lab_
| Holds the converted (LAB) model cloud.
KdTreeFLANN< PointXYZLAB > | target_tree_lab_
| 6d-tree to search in model cloud.
float | lab_weight_
| The color weight.
MyPointRepresentation | point_rep_
| Enables 6d searches with kd-tree class using the color weight.
Protected Attributes inherited from pcl::GeneralizedIterativeClosestPoint< PointXYZRGBA, PointXYZRGBA >
int | k_correspondences_
| The number of neighbors used for covariances computation.
double | gicp_epsilon_
| The epsilon constant for gicp paper; this is NOT the convergence tolerance default: 0.001.
double | rotation_epsilon_
| The epsilon constant for rotation error.
Matrix4 | base_transformation_
| base transformation
const PointCloudSource * | tmp_src_
| Temporary pointer to the source dataset.
const PointCloudTarget * | tmp_tgt_
| Temporary pointer to the target dataset.
const pcl::Indices * | tmp_idx_src_
| Temporary pointer to the source dataset indices.
const pcl::Indices * | tmp_idx_tgt_
| Temporary pointer to the target dataset indices.
MatricesVectorPtr | input_covariances_
| Input cloud points covariances.
MatricesVectorPtr | target_covariances_
| Target cloud points covariances.
std::vector< Eigen::Matrix3d > | mahalanobis_
| Mahalanobis matrices holder.
int | max_inner_iterations_
| maximum number of optimizations
double | translation_gradient_tolerance_
| minimal translation gradient for early optimization stop
double | rotation_gradient_tolerance_
| minimal rotation gradient for early optimization stop
std::function< void(const pcl::PointCloud< PointXYZRGBA > &cloud_src, const pcl::Indices &src_indices, const pcl::PointCloud< PointXYZRGBA > &cloud_tgt, const pcl::Indices &tgt_indices, Matrix4 &transformation_matrix)> | rigid_transformation_estimation_
Protected Attributes inherited from pcl::IterativeClosestPoint< PointXYZRGBA, PointXYZRGBA, float >
std::size_t | x_idx_offset_
| XYZ fields offset.
std::size_t | y_idx_offset_
std::size_t | z_idx_offset_
std::size_t | nx_idx_offset_
| Normal fields offset.
std::size_t | ny_idx_offset_
std::size_t | nz_idx_offset_
bool | use_reciprocal_correspondence_
| The correspondence type used for correspondence estimation.
bool | source_has_normals_
| Internal check whether source dataset has normals or not.
bool | target_has_normals_
| Internal check whether target dataset has normals or not.
bool | need_source_blob_
| Checks for whether estimators and rejectors need various data.
bool | need_target_blob_
Protected Attributes inherited from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >
std::string | reg_name_
| The registration method name.
KdTreePtr | tree_
| A pointer to the spatial search object.
KdTreeReciprocalPtr | tree_reciprocal_
| A pointer to the spatial search object of the source.
int | nr_iterations_
| The number of iterations the internal optimization ran for (used internally).
int | max_iterations_
| The maximum number of iterations the internal optimization should run for.
int | ransac_iterations_
| The number of iterations RANSAC should run for.
PointCloudTargetConstPtr | target_
| The input point cloud dataset target.
Matrix4 | final_transformation_
| The final transformation matrix estimated by the registration method after N iterations.
Matrix4 | transformation_
| The transformation matrix estimated by the registration method.
Matrix4 | previous_transformation_
| The previous transformation matrix estimated by the registration method (used internally).
double | transformation_epsilon_
| The maximum difference between two consecutive transformations in order to consider convergence (user defined).
double | transformation_rotation_epsilon_
| The maximum rotation difference between two consecutive transformations in order to consider convergence (user defined).
double | euclidean_fitness_epsilon_
| The maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged.
double | corr_dist_threshold_
| The maximum distance threshold between two correspondent points in source <-> target.
double | inlier_threshold_
| The inlier distance threshold for the internal RANSAC outlier rejection loop.
bool | converged_
| Holds internal convergence state, given user parameters.
unsigned int | min_number_correspondences_
| The minimum number of correspondences that the algorithm needs before attempting to estimate the transformation.
CorrespondencesPtr | correspondences_
| The set of correspondences determined at this ICP step.
TransformationEstimationPtr | transformation_estimation_
| A TransformationEstimation object, used to calculate the 4x4 rigid transformation.
CorrespondenceEstimationPtr | correspondence_estimation_
| A CorrespondenceEstimation object, used to estimate correspondences between the source and the target cloud.
std::vector< CorrespondenceRejectorPtr > | correspondence_rejectors_
| The list of correspondence rejectors to use.
bool | target_cloud_updated_
| Variable that stores whether we have a new target cloud, meaning we need to pre-process it again.
bool | source_cloud_updated_
| Variable that stores whether we have a new source cloud, meaning we need to pre-process it again.
bool | force_no_recompute_
| A flag which, if set, means the tree operating on the target cloud will never be recomputed.
bool | force_no_recompute_reciprocal_
| A flag which, if set, means the tree operating on the source cloud will never be recomputed.
std::function< UpdateVisualizerCallbackSignature > | update_visualizer_
| Callback function to update intermediate source point cloud position during it's registration to the target point cloud.
Protected Attributes inherited from pcl::PCLBase< PointXYZRGBA >
PointCloudConstPtr | input_
| The input point cloud dataset.
IndicesPtr | indices_
| A pointer to the vector of point indices to use.
bool | use_indices_
| Set to true if point indices are used.
bool | fake_indices_
| If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud.

## Additional Inherited Members

Public Types inherited from pcl::GeneralizedIterativeClosestPoint< PointXYZRGBA, PointXYZRGBA >
using | PointCloudSource
using | PointCloudSourcePtr
using | PointCloudSourceConstPtr
using | PointCloudTarget
using | PointCloudTargetPtr
using | PointCloudTargetConstPtr
using | PointIndicesPtr
using | PointIndicesConstPtr
using | MatricesVector
using | MatricesVectorPtr
using | MatricesVectorConstPtr
using | InputKdTree
using | InputKdTreePtr
using | Ptr
using | ConstPtr
using | Vector3
using | Vector4
using | Vector6d
using | Matrix3
using | Matrix4
using | Matrix6d
using | AngleAxis
Public Types inherited from pcl::IterativeClosestPoint< PointXYZRGBA, PointXYZRGBA, float >
using | PointCloudSource
using | PointCloudSourcePtr
using | PointCloudSourceConstPtr
using | PointCloudTarget
using | PointCloudTargetPtr
using | PointCloudTargetConstPtr
using | PointIndicesPtr
using | PointIndicesConstPtr
using | Ptr
using | ConstPtr
using | Matrix4
Public Types inherited from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >
using | Matrix4
using | Ptr
using | ConstPtr
using | CorrespondenceRejectorPtr
using | KdTree
using | KdTreePtr
using | KdTreeReciprocal
using | KdTreeReciprocalPtr
using | PointCloudSource
using | PointCloudSourcePtr
using | PointCloudSourceConstPtr
using | PointCloudTarget
using | PointCloudTargetPtr
using | PointCloudTargetConstPtr
using | PointRepresentationConstPtr
using | TransformationEstimation
using | TransformationEstimationPtr
using | TransformationEstimationConstPtr
using | CorrespondenceEstimation
using | CorrespondenceEstimationPtr
using | CorrespondenceEstimationConstPtr
using | UpdateVisualizerCallbackSignature
| The callback signature to the function updating intermediate source point cloud position during it's registration to the target point cloud.
Public Types inherited from pcl::PCLBase< PointXYZRGBA >
using | PointCloud
using | PointCloudPtr
using | PointCloudConstPtr
using | PointIndicesPtr
using | PointIndicesConstPtr
Public Attributes inherited from pcl::IterativeClosestPoint< PointXYZRGBA, PointXYZRGBA, float >
pcl::registration::DefaultConvergenceCriteria< float >::Ptr | convergence_criteria_

## Detailed Description

GeneralizedIterativeClosestPoint6D integrates L*a*b* color space information into the Generalized Iterative Closest Point (GICP) algorithm.

The suggested input is PointXYZRGBA.

Note
  If you use this code in any academic work, please cite:

- M. Korn, M. Holzkothen, J. Pauli Color Supported Generalized-ICP. In Proceedings of VISAPP 2014 - International Conference on Computer Vision Theory and Applications, Lisbon, Portugal, January 2014.

Author
  Martin Holzkothen, Michael Korn

Definition at line 65 of file gicp6d.h.

## Constructor & Destructor Documentation

## GeneralizedIterativeClosestPoint6D()

pcl::GeneralizedIterativeClosestPoint6D::GeneralizedIterativeClosestPoint6D | ( | float | lab_weight = 0.032f | ) |

constructor.

Parameters

  [in] | lab_weight | the color weight

## Member Function Documentation

## computeTransformation()

void pcl::GeneralizedIterativeClosestPoint6D::computeTransformation | ( | PointCloudSource & | output,
|  | const Eigen::Matrix4f & | guess )

override protected

Rigid transformation computation method with initial guess.

Parameters

  output | the transformed input point cloud dataset using the rigid transformation found
  guess | the initial guess of the transformation to compute

## searchForNeighbors()

bool pcl::GeneralizedIterativeClosestPoint6D::searchForNeighbors | ( | const PointXYZLAB & | query,
|  | pcl::Indices & | index,
|  | std::vector< float > & | distance )

inline protected

Search for the closest nearest neighbor of a given point.

Parameters

  query | the point to search a nearest neighbour for
  index | vector of size 1 to store the index of the nearest neighbour found
  distance | vector of size 1 to store the distance to nearest neighbour found

## setInputSource()

void pcl::GeneralizedIterativeClosestPoint6D::setInputSource | ( | const PointCloudSourceConstPtr & | cloud | ) |

override virtual

Provide a pointer to the input source (e.g., the point cloud that we want to align to the target).

Parameters

  [in] | cloud | the input point cloud source

Reimplemented from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >.

## setInputTarget()

void pcl::GeneralizedIterativeClosestPoint6D::setInputTarget | ( | const PointCloudTargetConstPtr & | target | ) |

override virtual

Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to).

Parameters

  [in] | target | the input point cloud target

Reimplemented from pcl::Registration< PointXYZRGBA, PointXYZRGBA, float >.

## Member Data Documentation

## cloud_lab_

pcl::PointCloud<PointXYZLAB>::Ptr pcl::GeneralizedIterativeClosestPoint6D::cloud_lab_

protected

Holds the converted (LAB) data cloud.

Definition at line 115 of file gicp6d.h.

## lab_weight_

float pcl::GeneralizedIterativeClosestPoint6D::lab_weight_

protected

The color weight.

Definition at line 124 of file gicp6d.h.

## point_rep_

MyPointRepresentation pcl::GeneralizedIterativeClosestPoint6D::point_rep_

protected

Enables 6d searches with kd-tree class using the color weight.

Definition at line 164 of file gicp6d.h.

## target_lab_

pcl::PointCloud<PointXYZLAB>::Ptr pcl::GeneralizedIterativeClosestPoint6D::target_lab_

protected

Holds the converted (LAB) model cloud.

Definition at line 118 of file gicp6d.h.

## target_tree_lab_

KdTreeFLANN<PointXYZLAB> pcl::GeneralizedIterativeClosestPoint6D::target_tree_lab_

protected

6d-tree to search in model cloud.

Definition at line 121 of file gicp6d.h.

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

- pcl/registration/gicp6d.h