41 #ifndef PCL_REGISTRATION_H_
42 #define PCL_REGISTRATION_H_
45 #include <pcl/pcl_base.h>
46 #include <pcl/common/transforms.h>
47 #include <pcl/pcl_macros.h>
48 #include <pcl/search/kdtree.h>
49 #include <pcl/kdtree/kdtree_flann.h>
50 #include <pcl/registration/boost.h>
51 #include <pcl/registration/transformation_estimation.h>
52 #include <pcl/registration/correspondence_estimation.h>
53 #include <pcl/registration/correspondence_rejection.h>
61 template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar =
float>
65 typedef Eigen::Matrix<Scalar, 4, 4>
Matrix4;
72 typedef boost::shared_ptr< Registration<PointSource, PointTarget, Scalar> >
Ptr;
73 typedef boost::shared_ptr< const Registration<PointSource, PointTarget, Scalar> >
ConstPtr;
127 , point_representation_ ()
181 PCL_DEPRECATED (
"[pcl::registration::Registration::setInputCloud] setInputCloud is deprecated. Please use setInputSource instead.")
187 PointCloudSourceConstPtr const
203 inline PointCloudSourceConstPtr
const
213 inline PointCloudTargetConstPtr
const
226 bool force_no_recompute =
false)
229 if (force_no_recompute)
254 bool force_no_recompute =
false)
257 if ( force_no_recompute )
267 inline KdTreeReciprocalPtr
367 point_representation_ = point_representation;
374 template<
typename FunctionSignature>
inline bool
377 if (visualizerCallback != NULL)
391 getFitnessScore (
double max_range = std::numeric_limits<double>::max ());
399 getFitnessScore (
const std::vector<float> &distances_a,
const std::vector<float> &distances_b);
410 align (PointCloudSource &output);
418 align (PointCloudSource &output,
const Matrix4& guess);
421 inline const std::string&
455 inline std::vector<CorrespondenceRejectorPtr>
574 boost::function<void(const pcl::PointCloud<PointSource> &cloud_src,
575 const std::vector<int> &indices_src,
587 std::vector<int> &indices, std::vector<float> &distances)
589 int k = tree_->nearestKSearch (cloud, index, 1, indices, distances);
601 PointRepresentationConstPtr point_representation_;
603 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
607 #include <pcl/registration/impl/registration.hpp>
609 #endif //#ifndef PCL_REGISTRATION_H_
KdTreeReciprocalPtr tree_reciprocal_
A pointer to the spatial search object of the source.
bool initComputeReciprocal()
Internal computation when reciprocal lookup is needed.
bool source_cloud_updated_
Variable that stores whether we have a new source cloud, meaning we need to pre-process it again...
Matrix4 getLastIncrementalTransformation()
Get the last incremental transformation matrix estimated by the registration method.
pcl::registration::CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > CorrespondenceEstimation
KdTreeReciprocalPtr getSearchMethodSource() const
Get a pointer to the search method used to find correspondences in the source cloud.
void align(PointCloudSource &output)
Call the registration algorithm which estimates the transformation and returns the transformed source...
void addCorrespondenceRejector(const CorrespondenceRejectorPtr &rejector)
Add a new correspondence rejector to the list.
void setInputCloud(const PointCloudSourceConstPtr &cloud)
Provide a pointer to the input source (e.g., the point cloud that we want to align to the target) ...
TransformationEstimationPtr transformation_estimation_
A TransformationEstimation object, used to calculate the 4x4 rigid transformation.
void setRANSACOutlierRejectionThreshold(double inlier_threshold)
Set the inlier distance threshold for the internal RANSAC outlier rejection loop. ...
pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar > TransformationEstimation
boost::shared_ptr< const Registration< PointSource, PointTarget, Scalar > > ConstPtr
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) ...
CorrespondenceEstimationPtr correspondence_estimation_
A CorrespondenceEstimation object, used to estimate correspondences between the source and the target...
virtual ~Registration()
destructor.
int nr_iterations_
The number of iterations the internal optimization ran for (used internally).
KdTree::PointRepresentationConstPtr PointRepresentationConstPtr
pcl::PointCloud< PointTarget > PointCloudTarget
CorrespondencesPtr correspondences_
The set of correspondences determined at this ICP step.
PointCloudTargetConstPtr const getInputTarget()
Get a pointer to the input point cloud dataset target.
bool target_cloud_updated_
Variable that stores whether we have a new target cloud, meaning we need to pre-process it again...
boost::shared_ptr< Registration< PointSource, PointTarget, Scalar > > Ptr
void setTransformationEstimation(const TransformationEstimationPtr &te)
Provide a pointer to the transformation estimation object.
bool removeCorrespondenceRejector(unsigned int i)
Remove the i-th correspondence rejector in the list.
PointCloudSourceConstPtr const getInputCloud()
Get a pointer to the input point cloud dataset target.
virtual void computeTransformation(PointCloudSource &output, const Matrix4 &guess)=0
Abstract transformation computation method with initial guess.
Matrix4 getFinalTransformation()
Get the final transformation matrix estimated by the registration method.
boost::shared_ptr< KdTree< PointT > > Ptr
bool registerVisualizationCallback(boost::function< FunctionSignature > &visualizerCallback)
Register the user callback function which will be called from registration thread in order to update ...
PointCloudSource::ConstPtr PointCloudSourceConstPtr
pcl::search::KdTree< PointSource > KdTreeReciprocal
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...
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) ...
int ransac_iterations_
The number of iterations RANSAC should run for.
int getMaximumIterations()
Get the maximum number of iterations the internal optimization should run for, as set by the user...
bool force_no_recompute_reciprocal_
A flag which, if set, means the tree operating on the source cloud will never be recomputed.
double getRANSACIterations()
Get the number of iterations RANSAC should run for, as set by the user.
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 t...
TransformationEstimation::Ptr TransformationEstimationPtr
void clearCorrespondenceRejectors()
Clear the list of correspondence rejectors.
double getEuclideanFitnessEpsilon()
Get the maximum allowed distance error before the algorithm will be considered to have converged...
Eigen::Matrix< Scalar, 4, 4 > Matrix4
PointCloudSource::Ptr PointCloudSourcePtr
boost::shared_ptr< PointCloud< PointSource > > Ptr
KdTreePtr tree_
A pointer to the spatial search 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.
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.
const std::string & getClassName() const
Abstract class get name method.
Matrix4 previous_transformation_
The previous transformation matrix estimated by the registration method (used internally).
Matrix4 transformation_
The transformation matrix estimated by the registration method.
CorrespondenceEstimation::Ptr CorrespondenceEstimationPtr
double getMaxCorrespondenceDistance()
Get the maximum distance threshold between two correspondent points in source <-> target...
void setMaximumIterations(int nr_iterations)
Set the maximum number of iterations the internal optimization should run for.
int max_iterations_
The maximum number of iterations the internal optimization should run for.
double getRANSACOutlierRejectionThreshold()
Get the inlier distance threshold for the internal outlier rejection loop as set by the user...
std::vector< CorrespondenceRejectorPtr > correspondence_rejectors_
The list of correspondence rejectors to use.
std::vector< CorrespondenceRejectorPtr > getCorrespondenceRejectors()
Get the list of correspondence rejectors.
boost::shared_ptr< KdTree< PointT, Tree > > Ptr
Matrix4 final_transformation_
The final transformation matrix estimated by the registration method after N iterations.
PointCloudTargetConstPtr target_
The input point cloud dataset target.
CorrespondenceEstimation::ConstPtr CorrespondenceEstimationConstPtr
bool initCompute()
Internal computation initalization.
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
bool searchForNeighbors(const PointCloudSource &cloud, int index, std::vector< int > &indices, std::vector< float > &distances)
Search for the closest nearest neighbor of a given point.
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.
void setTransformationEpsilon(double epsilon)
Set the transformation epsilon (maximum allowable difference between two consecutive transformations)...
PointCloudTarget::Ptr PointCloudTargetPtr
boost::shared_ptr< const PointCloud< PointSource > > ConstPtr
TransformationEstimation::ConstPtr TransformationEstimationConstPtr
void setRANSACIterations(int ransac_iterations)
Set the number of iterations RANSAC should run for.
Registration represents the base registration class for general purpose, ICP-like methods...
boost::shared_ptr< Correspondences > CorrespondencesPtr
pcl::registration::CorrespondenceRejector::Ptr CorrespondenceRejectorPtr
double inlier_threshold_
The inlier distance threshold for the internal RANSAC outlier rejection loop.
pcl::search::KdTree< PointTarget >::Ptr KdTreePtr
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...
pcl::search::KdTree< PointTarget > KdTree
boost::shared_ptr< const PointRepresentation > PointRepresentationConstPtr
bool converged_
Holds internal convergence state, given user parameters.
double transformation_epsilon_
The maximum difference between two consecutive transformations in order to consider convergence (user...
KdTreePtr getSearchMethodTarget() const
Get a pointer to the search method used to find correspondences in the target cloud.
PointCloudTarget::ConstPtr PointCloudTargetConstPtr
virtual void setInputCloud(const PointCloudConstPtr &cloud)
Provide a pointer to the input dataset.
std::string reg_name_
The registration method name.
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 ...
double corr_dist_threshold_
The maximum distance threshold between two correspondent points in source <-> target.
PointCloudConstPtr input_
The input point cloud dataset.
Registration()
Empty constructor.
double getTransformationEpsilon()
Get the transformation epsilon (maximum allowable difference between two consecutive transformations)...
bool force_no_recompute_
A flag which, if set, means the tree operating on the target cloud will never be recomputed.
void setPointRepresentation(const PointRepresentationConstPtr &point_representation)
Provide a boost shared pointer to the PointRepresentation to be used when comparing points...
int min_number_correspondences_
The minimum number of correspondences that the algorithm needs before attempting to estimate the tran...
pcl::PointCloud< PointSource > PointCloudSource
boost::shared_ptr< CorrespondenceRejector > Ptr
void setMaxCorrespondenceDistance(double distance_threshold)
Set the maximum distance threshold between two correspondent points in source <-> target...
boost::shared_ptr< const CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > ConstPtr
KdTree::Ptr KdTreeReciprocalPtr
bool hasConverged()
Return the state of convergence after the last align run.
boost::shared_ptr< CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > Ptr
Abstract CorrespondenceEstimationBase class.