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,
68Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondencesSVD(
69 const pcl::PointCloud<pcl::PointXYZ> & cloud1,
70 const pcl::PointCloud<pcl::PointXYZ> & cloud2);
101Transform RTABMAP_CORE_EXPORT transformFromXYZCorrespondences(
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);
265Transform RTABMAP_CORE_EXPORT icpPointToPlane(
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);
284Transform RTABMAP_CORE_EXPORT icpPointToPlane(
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.