Point Cloud Library (PCL)
1.12.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
()
56
: num_iter_ (20)
57
, convergence_ (0.0f)
58
, relaxation_factor_ (0.01f)
59
, feature_edge_smoothing_ (false)
60
, feature_angle_ (45.f)
61
, edge_angle_ (15.f)
62
, boundary_smoothing_ (true)
63
{};
64
65
/** \brief Set the number of iterations for the smoothing filter.
66
* \param[in] num_iter the number of iterations
67
*/
68
inline
void
69
setNumIter
(
int
num_iter)
70
{
71
num_iter_ = num_iter;
72
};
73
74
/** \brief Get the number of iterations. */
75
inline
int
76
getNumIter
()
const
77
{
78
return
num_iter_;
79
};
80
81
/** \brief Specify a convergence criterion for the iteration process. Smaller numbers result in more smoothing iterations.
82
* \param[in] convergence convergence criterion for the Laplacian smoothing
83
*/
84
inline
void
85
setConvergence
(
float
convergence)
86
{
87
convergence_ = convergence;
88
};
89
90
/** \brief Get the convergence criterion. */
91
inline
float
92
getConvergence
()
const
93
{
94
return
convergence_;
95
};
96
97
/** \brief Specify the relaxation factor for Laplacian smoothing. As in all iterative methods,
98
* the stability of the process is sensitive to this parameter.
99
* In general, small relaxation factors and large numbers of iterations are more stable than larger relaxation
100
* factors and smaller numbers of iterations.
101
* \param[in] relaxation_factor the relaxation factor of the Laplacian smoothing algorithm
102
*/
103
inline
void
104
setRelaxationFactor
(
float
relaxation_factor)
105
{
106
relaxation_factor_ = relaxation_factor;
107
};
108
109
/** \brief Get the relaxation factor of the Laplacian smoothing */
110
inline
float
111
getRelaxationFactor
()
const
112
{
113
return
relaxation_factor_;
114
};
115
116
/** \brief Turn on/off smoothing along sharp interior edges.
117
* \param[in] feature_edge_smoothing whether to enable/disable smoothing along sharp interior edges
118
*/
119
inline
void
120
setFeatureEdgeSmoothing
(
bool
feature_edge_smoothing)
121
{
122
feature_edge_smoothing_ = feature_edge_smoothing;
123
};
124
125
/** \brief Get the status of the feature edge smoothing */
126
inline
bool
127
getFeatureEdgeSmoothing
()
const
128
{
129
return
feature_edge_smoothing_;
130
};
131
132
/** \brief Specify the feature angle for sharp edge identification.
133
* \param[in] feature_angle the angle threshold for considering an edge to be sharp
134
*/
135
inline
void
136
setFeatureAngle
(
float
feature_angle)
137
{
138
feature_angle_ = feature_angle;
139
};
140
141
/** \brief Get the angle threshold for considering an edge to be sharp */
142
inline
float
143
getFeatureAngle
()
const
144
{
145
return
feature_angle_;
146
};
147
148
/** \brief Specify the edge angle to control smoothing along edges (either interior or boundary).
149
* \param[in] edge_angle the angle to control smoothing along edges
150
*/
151
inline
void
152
setEdgeAngle
(
float
edge_angle)
153
{
154
edge_angle_ = edge_angle;
155
};
156
157
/** \brief Get the edge angle to control smoothing along edges */
158
inline
float
159
getEdgeAngle
()
const
160
{
161
return
edge_angle_;
162
};
163
164
/** \brief Turn on/off the smoothing of vertices on the boundary of the mesh.
165
* \param[in] boundary_smoothing decision whether boundary smoothing is on or off
166
*/
167
inline
void
168
setBoundarySmoothing
(
bool
boundary_smoothing)
169
{
170
boundary_smoothing_ = boundary_smoothing;
171
};
172
173
/** \brief Get the status of the boundary smoothing */
174
inline
bool
175
getBoundarySmoothing
()
const
176
{
177
return
boundary_smoothing_;
178
}
179
180
protected
:
181
void
182
performProcessing
(
pcl::PolygonMesh
&output)
override
;
183
184
private
:
185
vtkSmartPointer<vtkPolyData>
vtk_polygons_;
186
187
/// Parameters
188
int
num_iter_;
189
float
convergence_;
190
float
relaxation_factor_;
191
bool
feature_edge_smoothing_;
192
float
feature_angle_;
193
float
edge_angle_;
194
bool
boundary_smoothing_;
195
};
196
}
pcl::MeshProcessing::MeshProcessing
MeshProcessing()
Constructor.
Definition
processing.h:103
pcl::MeshSmoothingLaplacianVTK::setConvergence
void setConvergence(float convergence)
Specify a convergence criterion for the iteration process.
Definition
vtk_mesh_smoothing_laplacian.h:85
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:152
pcl::MeshSmoothingLaplacianVTK::getConvergence
float getConvergence() const
Get the convergence criterion.
Definition
vtk_mesh_smoothing_laplacian.h:92
pcl::MeshSmoothingLaplacianVTK::getFeatureEdgeSmoothing
bool getFeatureEdgeSmoothing() const
Get the status of the feature edge smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:127
pcl::MeshSmoothingLaplacianVTK::setNumIter
void setNumIter(int num_iter)
Set the number of iterations for the smoothing filter.
Definition
vtk_mesh_smoothing_laplacian.h:69
pcl::MeshSmoothingLaplacianVTK::getBoundarySmoothing
bool getBoundarySmoothing() const
Get the status of the boundary smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:175
pcl::MeshSmoothingLaplacianVTK::getNumIter
int getNumIter() const
Get the number of iterations.
Definition
vtk_mesh_smoothing_laplacian.h:76
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:143
pcl::MeshSmoothingLaplacianVTK::setRelaxationFactor
void setRelaxationFactor(float relaxation_factor)
Specify the relaxation factor for Laplacian smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:104
pcl::MeshSmoothingLaplacianVTK::getEdgeAngle
float getEdgeAngle() const
Get the edge angle to control smoothing along edges.
Definition
vtk_mesh_smoothing_laplacian.h:159
pcl::MeshSmoothingLaplacianVTK::setFeatureAngle
void setFeatureAngle(float feature_angle)
Specify the feature angle for sharp edge identification.
Definition
vtk_mesh_smoothing_laplacian.h:136
pcl::MeshSmoothingLaplacianVTK::getRelaxationFactor
float getRelaxationFactor() const
Get the relaxation factor of the Laplacian smoothing.
Definition
vtk_mesh_smoothing_laplacian.h:111
pcl::MeshSmoothingLaplacianVTK::MeshSmoothingLaplacianVTK
MeshSmoothingLaplacianVTK()
Empty constructor that sets the values of the algorithm parameters to the VTK defaults.
Definition
vtk_mesh_smoothing_laplacian.h:55
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:168
pcl::MeshSmoothingLaplacianVTK::setFeatureEdgeSmoothing
void setFeatureEdgeSmoothing(bool feature_edge_smoothing)
Turn on/off smoothing along sharp interior edges.
Definition
vtk_mesh_smoothing_laplacian.h:120
vtkSmartPointer
Definition
actor_map.h:51
pcl
Definition
convolution.h:46
pcl::PolygonMesh
Definition
PolygonMesh.h:15