Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
vtk_smoothing
vtk_mesh_smoothing_windowed_sinc.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 vtkWindowedSincPolyDataFilter 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
MeshSmoothingWindowedSincVTK
:
public
MeshProcessing
52
{
53
public
:
54
/** \brief Empty constructor that sets the values of the algorithm parameters to the VTK defaults */
55
MeshSmoothingWindowedSincVTK
() =
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 Set the pass band value for windowed sinc filtering.
74
* \param[in] pass_band value for the pass band.
75
*/
76
inline
void
77
setPassBand
(
float
pass_band)
78
{
79
pass_band_ = pass_band;
80
};
81
82
/** \brief Get the pass band value. */
83
inline
float
84
getPassBand
()
const
85
{
86
return
pass_band_;
87
};
88
89
/** \brief Turn on/off coordinate normalization. The positions can be translated and scaled such that they fit
90
* within a [-1, 1] prior to the smoothing computation. The default is off. The numerical stability of the
91
* solution can be improved by turning normalization on. If normalization is on, the coordinates will be rescaled
92
* to the original coordinate system after smoothing has completed.
93
* \param[in] normalize_coordinates decision whether to normalize coordinates or not
94
*/
95
inline
void
96
setNormalizeCoordinates
(
bool
normalize_coordinates)
97
{
98
normalize_coordinates_ = normalize_coordinates;
99
}
100
101
/** \brief Get whether the coordinate normalization is active or not */
102
inline
bool
103
getNormalizeCoordinates
()
const
104
{
105
return
normalize_coordinates_;
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
157
/** \brief Turn on/off the smoothing of vertices on the boundary of the mesh.
158
* \param[in] boundary_smoothing decision whether boundary smoothing is on or off
159
*/
160
inline
void
161
setBoundarySmoothing
(
bool
boundary_smoothing)
162
{
163
boundary_smoothing_ = boundary_smoothing;
164
};
165
166
/** \brief Get the status of the boundary smoothing */
167
inline
bool
168
getBoundarySmoothing
()
const
169
{
170
return
boundary_smoothing_;
171
}
172
173
174
protected
:
175
void
176
performProcessing
(
pcl::PolygonMesh
&output)
override
;
177
178
private
:
179
vtkSmartPointer<vtkPolyData>
vtk_polygons_;
180
int
num_iter_{20};
181
float
pass_band_{0.1f};
182
bool
feature_edge_smoothing_{
false
};
183
float
feature_angle_{45.f};
184
float
edge_angle_{15.f};
185
bool
boundary_smoothing_{
true
};
186
bool
normalize_coordinates_{
false
};
187
};
188
}
pcl::MeshProcessing::MeshProcessing
MeshProcessing()=default
Constructor.
pcl::MeshSmoothingWindowedSincVTK::getFeatureAngle
float getFeatureAngle() const
Get the angle threshold for considering an edge to be sharp.
Definition
vtk_mesh_smoothing_windowed_sinc.h:135
pcl::MeshSmoothingWindowedSincVTK::getFeatureEdgeSmoothing
bool getFeatureEdgeSmoothing() const
Get the status of the feature edge smoothing.
Definition
vtk_mesh_smoothing_windowed_sinc.h:119
pcl::MeshSmoothingWindowedSincVTK::getEdgeAngle
float getEdgeAngle() const
Get the edge angle to control smoothing along edges.
Definition
vtk_mesh_smoothing_windowed_sinc.h:151
pcl::MeshSmoothingWindowedSincVTK::setFeatureEdgeSmoothing
void setFeatureEdgeSmoothing(bool feature_edge_smoothing)
Turn on/off smoothing along sharp interior edges.
Definition
vtk_mesh_smoothing_windowed_sinc.h:112
pcl::MeshSmoothingWindowedSincVTK::setFeatureAngle
void setFeatureAngle(float feature_angle)
Specify the feature angle for sharp edge identification.
Definition
vtk_mesh_smoothing_windowed_sinc.h:128
pcl::MeshSmoothingWindowedSincVTK::setNumIter
void setNumIter(int num_iter)
Set the number of iterations for the smoothing filter.
Definition
vtk_mesh_smoothing_windowed_sinc.h:61
pcl::MeshSmoothingWindowedSincVTK::setEdgeAngle
void setEdgeAngle(float edge_angle)
Specify the edge angle to control smoothing along edges (either interior or boundary).
Definition
vtk_mesh_smoothing_windowed_sinc.h:144
pcl::MeshSmoothingWindowedSincVTK::getNormalizeCoordinates
bool getNormalizeCoordinates() const
Get whether the coordinate normalization is active or not.
Definition
vtk_mesh_smoothing_windowed_sinc.h:103
pcl::MeshSmoothingWindowedSincVTK::getBoundarySmoothing
bool getBoundarySmoothing() const
Get the status of the boundary smoothing.
Definition
vtk_mesh_smoothing_windowed_sinc.h:168
pcl::MeshSmoothingWindowedSincVTK::setPassBand
void setPassBand(float pass_band)
Set the pass band value for windowed sinc filtering.
Definition
vtk_mesh_smoothing_windowed_sinc.h:77
pcl::MeshSmoothingWindowedSincVTK::setNormalizeCoordinates
void setNormalizeCoordinates(bool normalize_coordinates)
Turn on/off coordinate normalization.
Definition
vtk_mesh_smoothing_windowed_sinc.h:96
pcl::MeshSmoothingWindowedSincVTK::performProcessing
void performProcessing(pcl::PolygonMesh &output) override
Abstract surface processing method.
pcl::MeshSmoothingWindowedSincVTK::getPassBand
float getPassBand() const
Get the pass band value.
Definition
vtk_mesh_smoothing_windowed_sinc.h:84
pcl::MeshSmoothingWindowedSincVTK::MeshSmoothingWindowedSincVTK
MeshSmoothingWindowedSincVTK()=default
Empty constructor that sets the values of the algorithm parameters to the VTK defaults.
pcl::MeshSmoothingWindowedSincVTK::getNumIter
int getNumIter() const
Get the number of iterations.
Definition
vtk_mesh_smoothing_windowed_sinc.h:68
pcl::MeshSmoothingWindowedSincVTK::setBoundarySmoothing
void setBoundarySmoothing(bool boundary_smoothing)
Turn on/off the smoothing of vertices on the boundary of the mesh.
Definition
vtk_mesh_smoothing_windowed_sinc.h:161
vtkSmartPointer
Definition
actor_map.h:51
pcl
Definition
convolution.h:46
pcl::PolygonMesh
Definition
PolygonMesh.h:15