registration.h
#ifndef REGISTRATION_H
#define REGISTRATION_H
#include "typedefs.h"
#include <pcl/registration/ia_ransac.h>
#include <pcl/registration/icp.h>
/* Use SampleConsensusInitialAlignment to find a rough alignment from the source cloud to the target cloud by finding
* correspondences between two sets of local features
* Inputs:
* source_points
* The "source" points, i.e., the points that must be transformed to align with the target point cloud
* source_descriptors
* The local descriptors for each source point
* target_points
* The "target" points, i.e., the points to which the source point cloud will be aligned
* target_descriptors
* The local descriptors for each target point
* min_sample_distance
* The minimum distance between any two random samples
* max_correspondence_distance
* The
* nr_interations
* The number of RANSAC iterations to perform
* Return: A transformation matrix that will roughly align the points in source to the points in target
*/
Eigen::Matrix4f
computeInitialAlignment (const PointCloudPtr & source_points, const LocalDescriptorsPtr & source_descriptors,
const PointCloudPtr & target_points, const LocalDescriptorsPtr & target_descriptors,
float min_sample_distance, float max_correspondence_distance, int nr_iterations)
{
return (Eigen::Matrix4f::Identity ());
}
/* Use IterativeClosestPoint to find a precise alignment from the source cloud to the target cloud,
* starting with an intial guess
* Inputs:
* source_points
* The "source" points, i.e., the points that must be transformed to align with the target point cloud
* target_points
* The "target" points, i.e., the points to which the source point cloud will be aligned
* intial_alignment
* An initial estimate of the transformation matrix that aligns the source points to the target points
* max_correspondence_distance
* A threshold on the distance between any two corresponding points. Any corresponding points that are further
* apart than this threshold will be ignored when computing the source-to-target transformation
* outlier_rejection_threshold
* A threshold used to define outliers during RANSAC outlier rejection
* transformation_epsilon
* The smallest iterative transformation allowed before the algorithm is considered to have converged
* max_iterations
* The maximum number of ICP iterations to perform
* Return: A transformation matrix that will precisely align the points in source to the points in target
*/
Eigen::Matrix4f
refineAlignment (const PointCloudPtr & source_points, const PointCloudPtr & target_points,
const Eigen::Matrix4f initial_alignment, float max_correspondence_distance,
float outlier_rejection_threshold, float transformation_epsilon, float max_iterations)
{
return (Eigen::Matrix4f::Identity ());
}
#endif