Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
vtk_smoothing
vtk_mesh_smoothing_laplacian.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Point Cloud Library (PCL) - www.pointclouds.org
5
* Copyright (c) 2011, Willow Garage, Inc.
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
*
12
* * Redistributions of source code must retain the above copyright
13
* notice, this list of conditions and the following disclaimer.
14
* * Redistributions in binary form must reproduce the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer in the documentation and/or other materials provided
17
* with the distribution.
18
* * Neither the name of Willow Garage, Inc. nor the names of its
19
* contributors may be used to endorse or promote products derived
20
* from this software without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
* POSSIBILITY OF SUCH DAMAGE.
34
*
35
* $Id$
36
*
37
*/
38
39
#pragma once
40
41
#include <pcl/surface/processing.h>
42
#include <pcl/surface/vtk_smoothing/vtk.h>
43
44
namespace
pcl
45
{
46
/** \brief PCL mesh smoothing based on the vtkSmoothPolyDataFilter algorithm from the VTK library.
47
* Please check out the original documentation for more details on the inner workings of the algorithm
48
* Warning: This wrapper does two fairly computationally expensive conversions from the PCL PolygonMesh
49
* data structure to the vtkPolyData data structure and back.
50
*/
51
class
PCL_EXPORTS
MeshSmoothingLaplacianVTK
:
public
MeshProcessing
52
{
53
public
:
54
/** \brief Empty constructor that sets the values of the algorithm parameters to the VTK defaults */
55
MeshSmoothingLaplacianVTK
() =
default
;
56
57
/** \brief Set the number of iterations for the smoothing filter.
58
* \param[in] num_iter the number of iterations
59
*/
60
inline
void
61
setNumIter
(
int
num_iter)
62
{
63
num_iter_ = num_iter;
64
};
65
66
/** \brief Get the number of iterations. */
67
inline
int
68
getNumIter
()
const
69
{
70
return
num_iter_;
71
};
72
73
/** \brief Specify a convergence criterion for the iteration process. Smaller numbers result in more smoothing iterations.
74
* \param[in] convergence convergence criterion for the Laplacian smoothing
75
*/
76
inline
void
77
setConvergence
(
float
convergence)
78
{
79
convergence_ = convergence;
80
};
81
82
/** \brief Get the convergence criterion. */
83
inline
float
84
getConvergence
()
const
85
{
86
return
convergence_;
87
};
88
89
/** \brief Specify the relaxation factor for Laplacian smoothing. As in all iterative methods,
90
* the stability of the process is sensitive to this parameter.
91
* In general, small relaxation factors and large numbers of iterations are more stable than larger relaxation
92
* factors and smaller numbers of iterations.
93
* \param[in] relaxation_factor the relaxation factor of the Laplacian smoothing algorithm
94
*/
95
inline
void
96
setRelaxationFactor
(
float
relaxation_factor)
97
{
98
relaxation_factor_ = relaxation_factor;
99
};
100
101
/** \brief Get the relaxation factor of the Laplacian smoothing */
102
inline
float
103
getRelaxationFactor
()
const
104
{
105
return
relaxation_factor_;
106
};
107
108
/** \brief Turn on/off smoothing along sharp interior edges.
109
* \param[in] feature_edge_smoothing whether to enable/disable smoothing along sharp interior edges
110
*/
111
inline
void
112
setFeatureEdgeSmoothing
(
bool
feature_edge_smoothing)
113
{
114
feature_edge_smoothing_ = feature_edge_smoothing;
115
};
116
117
/** \brief Get the status of the feature edge smoothing */
118
inline
bool
119
getFeatureEdgeSmoothing
()
const
120
{
121
return
feature_edge_smoothing_;
122
};
123
124
/** \brief Specify the feature angle for sharp edge identification.
125
* \param[in] feature_angle the angle threshold for considering an edge to be sharp
126
*/
127
inline
void
128
setFeatureAngle
(
float
feature_angle)
129
{
130
feature_angle_ = feature_angle;
131
};
132
133
/** \brief Get the angle threshold for considering an edge to be sharp */
134
inline
float
135
getFeatureAngle
()
const
136
{
137
return
feature_angle_;
138
};
139
140
/** \brief Specify the edge angle to control smoothing along edges (either interior or boundary).
141
* \param[in] edge_angle the angle to control smoothing along edges
142
*/
143
inline
void
144
setEdgeAngle
(
float
edge_angle)
145
{
146
edge_angle_ = edge_angle;
147
};
148
149
/** \brief Get the edge angle to control smoothing along edges */
150
inline
float
151
getEdgeAngle
()
const
152
{
153
return
edge_angle_;
154
};
155
156
/** \brief Turn on/off the smoothing of vertices on the boundary of the mesh.
157
* \param[in] boundary_smoothing decision whether boundary smoothing is on or off
158
*/
159
inline
void
160
setBoundarySmoothing
(
bool
boundary_smoothing)
161
{
162
boundary_smoothing_ = boundary_smoothing;
163
};
164
165
/** \brief Get the status of the boundary smoothing */
166
inline
bool
167
getBoundarySmoothing
()
const
168
{
169
return
boundary_smoothing_;
170
}
171
172
protected
:
173
void
174
performProcessing
(
pcl::PolygonMesh
&output)
override
;
175
176
private
:
177
vtkSmartPointer<vtkPolyData>
vtk_polygons_;
178
179
/// Parameters
180
int
num_iter_{20};
181
float
convergence_{0.0f};
182
float
relaxation_factor_{0.01f};
183
bool
feature_edge_smoothing_{
false
};
184
float
feature_angle_{45.f};
185
float
edge_angle_{15.f};
186
bool
boundary_smoothing_{
true
};
187
};
188
}
pcl::MeshProcessing::MeshProcessing
MeshProcessing()=default
Constructor.
pcl::MeshSmoothingLaplacianVTK::setConvergence
void setConvergence(float convergence)
Specify a convergence criterion for the iteration process.
Definition
vtk_mesh_smoothing_laplacian.h:77
pcl::MeshSmoothingLaplacianVTK::setEdgeAngle
void setEdgeAngle(float edge_angle)
Specify the edge angle to control smoothing along edges (either interior or boundary).
Definition
vtk_mesh_smoothing_laplacian.h:144
pcl::MeshSmoothingLaplacianVTK::getConvergence
float getConvergence() const
Get the convergence criterion.
Definition
vtk_mesh_smoothing_laplacian.h:84
pcl::MeshSmoothingLaplacianVTK::getFeatureEdgeSmoothing
bool getFeatureEdgeSmoothing() const
Get the status of the feature edge smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:119
pcl::MeshSmoothingLaplacianVTK::setNumIter
void setNumIter(int num_iter)
Set the number of iterations for the smoothing filter.
Definition
vtk_mesh_smoothing_laplacian.h:61
pcl::MeshSmoothingLaplacianVTK::getBoundarySmoothing
bool getBoundarySmoothing() const
Get the status of the boundary smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:167
pcl::MeshSmoothingLaplacianVTK::MeshSmoothingLaplacianVTK
MeshSmoothingLaplacianVTK()=default
Empty constructor that sets the values of the algorithm parameters to the VTK defaults.
pcl::MeshSmoothingLaplacianVTK::getNumIter
int getNumIter() const
Get the number of iterations.
Definition
vtk_mesh_smoothing_laplacian.h:68
pcl::MeshSmoothingLaplacianVTK::performProcessing
void performProcessing(pcl::PolygonMesh &output) override
Abstract surface processing method.
pcl::MeshSmoothingLaplacianVTK::getFeatureAngle
float getFeatureAngle() const
Get the angle threshold for considering an edge to be sharp.
Definition
vtk_mesh_smoothing_laplacian.h:135
pcl::MeshSmoothingLaplacianVTK::setRelaxationFactor
void setRelaxationFactor(float relaxation_factor)
Specify the relaxation factor for Laplacian smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:96
pcl::MeshSmoothingLaplacianVTK::getEdgeAngle
float getEdgeAngle() const
Get the edge angle to control smoothing along edges.
Definition
vtk_mesh_smoothing_laplacian.h:151
pcl::MeshSmoothingLaplacianVTK::setFeatureAngle
void setFeatureAngle(float feature_angle)
Specify the feature angle for sharp edge identification.
Definition
vtk_mesh_smoothing_laplacian.h:128
pcl::MeshSmoothingLaplacianVTK::getRelaxationFactor
float getRelaxationFactor() const
Get the relaxation factor of the Laplacian smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:103
pcl::MeshSmoothingLaplacianVTK::setBoundarySmoothing
void setBoundarySmoothing(bool boundary_smoothing)
Turn on/off the smoothing of vertices on the boundary of the mesh.
Definition
vtk_mesh_smoothing_laplacian.h:160
pcl::MeshSmoothingLaplacianVTK::setFeatureEdgeSmoothing
void setFeatureEdgeSmoothing(bool feature_edge_smoothing)
Turn on/off smoothing along sharp interior edges.
Definition
vtk_mesh_smoothing_laplacian.h:112
vtkSmartPointer
Definition
actor_map.h:51
pcl
Definition
convolution.h:46
pcl::PolygonMesh
Definition
PolygonMesh.h:15