Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
surface.h
1#pragma once
2
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>
9
10#include "typedefs.h"
11
12
13class Mesh
14{
15 public:
16 Mesh () : points (new PointCloud) {}
17 PointCloudPtr points;
18 std::vector<pcl::Vertices> faces;
19};
20
21using MeshPtr = std::shared_ptr<Mesh>;
22
23PointCloudPtr
24smoothPointCloud (const PointCloudPtr & input, float radius, int polynomial_order)
25{
28 mls.setSearchRadius (radius);
29 mls.setSqrGaussParam (radius*radius);
30 mls.setPolynomialFit (polynomial_order > 1);
31 mls.setPolynomialOrder (polynomial_order);
32
33 mls.setInputCloud (input);
34
35 PointCloudPtr output (new PointCloud);
36 mls.reconstruct (*output);
37
38 return (output);
39}
40
41SurfaceElementsPtr
42computeSurfaceElements (const PointCloudPtr & input, float radius, int polynomial_order)
43{
46 mls.setSearchRadius (radius);
47 mls.setSqrGaussParam (radius*radius);
48 mls.setPolynomialFit (polynomial_order > 1);
49 mls.setPolynomialOrder (polynomial_order);
50
51 mls.setInputCloud (input);
52
53 PointCloudPtr points (new PointCloud);
54 SurfaceNormalsPtr normals (new SurfaceNormals);
55 mls.setOutputNormals (normals);
56 mls.reconstruct (*points);
57
58 SurfaceElementsPtr surfels (new SurfaceElements);
59 pcl::copyPointCloud (*points, *surfels);
60 pcl::copyPointCloud (*normals, *surfels);
61 return (surfels);
62}
63
64MeshPtr
65computeConvexHull (const PointCloudPtr & input)
66{
67 pcl::ConvexHull<PointT> convex_hull;
68 convex_hull.setInputCloud (input);
69
70 MeshPtr output (new Mesh);
71 convex_hull.reconstruct (*(output->points), output->faces);
72
73 return (output);
74}
75
76
77MeshPtr
78computeConcaveHull (const PointCloudPtr & input, float alpha)
79{
80 pcl::ConcaveHull<PointT> concave_hull;
81 concave_hull.setInputCloud (input);
82 concave_hull.setAlpha (alpha);
83
84 MeshPtr output (new Mesh);
85 concave_hull.reconstruct (*(output->points), output->faces);
86
87 return (output);
88}
89
91greedyTriangulation (const SurfaceElementsPtr & surfels, float radius, float mu, int max_nearest_neighbors,
92 float max_surface_angle, float min_angle, float max_angle)
93
94{
97
98 gpt.setSearchRadius (radius);
99 gpt.setMaximumNearestNeighbors (max_nearest_neighbors);
100 gpt.setMu (mu);
101 gpt.setMaximumSurfaceAgle (max_surface_angle);
102 gpt.setMinimumAngle (min_angle);
103 gpt.setMaximumAngle (max_angle);
104 gpt.setNormalConsistency (true);
105
106 gpt.setInputCloud (surfels);
108 gpt.reconstruct (*output);
109
110 return (output);
111}
112
113
115marchingCubesTriangulation (const SurfaceElementsPtr & surfels, float leaf_size, float iso_level)
116{
118 marching_cubes.setSearchMethod (pcl::KdTree<SurfelT>::Ptr (new pcl::KdTreeFLANN<SurfelT> ()));
119 marching_cubes.setLeafSize (leaf_size);
120 marching_cubes.setIsoLevel (iso_level);
121
122 marching_cubes.setInputCloud (surfels);
124 marching_cubes.reconstruct (*output);
125
126 return (output);
127}
Definition surface.h:14
Mesh()
Definition surface.h:16
std::vector< pcl::Vertices > faces
Definition surface.h:18
PointCloudPtr points
Definition surface.h:17
Iterator class for point clouds with or without given indices.
shared_ptr< KdTree< PointT > > Ptr
Definition kdtree.h:68
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.
Definition io.hpp:144
shared_ptr< ::pcl::PolygonMesh > Ptr
Definition PolygonMesh.h:97