Point Cloud Library (PCL) 1.13.0
progressive_morphological_filter.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2009-2012, Willow Garage, Inc.
6 * Copyright (c) 2012-, Open Perception, Inc.
7 * Copyright (c) 2014, RadiantBlue Technologies, Inc.
8 *
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 *
15 * * Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * * Redistributions in binary form must reproduce the above
18 * copyright notice, this list of conditions and the following
19 * disclaimer in the documentation and/or other materials provided
20 * with the distribution.
21 * * Neither the name of the copyright holder(s) nor the names of its
22 * contributors may be used to endorse or promote products derived
23 * from this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
28 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
30 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
31 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
35 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38
39#pragma once
40
41#include <pcl/pcl_base.h>
42#include <pcl/point_cloud.h>
43#include <pcl/point_types.h>
44
45namespace pcl
46{
47 /** \brief
48 * Implements the Progressive Morphological Filter for segmentation of ground points.
49 * Description can be found in the article
50 * "A Progressive Morphological Filter for Removing Nonground Measurements from
51 * Airborne LIDAR Data"
52 * by K. Zhang, S. Chen, D. Whitman, M. Shyu, J. Yan, and C. Zhang.
53 */
54 template <typename PointT>
56 {
57 public:
58
60
61 using PCLBase <PointT>::input_;
62 using PCLBase <PointT>::indices_;
63 using PCLBase <PointT>::initCompute;
64 using PCLBase <PointT>::deinitCompute;
65
66 public:
67
68 /** \brief Constructor that sets default values for member variables. */
70
71
73
74 /** \brief Get the maximum window size to be used in filtering ground returns. */
75 inline int
76 getMaxWindowSize () const { return (max_window_size_); }
77
78 /** \brief Set the maximum window size to be used in filtering ground returns. */
79 inline void
80 setMaxWindowSize (int max_window_size) { max_window_size_ = max_window_size; }
81
82 /** \brief Get the slope value to be used in computing the height threshold. */
83 inline float
84 getSlope () const { return (slope_); }
85
86 /** \brief Set the slope value to be used in computing the height threshold. */
87 inline void
88 setSlope (float slope) { slope_ = slope; }
89
90 /** \brief Get the maximum height above the parameterized ground surface to be considered a ground return. */
91 inline float
92 getMaxDistance () const { return (max_distance_); }
93
94 /** \brief Set the maximum height above the parameterized ground surface to be considered a ground return. */
95 inline void
96 setMaxDistance (float max_distance) { max_distance_ = max_distance; }
97
98 /** \brief Get the initial height above the parameterized ground surface to be considered a ground return. */
99 inline float
100 getInitialDistance () const { return (initial_distance_); }
101
102 /** \brief Set the initial height above the parameterized ground surface to be considered a ground return. */
103 inline void
104 setInitialDistance (float initial_distance) { initial_distance_ = initial_distance; }
105
106 /** \brief Get the cell size. */
107 inline float
108 getCellSize () const { return (cell_size_); }
109
110 /** \brief Set the cell size. */
111 inline void
112 setCellSize (float cell_size) { cell_size_ = cell_size; }
113
114 /** \brief Get the base to be used in computing progressive window sizes. */
115 inline float
116 getBase () const { return (base_); }
117
118 /** \brief Set the base to be used in computing progressive window sizes. */
119 inline void
120 setBase (float base) { base_ = base; }
121
122 /** \brief Get flag indicating whether or not to exponentially grow window sizes? */
123 inline bool
124 getExponential () const { return (exponential_); }
125
126 /** \brief Set flag indicating whether or not to exponentially grow window sizes? */
127 inline void
128 setExponential (bool exponential) { exponential_ = exponential; }
129
130 /** \brief This method launches the segmentation algorithm and returns indices of
131 * points determined to be ground returns.
132 * \param[out] ground indices of points determined to be ground returns.
133 */
134 virtual void
135 extract (Indices& ground);
136
137 protected:
138
139 /** \brief Maximum window size to be used in filtering ground returns. */
141
142 /** \brief Slope value to be used in computing the height threshold. */
143 float slope_;
144
145 /** \brief Maximum height above the parameterized ground surface to be considered a ground return. */
147
148 /** \brief Initial height above the parameterized ground surface to be considered a ground return. */
150
151 /** \brief Cell size. */
153
154 /** \brief Base to be used in computing progressive window sizes. */
155 float base_;
156
157 /** \brief Exponentially grow window sizes? */
159 };
160}
161
162#ifdef PCL_NO_PRECOMPILE
163#include <pcl/segmentation/impl/progressive_morphological_filter.hpp>
164#endif
PCL base class.
Definition: pcl_base.h:70
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition: point_cloud.h:173
Implements the Progressive Morphological Filter for segmentation of ground points.
void setExponential(bool exponential)
Set flag indicating whether or not to exponentially grow window sizes?
bool getExponential() const
Get flag indicating whether or not to exponentially grow window sizes?
void setMaxWindowSize(int max_window_size)
Set the maximum window size to be used in filtering ground returns.
void setSlope(float slope)
Set the slope value to be used in computing the height threshold.
float slope_
Slope value to be used in computing the height threshold.
float getMaxDistance() const
Get the maximum height above the parameterized ground surface to be considered a ground return.
void setCellSize(float cell_size)
Set the cell size.
float base_
Base to be used in computing progressive window sizes.
float max_distance_
Maximum height above the parameterized ground surface to be considered a ground return.
float initial_distance_
Initial height above the parameterized ground surface to be considered a ground return.
bool exponential_
Exponentially grow window sizes?
float getBase() const
Get the base to be used in computing progressive window sizes.
float getSlope() const
Get the slope value to be used in computing the height threshold.
int max_window_size_
Maximum window size to be used in filtering ground returns.
void setBase(float base)
Set the base to be used in computing progressive window sizes.
int getMaxWindowSize() const
Get the maximum window size to be used in filtering ground returns.
void setMaxDistance(float max_distance)
Set the maximum height above the parameterized ground surface to be considered a ground return.
float getInitialDistance() const
Get the initial height above the parameterized ground surface to be considered a ground return.
void setInitialDistance(float initial_distance)
Set the initial height above the parameterized ground surface to be considered a ground return.
Defines all the PCL implemented PointT point type structures.
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition: types.h:133
#define PCL_EXPORTS
Definition: pcl_macros.h:323
A point structure representing Euclidean xyz coordinates, and the RGB color.