Public Types |
typedef Registration
< PointSource, PointTarget,
Scalar >::PointCloudSource | PointCloudSource |
| typedef PointCloudSource::Ptr | PointCloudSourcePtr |
| typedef PointCloudSource::ConstPtr | PointCloudSourceConstPtr |
typedef Registration
< PointSource, PointTarget,
Scalar >::PointCloudTarget | PointCloudTarget |
| typedef PointCloudTarget::Ptr | PointCloudTargetPtr |
| typedef PointCloudTarget::ConstPtr | PointCloudTargetConstPtr |
| typedef PointIndices::Ptr | PointIndicesPtr |
| typedef PointIndices::ConstPtr | PointIndicesConstPtr |
typedef boost::shared_ptr
< IterativeClosestPoint
< PointSource, PointTarget,
Scalar > > | Ptr |
typedef boost::shared_ptr
< const IterativeClosestPoint
< PointSource, PointTarget,
Scalar > > | ConstPtr |
typedef Registration
< PointSource, PointTarget,
Scalar >::Matrix4 | Matrix4 |
| typedef Eigen::Matrix< Scalar, 4, 4 > | Matrix4 |
typedef boost::shared_ptr
< Registration< PointSource,
PointTarget, Scalar > > | Ptr |
typedef boost::shared_ptr
< const Registration
< PointSource, PointTarget,
Scalar > > | ConstPtr |
typedef
pcl::registration::CorrespondenceRejector::Ptr | CorrespondenceRejectorPtr |
typedef pcl::search::KdTree
< PointTarget > | KdTree |
typedef pcl::search::KdTree
< PointTarget >::Ptr | KdTreePtr |
typedef pcl::search::KdTree
< PointSource > | KdTreeReciprocal |
| typedef KdTree::Ptr | KdTreeReciprocalPtr |
typedef pcl::PointCloud
< PointSource > | PointCloudSource |
| typedef PointCloudSource::Ptr | PointCloudSourcePtr |
| typedef PointCloudSource::ConstPtr | PointCloudSourceConstPtr |
typedef pcl::PointCloud
< PointTarget > | PointCloudTarget |
| typedef PointCloudTarget::Ptr | PointCloudTargetPtr |
| typedef PointCloudTarget::ConstPtr | PointCloudTargetConstPtr |
typedef
KdTree::PointRepresentationConstPtr | PointRepresentationConstPtr |
typedef
pcl::registration::TransformationEstimation
< PointSource, PointTarget,
Scalar > | TransformationEstimation |
typedef
TransformationEstimation::Ptr | TransformationEstimationPtr |
typedef
TransformationEstimation::ConstPtr | TransformationEstimationConstPtr |
typedef
pcl::registration::CorrespondenceEstimationBase
< PointSource, PointTarget,
Scalar > | CorrespondenceEstimation |
typedef
CorrespondenceEstimation::Ptr | CorrespondenceEstimationPtr |
typedef
CorrespondenceEstimation::ConstPtr | CorrespondenceEstimationConstPtr |
typedef pcl::PointCloud
< PointSource > | PointCloud |
| typedef PointCloud::Ptr | PointCloudPtr |
| typedef PointCloud::ConstPtr | PointCloudConstPtr |
typedef boost::shared_ptr
< PointIndices > | PointIndicesPtr |
typedef boost::shared_ptr
< PointIndices const > | PointIndicesConstPtr |
Public Member Functions |
| | IterativeClosestPoint () |
| | Empty constructor.
|
| virtual | ~IterativeClosestPoint () |
| | Empty destructor.
|
pcl::registration::DefaultConvergenceCriteria
< Scalar >::Ptr | getConvergeCriteria () |
| | Returns a pointer to the DefaultConvergenceCriteria used by the IterativeClosestPoint class.
|
| virtual void | setInputSource (const PointCloudSourceConstPtr &cloud) |
| | Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)
|
| virtual void | setInputTarget (const PointCloudTargetConstPtr &cloud) |
| | Provide a pointer to the input target (e.g., the point cloud that we want to align to the target)
|
| 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.
|
| | Registration () |
| | Empty constructor.
|
| virtual | ~Registration () |
| | 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.
|
| | PCL_DEPRECATED (void setInputCloud(const PointCloudSourceConstPtr &cloud),"[pcl::registration::Registration::setInputCloud] setInputCloud is deprecated. Please use setInputSource instead.") |
| | Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)
|
| | PCL_DEPRECATED (PointCloudSourceConstPtr const getInputCloud(),"[pcl::registration::Registration::getInputCloud] getInputCloud is deprecated. Please use getInputSource instead.") |
| | Get a pointer to the input point cloud dataset target.
|
| virtual void | setInputSource (const PointCloudSourceConstPtr &cloud) |
| | Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)
|
| PointCloudSourceConstPtr const | getInputSource () |
| | Get a pointer to the input point cloud dataset target.
|
| virtual void | setInputTarget (const PointCloudTargetConstPtr &cloud) |
| | Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to)
|
| 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 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 difference between two consecutive transformations) as set by the user.
|
| 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.
|
| template<typename FunctionSignature > |
| bool | registerVisualizationCallback (boost::function< FunctionSignature > &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., sum of squared distances from the source to the target)
|
| double | getFitnessScore (const std::vector< float > &distances_a, const std::vector< float > &distances_b) |
| | Obtain the Euclidean fitness score (e.g., sum of squared distances from the source to the target) from two sets of correspondence distances (distances between source and target points)
|
| bool | hasConverged () |
| | 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.
|
| void | align (PointCloudSource &output, const Matrix4 &guess) |
| | 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 initalization.
|
| 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.
|
| | PCLBase () |
| | Empty constructor.
|
| | PCLBase (const PCLBase &base) |
| | Copy constructor.
|
| virtual | ~PCLBase () |
| | Destructor.
|
| virtual void | setInputCloud (const PointCloudConstPtr &cloud) |
| | Provide a pointer to the input dataset.
|
| PointCloudConstPtr const | getInputCloud () |
| | 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.
|
| virtual void | setIndices (const IndicesConstPtr &indices) |
| | Provide a pointer to the vector of indices that represents the input data.
|
| virtual void | setIndices (const PointIndicesConstPtr &indices) |
| | Provide a pointer to the vector of indices that represents the input data.
|
| virtual void | setIndices (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols) |
| | Set the indices for the points laying within an interest region of the point cloud.
|
| IndicesPtr const | getIndices () |
| | Get a pointer to the vector of indices used.
|
| const PointSource & | operator[] (size_t pos) |
| | Override PointCloud operator[] to shorten code.
|
Protected Attributes |
| size_t | x_idx_offset_ |
| | XYZ fields offset.
|
| size_t | y_idx_offset_ |
| size_t | z_idx_offset_ |
| size_t | nx_idx_offset_ |
| | Normal fields offset.
|
| size_t | ny_idx_offset_ |
| 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.
|
| 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 | 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.
|
| 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.
|
boost::function< void(const
pcl::PointCloud< PointSource >
&cloud_src, const std::vector
< int > &indices_src, const
pcl::PointCloud< PointTarget >
&cloud_tgt, const std::vector
< int > &indices_tgt)> | update_visualizer_ |
| | Callback function to update intermediate source point cloud position during it's registration to the target point cloud.
|
| 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.
|
template<typename PointSource, typename PointTarget, typename Scalar = float>
class pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >
IterativeClosestPoint provides a base implementation of the Iterative Closest Point algorithm.
The transformation is estimated based on Singular Value Decomposition (SVD).
The algorithm has several termination criteria:
-
Number of iterations has reached the maximum user imposed number of iterations (via setMaximumIterations)
-
The epsilon (difference) between the previous transformation and the current estimated transformation is smaller than an user imposed value (via setTransformationEpsilon)
-
The sum of Euclidean squared errors is smaller than a user defined threshold (via setEuclideanFitnessEpsilon)
Usage example:
IterativeClosestPoint<PointXYZ, PointXYZ> icp;
icp.setInputCloud (cloud_source);
icp.setInputTarget (cloud_target);
icp.setMaxCorrespondenceDistance (0.05);
icp.setMaximumIterations (50);
icp.setTransformationEpsilon (1e-8);
icp.setEuclideanFitnessEpsilon (1);
icp.align (cloud_source_registered);
Eigen::Matrix4f transformation = icp.getFinalTransformation ();
- Author
- Radu B. Rusu, Michael Dixon
Definition at line 94 of file icp.h.