28#ifndef UTIL3D_REGISTRATION_H_
29#define UTIL3D_REGISTRATION_H_
31#include <rtabmap/core/rtabmap_core_export.h>
33#include <pcl/point_cloud.h>
34#include <pcl/point_types.h>
35#include <rtabmap/core/Transform.h>
36#include <opencv2/core/core.hpp>
65 const pcl::PointCloud<pcl::PointXYZ> & cloud1,
66 const pcl::PointCloud<pcl::PointXYZ> & cloud2);
98 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud1,
99 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud2,
100 double inlierThreshold = 0.02,
101 int iterations = 100,
102 int refineModelIterations = 10,
103 double refineModelSigma = 3.0,
104 std::vector<int> * inliers = 0,
105 cv::Mat * variance = 0);
136 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudA,
137 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudB,
138 double maxCorrespondenceDistance,
139 double maxCorrespondenceAngle,
141 int & correspondencesOut,
145 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudA,
146 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudB,
147 double maxCorrespondenceDistance,
148 double maxCorrespondenceAngle,
150 int & correspondencesOut,
154 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudA,
155 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudB,
156 double maxCorrespondenceDistance,
158 int & correspondencesOut,
162 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudA,
163 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudB,
164 double maxCorrespondenceDistance,
166 int & correspondencesOut,
196 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
197 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
198 double maxCorrespondenceDistance,
199 int maximumIterations,
201 pcl::PointCloud<pcl::PointXYZ> & cloud_source_registered,
202 float epsilon = 0.0f,
204 float ransacOutlierRatio = 0.0f,
205 int * iterationsDone =
nullptr);
215 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_source,
216 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_target,
217 double maxCorrespondenceDistance,
218 int maximumIterations,
220 pcl::PointCloud<pcl::PointXYZI> & cloud_source_registered,
221 float epsilon = 0.0f,
223 float ransacOutlierRatio = 0.0f,
224 int * iterationsDone =
nullptr);
252 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_source,
253 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_target,
254 double maxCorrespondenceDistance,
255 int maximumIterations,
257 pcl::PointCloud<pcl::PointNormal> & cloud_source_registered,
258 float epsilon = 0.0f,
260 float ransacOutlierRatio = 0.0f,
261 int * iterationsDone =
nullptr);
271 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_source,
272 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_target,
273 double maxCorrespondenceDistance,
274 int maximumIterations,
276 pcl::PointCloud<pcl::PointXYZINormal> & cloud_source_registered,
277 float epsilon = 0.0f,
279 float ransacOutlierRatio = 0.0f,
280 int * iterationsDone =
nullptr);
void RTABMAP_CORE_EXPORT computeVarianceAndCorrespondences(const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudA, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloudB, double maxCorrespondenceDistance, double maxCorrespondenceAngle, double &variance, int &correspondencesOut, bool reciprocal)
Compute with variance and correspondences of pcl::PointNormal point cloud type.
Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondencesSVD(const pcl::PointCloud< pcl::PointXYZ > &cloud1, const pcl::PointCloud< pcl::PointXYZ > &cloud2)
Estimates the rigid 3D transformation between two point clouds using SVD.
Transform RTABMAP_CORE_EXPORT icpPointToPlane(const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloud_source, const pcl::PointCloud< pcl::PointNormal >::ConstPtr &cloud_target, double maxCorrespondenceDistance, int maximumIterations, bool &hasConverged, pcl::PointCloud< pcl::PointNormal > &cloud_source_registered, float epsilon=0.0f, bool icp2D=false, float ransacOutlierRatio=0.0f, int *iterationsDone=nullptr)
Performs Iterative Closest Point (ICP) alignment using a point-to-plane error metric.
Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondences(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud1, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud2, double inlierThreshold=0.02, int iterations=100, int refineModelIterations=10, double refineModelSigma=3.0, std::vector< int > *inliers=0, cv::Mat *variance=0)
Estimates a rigid transformation between two point clouds using RANSAC with optional refinement.
Transform RTABMAP_CORE_EXPORT icp(const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud_source, const pcl::PointCloud< pcl::PointXYZ >::ConstPtr &cloud_target, double maxCorrespondenceDistance, int maximumIterations, bool &hasConverged, pcl::PointCloud< pcl::PointXYZ > &cloud_source_registered, float epsilon=0.0f, bool icp2D=false, float ransacOutlierRatio=0.0f, int *iterationsDone=nullptr)
Performs Iterative Closest Point (ICP) alignment between two point clouds and returns the resulting t...