Point Cloud Library (PCL)
1.9.1
|
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_ ()
212 bool force_no_recompute =
false)
215 if (force_no_recompute)
240 bool force_no_recompute =
false)
243 if ( force_no_recompute )
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);
421 inline const std::string&
455 inline std::vector<CorrespondenceRejectorPtr>
580 const std::vector<int> &indices_src,
592 std::vector<int> &indices, std::vector<float> &distances)
594 int k =
tree_->nearestKSearch (cloud, index, 1, indices, distances);
608 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
612 #include <pcl/registration/impl/registration.hpp>
614 #endif //#ifndef PCL_REGISTRATION_H_
virtual ~Registration()
destructor.
PointCloudTargetConstPtr target_
The input point cloud dataset target.
void setCorrespondenceEstimation(const CorrespondenceEstimationPtr &ce)
Provide a pointer to the correspondence estimation object.
bool target_cloud_updated_
Variable that stores whether we have a new target cloud, meaning we need to pre-process it again.
CorrespondencesPtr correspondences_
The set of correspondences determined at this ICP step.
This file defines compatibility wrappers for low level I/O functions.
CorrespondenceEstimation::ConstPtr CorrespondenceEstimationConstPtr
void setTransformationEstimation(const TransformationEstimationPtr &te)
Provide a pointer to the transformation estimation object.
virtual void computeTransformation(PointCloudSource &output, const Matrix4 &guess)=0
Abstract transformation computation method with initial guess.
boost::shared_ptr< PointCloud< PointSource > > Ptr
int ransac_iterations_
The number of iterations RANSAC should run for.
std::vector< CorrespondenceRejectorPtr > getCorrespondenceRejectors()
Get the list of correspondence rejectors.
void addCorrespondenceRejector(const CorrespondenceRejectorPtr &rejector)
Add a new correspondence rejector to the list.
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...
Registration represents the base registration class for general purpose, ICP-like methods.
boost::shared_ptr< const CorrespondenceEstimationBase< PointSource, PointTarget, float > > ConstPtr
void align(PointCloudSource &output)
Call the registration algorithm which estimates the transformation and returns the transformed source...
PointCloudConstPtr input_
The input point cloud dataset.
Eigen::Matrix< Scalar, 4, 4 > Matrix4
const PointCloudSourceConstPtr getInputSource()
Get a pointer to the input point cloud dataset target.
bool source_cloud_updated_
Variable that stores whether we have a new source cloud, meaning we need to pre-process it again.
double euclidean_fitness_epsilon_
The maximum allowed Euclidean error between two consecutive steps in the ICP loop,...
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)
bool registerVisualizationCallback(boost::function< FunctionSignature > &visualizerCallback)
Register the user callback function which will be called from registration thread in order to update ...
double corr_dist_threshold_
The maximum distance threshold between two correspondent points in source <-> target.
double transformation_rotation_epsilon_
The maximum rotation difference between two consecutive transformations in order to consider converge...
int getMaximumIterations()
Get the maximum number of iterations the internal optimization should run for, as set by the user.
KdTree::PointRepresentationConstPtr PointRepresentationConstPtr
pcl::PointCloud< PointTarget > PointCloudTarget
pcl::registration::CorrespondenceRejector::Ptr CorrespondenceRejectorPtr
double getRANSACOutlierRejectionThreshold()
Get the inlier distance threshold for the internal outlier rejection loop as set by the user.
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.
Matrix4 previous_transformation_
The previous transformation matrix estimated by the registration method (used internally).
KdTreePtr tree_
A pointer to the spatial search object.
bool converged_
Holds internal convergence state, given user parameters.
Matrix4 transformation_
The transformation matrix estimated by the registration method.
const std::string & getClassName() const
Abstract class get name method.
int max_iterations_
The maximum number of iterations the internal optimization should run for.
Abstract CorrespondenceEstimationBase class.
int min_number_correspondences_
The minimum number of correspondences that the algorithm needs before attempting to estimate the tran...
boost::shared_ptr< const Registration< PointSource, PointTarget, Scalar > > ConstPtr
bool initComputeReciprocal()
Internal computation when reciprocal lookup is needed.
PointCloudTarget::ConstPtr PointCloudTargetConstPtr
double getEuclideanFitnessEpsilon()
Get the maximum allowed distance error before the algorithm will be considered to have converged,...
bool removeCorrespondenceRejector(unsigned int i)
Remove the i-th correspondence rejector in the list.
virtual void setInputCloud(const PointCloudConstPtr &cloud)
Provide a pointer to the input dataset.
Matrix4 final_transformation_
The final transformation matrix estimated by the registration method after N iterations.
void setRANSACOutlierRejectionThreshold(double inlier_threshold)
Set the inlier distance threshold for the internal RANSAC outlier rejection loop.
boost::shared_ptr< CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > Ptr
Registration()
Empty constructor.
boost::shared_ptr< Registration< PointSource, PointTarget, Scalar > > Ptr
Matrix4 getFinalTransformation()
Get the final transformation matrix estimated by the registration method.
boost::shared_ptr< KdTree< PointT, Tree > > Ptr
double transformation_epsilon_
The maximum difference between two consecutive transformations in order to consider convergence (user...
TransformationEstimation::Ptr TransformationEstimationPtr
void setPointRepresentation(const PointRepresentationConstPtr &point_representation)
Provide a boost shared pointer to the PointRepresentation to be used when comparing points.
PointCloudSource::ConstPtr PointCloudSourceConstPtr
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 ...
KdTreePtr getSearchMethodTarget() const
Get a pointer to the search method used to find correspondences in the target cloud.
double getTransformationEpsilon()
Get the transformation epsilon (maximum allowable translation squared difference between two consecut...
bool force_no_recompute_
A flag which, if set, means the tree operating on the target cloud will never be recomputed.
CorrespondenceEstimation::Ptr CorrespondenceEstimationPtr
PointCloudTarget::Ptr PointCloudTargetPtr
boost::shared_ptr< const PointRepresentation > PointRepresentationConstPtr
boost::shared_ptr< Correspondences > CorrespondencesPtr
KdTreeReciprocalPtr tree_reciprocal_
A pointer to the spatial search object of the source.
bool initCompute()
Internal computation initialization.
void setTransformationRotationEpsilon(double epsilon)
Set the transformation rotation epsilon (maximum allowable rotation difference between two consecutiv...
void setMaximumIterations(int nr_iterations)
Set the maximum number of iterations the internal optimization should run for.
std::vector< CorrespondenceRejectorPtr > correspondence_rejectors_
The list of correspondence rejectors to use.
double getTransformationRotationEpsilon()
Get the transformation rotation epsilon (maximum allowable difference between two consecutive transfo...
KdTreeReciprocal::Ptr KdTreeReciprocalPtr
TransformationEstimation::ConstPtr TransformationEstimationConstPtr
pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar > TransformationEstimation
double getRANSACIterations()
Get the number of iterations RANSAC should run for, as set by the user.
pcl::search::KdTree< PointTarget >::Ptr KdTreePtr
const PointCloudTargetConstPtr getInputTarget()
Get a pointer to the input point cloud dataset target.
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.
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
PointCloudSource::Ptr PointCloudSourcePtr
bool force_no_recompute_reciprocal_
A flag which, if set, means the tree operating on the source cloud will never be recomputed.
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.
int nr_iterations_
The number of iterations the internal optimization ran for (used internally).
boost::shared_ptr< const PointCloud< PointSource > > ConstPtr
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...
boost::shared_ptr< CorrespondenceRejector > Ptr
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)
pcl::PointCloud< PointSource > PointCloudSource
pcl::search::KdTree< PointSource > KdTreeReciprocal
TransformationEstimationPtr transformation_estimation_
A TransformationEstimation object, used to calculate the 4x4 rigid transformation.
void setRANSACIterations(int ransac_iterations)
Set the number of iterations RANSAC should run for.
void clearCorrespondenceRejectors()
Clear the list of correspondence rejectors.
pcl::search::KdTree< PointTarget > KdTree
bool hasConverged()
Return the state of convergence after the last align run.
void setEuclideanFitnessEpsilon(double epsilon)
Set the maximum allowed Euclidean error between two consecutive steps in the ICP loop,...
Matrix4 getLastIncrementalTransformation()
Get the last incremental transformation matrix estimated by the registration method.
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.
std::string reg_name_
The registration method name.
CorrespondenceEstimationPtr correspondence_estimation_
A CorrespondenceEstimation object, used to estimate correspondences between the source and the target...
void setTransformationEpsilon(double epsilon)
Set the transformation epsilon (maximum allowable translation squared difference between two consecut...
double inlier_threshold_
The inlier distance threshold for the internal RANSAC outlier rejection loop.