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);
140 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudA,
141 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloudB,
142 double maxCorrespondenceDistance,
143 double maxCorrespondenceAngle,
145 int & correspondencesOut,
149 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudA,
150 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloudB,
151 double maxCorrespondenceDistance,
152 double maxCorrespondenceAngle,
154 int & correspondencesOut,
158 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudA,
159 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloudB,
160 double maxCorrespondenceDistance,
162 int & correspondencesOut,
166 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudA,
167 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloudB,
168 double maxCorrespondenceDistance,
170 int & correspondencesOut,
200 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_source,
201 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr & cloud_target,
202 double maxCorrespondenceDistance,
203 int maximumIterations,
205 pcl::PointCloud<pcl::PointXYZ> & cloud_source_registered,
206 float epsilon = 0.0f,
208 float ransacOutlierRatio = 0.0f,
209 int * iterationsDone =
nullptr);
219 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_source,
220 const pcl::PointCloud<pcl::PointXYZI>::ConstPtr & cloud_target,
221 double maxCorrespondenceDistance,
222 int maximumIterations,
224 pcl::PointCloud<pcl::PointXYZI> & cloud_source_registered,
225 float epsilon = 0.0f,
227 float ransacOutlierRatio = 0.0f,
228 int * iterationsDone =
nullptr);
256 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_source,
257 const pcl::PointCloud<pcl::PointNormal>::ConstPtr & cloud_target,
258 double maxCorrespondenceDistance,
259 int maximumIterations,
261 pcl::PointCloud<pcl::PointNormal> & cloud_source_registered,
262 float epsilon = 0.0f,
264 float ransacOutlierRatio = 0.0f,
265 int * iterationsDone =
nullptr);
275 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_source,
276 const pcl::PointCloud<pcl::PointXYZINormal>::ConstPtr & cloud_target,
277 double maxCorrespondenceDistance,
278 int maximumIterations,
280 pcl::PointCloud<pcl::PointXYZINormal> & cloud_source_registered,
281 float epsilon = 0.0f,
283 float ransacOutlierRatio = 0.0f,
284 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...