00001 #ifndef REGISTRATION_H 00002 #define REGISTRATION_H 00003 00004 #include "typedefs.h" 00005 00006 #include <pcl/registration/ia_ransac.h> 00007 #include <pcl/registration/icp.h> 00008 00009 /* Use SampleConsensusInitialAlignment to find a rough alignment from the source cloud to the target cloud by finding 00010 * correspondences between two sets of local features 00011 * Inputs: 00012 * source_points 00013 * The "source" points, i.e., the points that must be transformed to align with the target point cloud 00014 * source_descriptors 00015 * The local descriptors for each source point 00016 * target_points 00017 * The "target" points, i.e., the points to which the source point cloud will be aligned 00018 * target_descriptors 00019 * The local descriptors for each target point 00020 * min_sample_distance 00021 * The minimum distance between any two random samples 00022 * max_correspondence_distance 00023 * The 00024 * nr_interations 00025 * The number of RANSAC iterations to perform 00026 * Return: A transformation matrix that will roughly align the points in source to the points in target 00027 */ 00028 Eigen::Matrix4f 00029 computeInitialAlignment (const PointCloudPtr & source_points, const LocalDescriptorsPtr & source_descriptors, 00030 const PointCloudPtr & target_points, const LocalDescriptorsPtr & target_descriptors, 00031 float min_sample_distance, float max_correspondence_distance, int nr_iterations) 00032 { 00033 return (Eigen::Matrix4f::Identity ()); 00034 } 00035 00036 00037 /* Use IterativeClosestPoint to find a precise alignment from the source cloud to the target cloud, 00038 * starting with an intial guess 00039 * Inputs: 00040 * source_points 00041 * The "source" points, i.e., the points that must be transformed to align with the target point cloud 00042 * target_points 00043 * The "target" points, i.e., the points to which the source point cloud will be aligned 00044 * intial_alignment 00045 * An initial estimate of the transformation matrix that aligns the source points to the target points 00046 * max_correspondence_distance 00047 * A threshold on the distance between any two corresponding points. Any corresponding points that are further 00048 * apart than this threshold will be ignored when computing the source-to-target transformation 00049 * outlier_rejection_threshold 00050 * A threshold used to define outliers during RANSAC outlier rejection 00051 * transformation_epsilon 00052 * The smallest iterative transformation allowed before the algorithm is considered to have converged 00053 * max_iterations 00054 * The maximum number of ICP iterations to perform 00055 * Return: A transformation matrix that will precisely align the points in source to the points in target 00056 */ 00057 Eigen::Matrix4f 00058 refineAlignment (const PointCloudPtr & source_points, const PointCloudPtr & target_points, 00059 const Eigen::Matrix4f initial_alignment, float max_correspondence_distance, 00060 float outlier_rejection_threshold, float transformation_epsilon, float max_iterations) 00061 { 00062 return (Eigen::Matrix4f::Identity ()); 00063 } 00064 00065 #endif