Point Cloud Library (PCL) 1.14.0
Loading...
Searching...
No Matches
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
44namespace 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 */
52 {
53 public:
54 /** \brief Empty constructor that sets the values of the algorithm parameters to the VTK defaults */
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
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
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
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
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
169 {
170 return boundary_smoothing_;
171 }
172
173
174 protected:
175 void
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}
MeshProcessing represents the base class for mesh processing algorithms.
Definition processing.h:95
PCL mesh smoothing based on the vtkWindowedSincPolyDataFilter algorithm from the VTK library.
float getFeatureAngle() const
Get the angle threshold for considering an edge to be sharp.
bool getFeatureEdgeSmoothing() const
Get the status of the feature edge smoothing.
float getEdgeAngle() const
Get the edge angle to control smoothing along edges.
void setFeatureEdgeSmoothing(bool feature_edge_smoothing)
Turn on/off smoothing along sharp interior edges.
void setFeatureAngle(float feature_angle)
Specify the feature angle for sharp edge identification.
void setNumIter(int num_iter)
Set the number of iterations for the smoothing filter.
void setEdgeAngle(float edge_angle)
Specify the edge angle to control smoothing along edges (either interior or boundary).
bool getNormalizeCoordinates() const
Get whether the coordinate normalization is active or not.
bool getBoundarySmoothing() const
Get the status of the boundary smoothing.
void setPassBand(float pass_band)
Set the pass band value for windowed sinc filtering.
void setNormalizeCoordinates(bool normalize_coordinates)
Turn on/off coordinate normalization.
void performProcessing(pcl::PolygonMesh &output) override
Abstract surface processing method.
float getPassBand() const
Get the pass band value.
MeshSmoothingWindowedSincVTK()=default
Empty constructor that sets the values of the algorithm parameters to the VTK defaults.
int getNumIter() const
Get the number of iterations.
void setBoundarySmoothing(bool boundary_smoothing)
Turn on/off the smoothing of vertices on the boundary of the mesh.