3#include <pcl/kdtree/kdtree_flann.h>
4#include <pcl/surface/mls.h>
5#include <pcl/surface/convex_hull.h>
6#include <pcl/surface/concave_hull.h>
7#include <pcl/surface/gp3.h>
8#include <pcl/surface/marching_cubes_greedy.h>
18 std::vector<pcl::Vertices>
faces;
21using MeshPtr = std::shared_ptr<Mesh>;
24smoothPointCloud (
const PointCloudPtr & input,
float radius,
int polynomial_order)
28 mls.setSearchRadius (radius);
29 mls.setSqrGaussParam (radius*radius);
30 mls.setPolynomialFit (polynomial_order > 1);
31 mls.setPolynomialOrder (polynomial_order);
33 mls.setInputCloud (input);
36 mls.reconstruct (*output);
42computeSurfaceElements (
const PointCloudPtr & input,
float radius,
int polynomial_order)
46 mls.setSearchRadius (radius);
47 mls.setSqrGaussParam (radius*radius);
48 mls.setPolynomialFit (polynomial_order > 1);
49 mls.setPolynomialOrder (polynomial_order);
51 mls.setInputCloud (input);
55 mls.setOutputNormals (normals);
56 mls.reconstruct (*points);
65computeConvexHull (
const PointCloudPtr & input)
68 convex_hull.setInputCloud (input);
70 MeshPtr output (
new Mesh);
71 convex_hull.reconstruct (*(output->points), output->faces);
78computeConcaveHull (
const PointCloudPtr & input,
float alpha)
81 concave_hull.setInputCloud (input);
82 concave_hull.setAlpha (alpha);
84 MeshPtr output (
new Mesh);
85 concave_hull.reconstruct (*(output->points), output->faces);
91greedyTriangulation (
const SurfaceElementsPtr & surfels,
float radius,
float mu,
int max_nearest_neighbors,
92 float max_surface_angle,
float min_angle,
float max_angle)
98 gpt.setSearchRadius (radius);
99 gpt.setMaximumNearestNeighbors (max_nearest_neighbors);
101 gpt.setMaximumSurfaceAgle (max_surface_angle);
102 gpt.setMinimumAngle (min_angle);
103 gpt.setMaximumAngle (max_angle);
104 gpt.setNormalConsistency (
true);
106 gpt.setInputCloud (surfels);
108 gpt.reconstruct (*output);
115marchingCubesTriangulation (
const SurfaceElementsPtr & surfels,
float leaf_size,
float iso_level)
119 marching_cubes.setLeafSize (leaf_size);
120 marching_cubes.setIsoLevel (iso_level);
122 marching_cubes.setInputCloud (surfels);
124 marching_cubes.reconstruct (*output);
std::vector< pcl::Vertices > faces
Iterator class for point clouds with or without given indices.
shared_ptr< KdTree< PointT > > Ptr
PointCloud represents the base class in PCL for storing collections of 3D points.
void copyPointCloud(const pcl::PointCloud< PointInT > &cloud_in, pcl::PointCloud< PointOutT > &cloud_out)
Copy all the fields from a given point cloud into a new point cloud.
shared_ptr< ::pcl::PolygonMesh > Ptr