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>
44int RTABMAP_CORE_EXPORT getCorrespondencesCount(
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
45 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
69 const pcl::PointCloud<pcl::PointXYZ> & cloud1,
70 const pcl::PointCloud<pcl::PointXYZ> & cloud2);
102 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud1,
103 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud2,
104 double inlierThreshold = 0.02,
105 int iterations = 100,
106 int refineModelIterations = 10,
107 double refineModelSigma = 3.0,
108 std::vector<int> * inliers = 0,
109 cv::Mat * variance = 0);
142 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudA,
143 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudB,
144 double maxCorrespondenceDistance,
145 double maxCorrespondenceAngle,
147 int & correspondencesOut,
154 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudA,
155 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudB,
156 double maxCorrespondenceDistance,
157 double maxCorrespondenceAngle,
159 int & correspondencesOut,
166 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudA,
167 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudB,
168 double maxCorrespondenceDistance,
170 int & correspondencesOut,
177 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudA,
178 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudB,
179 double maxCorrespondenceDistance,
181 int & correspondencesOut,
210 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
211 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
212 double maxCorrespondenceDistance,
213 int maximumIterations,
215 pcl::PointCloud<pcl::PointXYZ> & cloud_source_registered,
216 float epsilon = 0.0f,
218 float ransacOutlierRatio = 0.0f,
219 int * iterationsDone =
nullptr);
229 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_source,
230 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_target,
231 double maxCorrespondenceDistance,
232 int maximumIterations,
234 pcl::PointCloud<pcl::PointXYZI> & cloud_source_registered,
235 float epsilon = 0.0f,
237 float ransacOutlierRatio = 0.0f,
238 int * iterationsDone =
nullptr);
266 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_source,
267 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_target,
268 double maxCorrespondenceDistance,
269 int maximumIterations,
271 pcl::PointCloud<pcl::PointNormal> & cloud_source_registered,
272 float epsilon = 0.0f,
274 float ransacOutlierRatio = 0.0f,
275 int * iterationsDone =
nullptr);
285 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_source,
286 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_target,
287 double maxCorrespondenceDistance,
288 int maximumIterations,
290 pcl::PointCloud<pcl::PointXYZINormal> & cloud_source_registered,
291 float epsilon = 0.0f,
293 float ransacOutlierRatio = 0.0f,
294 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...