00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef PCL_ICP_H_
00039 #define PCL_ICP_H_
00040
00041 #include "pcl/io/pcd_io.h"
00042
00043 #include "pcl/registration/registration.h"
00044 #include "pcl/features/feature.h"
00045 #include "pcl/sample_consensus/ransac.h"
00046 #include "pcl/sample_consensus/sac_model_registration.h"
00047
00048 #include <Eigen/SVD>
00049
00050 namespace pcl
00051 {
00055
00059 template <typename PointSource, typename PointTarget>
00060 class IterativeClosestPoint : public Registration<PointSource, PointTarget>
00061 {
00062 using Registration<PointSource, PointTarget>::reg_name_;
00063 using Registration<PointSource, PointTarget>::getClassName;
00064 using Registration<PointSource, PointTarget>::input_;
00065 using Registration<PointSource, PointTarget>::indices_;
00066 using Registration<PointSource, PointTarget>::target_;
00067 using Registration<PointSource, PointTarget>::nr_iterations_;
00068 using Registration<PointSource, PointTarget>::max_iterations_;
00069 using Registration<PointSource, PointTarget>::previous_transformation_;
00070 using Registration<PointSource, PointTarget>::final_transformation_;
00071 using Registration<PointSource, PointTarget>::transformation_;
00072 using Registration<PointSource, PointTarget>::transformation_epsilon_;
00073 using Registration<PointSource, PointTarget>::converged_;
00074 using Registration<PointSource, PointTarget>::corr_dist_threshold_;
00075 using Registration<PointSource, PointTarget>::inlier_threshold_;
00076 using Registration<PointSource, PointTarget>::min_number_correspondences_;
00077
00078 typedef typename Registration<PointSource, PointTarget>::PointCloudSource PointCloudSource;
00079 typedef typename PointCloudSource::Ptr PointCloudSourcePtr;
00080 typedef typename PointCloudSource::ConstPtr PointCloudSourceConstPtr;
00081
00082 typedef typename Registration<PointSource, PointTarget>::PointCloudTarget PointCloudTarget;
00083
00084 typedef PointIndices::Ptr PointIndicesPtr;
00085 typedef PointIndices::ConstPtr PointIndicesConstPtr;
00086
00087 public:
00089
00090 IterativeClosestPoint ()
00091 {
00092 reg_name_ = "IterativeClosestPoint";
00093 };
00094
00095 protected:
00097
00100 virtual void computeTransformation (PointCloudSource &output);
00101 };
00102 }
00103
00104 #include "pcl/registration/icp.hpp"
00105
00106 #endif //#ifndef PCL_ICP_H_