39 #ifndef PCL_TRANSFORMS_H_
40 #define PCL_TRANSFORMS_H_
42 #include <pcl/point_cloud.h>
43 #include <pcl/point_types.h>
44 #include <pcl/common/centroid.h>
45 #include <pcl/common/eigen.h>
46 #include <pcl/PointIndices.h>
59 template <
typename Po
intT,
typename Scalar>
void
62 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
63 bool copy_all_fields =
true);
65 template <
typename Po
intT>
void
68 const Eigen::Affine3f &transform,
69 bool copy_all_fields =
true)
71 return (transformPointCloud<PointT, float> (cloud_in, cloud_out, transform, copy_all_fields));
83 template <
typename Po
intT,
typename Scalar>
void
85 const std::vector<int> &indices,
87 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
88 bool copy_all_fields =
true);
90 template <
typename Po
intT>
void
92 const std::vector<int> &indices,
94 const Eigen::Affine3f &transform,
95 bool copy_all_fields =
true)
97 return (transformPointCloud<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
109 template <
typename Po
intT,
typename Scalar>
void
113 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
114 bool copy_all_fields =
true)
116 return (transformPointCloud<PointT, Scalar> (cloud_in, indices.
indices, cloud_out, transform, copy_all_fields));
119 template <
typename Po
intT>
void
123 const Eigen::Affine3f &transform,
124 bool copy_all_fields =
true)
126 return (transformPointCloud<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
138 template <
typename Po
intT,
typename Scalar>
void
141 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
142 bool copy_all_fields =
true);
144 template <
typename Po
intT>
void
147 const Eigen::Affine3f &transform,
148 bool copy_all_fields =
true)
150 return (transformPointCloudWithNormals<PointT, float> (cloud_in, cloud_out, transform, copy_all_fields));
162 template <
typename Po
intT,
typename Scalar>
void
164 const std::vector<int> &indices,
166 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
167 bool copy_all_fields =
true);
169 template <
typename Po
intT>
void
171 const std::vector<int> &indices,
173 const Eigen::Affine3f &transform,
174 bool copy_all_fields =
true)
176 return (transformPointCloudWithNormals<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
188 template <
typename Po
intT,
typename Scalar>
void
192 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform,
193 bool copy_all_fields =
true)
195 return (transformPointCloudWithNormals<PointT, Scalar> (cloud_in, indices.
indices, cloud_out, transform, copy_all_fields));
199 template <
typename Po
intT>
void
203 const Eigen::Affine3f &transform,
204 bool copy_all_fields =
true)
206 return (transformPointCloudWithNormals<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
218 template <
typename Po
intT,
typename Scalar>
void
221 const Eigen::Matrix<Scalar, 4, 4> &transform,
222 bool copy_all_fields =
true)
224 Eigen::Transform<Scalar, 3, Eigen::Affine> t (transform);
225 return (transformPointCloud<PointT, Scalar> (cloud_in, cloud_out, t, copy_all_fields));
228 template <
typename Po
intT>
void
231 const Eigen::Matrix4f &transform,
232 bool copy_all_fields =
true)
234 return (transformPointCloud<PointT, float> (cloud_in, cloud_out, transform, copy_all_fields));
246 template <
typename Po
intT,
typename Scalar>
void
248 const std::vector<int> &indices,
250 const Eigen::Matrix<Scalar, 4, 4> &transform,
251 bool copy_all_fields =
true)
253 Eigen::Transform<Scalar, 3, Eigen::Affine> t (transform);
254 return (transformPointCloud<PointT, Scalar> (cloud_in, indices, cloud_out, t, copy_all_fields));
257 template <
typename Po
intT>
void
259 const std::vector<int> &indices,
261 const Eigen::Matrix4f &transform,
262 bool copy_all_fields =
true)
264 return (transformPointCloud<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
276 template <
typename Po
intT,
typename Scalar>
void
280 const Eigen::Matrix<Scalar, 4, 4> &transform,
281 bool copy_all_fields =
true)
283 return (transformPointCloud<PointT, Scalar> (cloud_in, indices.
indices, cloud_out, transform, copy_all_fields));
286 template <
typename Po
intT>
void
290 const Eigen::Matrix4f &transform,
291 bool copy_all_fields =
true)
293 return (transformPointCloud<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
306 template <
typename Po
intT,
typename Scalar>
void
309 const Eigen::Matrix<Scalar, 4, 4> &transform,
310 bool copy_all_fields =
true)
312 Eigen::Transform<Scalar, 3, Eigen::Affine> t (transform);
313 return (transformPointCloudWithNormals<PointT, Scalar> (cloud_in, cloud_out, t, copy_all_fields));
317 template <
typename Po
intT>
void
320 const Eigen::Matrix4f &transform,
321 bool copy_all_fields =
true)
323 return (transformPointCloudWithNormals<PointT, float> (cloud_in, cloud_out, transform, copy_all_fields));
337 template <
typename Po
intT,
typename Scalar>
void
339 const std::vector<int> &indices,
341 const Eigen::Matrix<Scalar, 4, 4> &transform,
342 bool copy_all_fields =
true)
344 Eigen::Transform<Scalar, 3, Eigen::Affine> t (transform);
345 return (transformPointCloudWithNormals<PointT, Scalar> (cloud_in, indices, cloud_out, t, copy_all_fields));
349 template <
typename Po
intT>
void
351 const std::vector<int> &indices,
353 const Eigen::Matrix4f &transform,
354 bool copy_all_fields =
true)
356 return (transformPointCloudWithNormals<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
370 template <
typename Po
intT,
typename Scalar>
void
374 const Eigen::Matrix<Scalar, 4, 4> &transform,
375 bool copy_all_fields =
true)
377 Eigen::Transform<Scalar, 3, Eigen::Affine> t (transform);
378 return (transformPointCloudWithNormals<PointT, Scalar> (cloud_in, indices, cloud_out, t, copy_all_fields));
382 template <
typename Po
intT>
void
386 const Eigen::Matrix4f &transform,
387 bool copy_all_fields =
true)
389 return (transformPointCloudWithNormals<PointT, float> (cloud_in, indices, cloud_out, transform, copy_all_fields));
401 template <
typename Po
intT,
typename Scalar>
inline void
404 const Eigen::Matrix<Scalar, 3, 1> &offset,
405 const Eigen::Quaternion<Scalar> &rotation,
406 bool copy_all_fields =
true);
408 template <
typename Po
intT>
inline void
411 const Eigen::Vector3f &offset,
412 const Eigen::Quaternionf &rotation,
413 bool copy_all_fields =
true)
415 return (transformPointCloud<PointT, float> (cloud_in, cloud_out, offset, rotation, copy_all_fields));
428 template <
typename Po
intT,
typename Scalar>
inline void
431 const Eigen::Matrix<Scalar, 3, 1> &offset,
432 const Eigen::Quaternion<Scalar> &rotation,
433 bool copy_all_fields =
true);
435 template <
typename Po
intT>
void
438 const Eigen::Vector3f &offset,
439 const Eigen::Quaternionf &rotation,
440 bool copy_all_fields =
true)
442 return (transformPointCloudWithNormals<PointT, float> (cloud_in, cloud_out, offset, rotation, copy_all_fields));
451 template <
typename Po
intT,
typename Scalar>
inline PointT
453 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform);
455 template <
typename Po
intT>
inline PointT
457 const Eigen::Affine3f &transform)
459 return (transformPoint<PointT, float> (point, transform));
468 template <
typename Po
intT,
typename Scalar>
inline PointT
470 const Eigen::Transform<Scalar, 3, Eigen::Affine> &transform);
472 template <
typename Po
intT>
inline PointT
474 const Eigen::Affine3f &transform)
476 return (transformPointWithNormal<PointT, float> (point, transform));
486 template <
typename Po
intT,
typename Scalar>
inline double
488 Eigen::Transform<Scalar, 3, Eigen::Affine> &transform);
490 template <
typename Po
intT>
inline double
492 Eigen::Affine3f &transform)
494 return (getPrincipalTransformation<PointT, float> (cloud, transform));
498 #include <pcl/common/impl/transforms.hpp>
500 #endif // PCL_TRANSFORMS_H_
void transformPoint(const Eigen::Matrix< Scalar, 3, 1 > &point_in, Eigen::Matrix< Scalar, 3, 1 > &point_out, const Eigen::Transform< Scalar, 3, Eigen::Affine > &transformation)
Transform a point using an affine matrix.
double getPrincipalTransformation(const pcl::PointCloud< PointT > &cloud, Eigen::Transform< Scalar, 3, Eigen::Affine > &transform)
Calculates the principal (PCA-based) alignment of the point cloud.
This file defines compatibility wrappers for low level I/O functions.
void transformPointCloudWithNormals(const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, const Eigen::Transform< Scalar, 3, Eigen::Affine > &transform, bool copy_all_fields=true)
Transform a point cloud and rotate its normals using an Eigen transform.
std::vector< int > indices
void transformPointCloud(const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, const Eigen::Transform< Scalar, 3, Eigen::Affine > &transform, bool copy_all_fields=true)
Apply an affine transform defined by an Eigen Transform.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
PointT transformPointWithNormal(const PointT &point, const Eigen::Transform< Scalar, 3, Eigen::Affine > &transform)
Transform a point with members x,y,z,normal_x,normal_y,normal_z.
A point structure representing Euclidean xyz coordinates, and the RGB color.