Loading...
Searching...
No Matches
approximate_progressive_morphological_filter.h
/*
* Software License Agreement (BSD License)
*
* Point Cloud Library (PCL) - www.pointclouds.org
* Copyright (c) 2009-2012, Willow Garage, Inc.
* Copyright (c) 2012-, Open Perception, Inc.
* Copyright (c) 2014, RadiantBlue Technologies, Inc.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of the copyright holder(s) nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include <pcl/pcl_base.h>
#include <pcl/search/search.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
namespace pcl
{
/** \brief
* Implements the Progressive Morphological Filter for segmentation of ground points.
* Description can be found in the article
* "A Progressive Morphological Filter for Removing Nonground Measurements from
* Airborne LIDAR Data"
* by K. Zhang, S. Chen, D. Whitman, M. Shyu, J. Yan, and C. Zhang.
*/
template <typename PointT>
class PCL_EXPORTS ApproximateProgressiveMorphologicalFilter : public pcl::PCLBase<PointT>
{
public:
using PointCloud = pcl::PointCloud<PointT>;
using PCLBase <PointT>::input_;
using PCLBase <PointT>::indices_;
using PCLBase <PointT>::initCompute;
using PCLBase <PointT>::deinitCompute;
public:
/** \brief Constructor that sets default values for member variables. */
ApproximateProgressiveMorphologicalFilter ();
~ApproximateProgressiveMorphologicalFilter () override;
/** \brief Get the maximum window size to be used in filtering ground returns. */
inline int
getMaxWindowSize () const { return (max_window_size_); }
/** \brief Set the maximum window size to be used in filtering ground returns. */
inline void
setMaxWindowSize (int max_window_size) { max_window_size_ = max_window_size; }
/** \brief Get the slope value to be used in computing the height threshold. */
inline float
getSlope () const { return (slope_); }
/** \brief Set the slope value to be used in computing the height threshold. */
inline void
setSlope (float slope) { slope_ = slope; }
/** \brief Get the maximum height above the parameterized ground surface to be considered a ground return. */
inline float
getMaxDistance () const { return (max_distance_); }
/** \brief Set the maximum height above the parameterized ground surface to be considered a ground return. */
inline void
setMaxDistance (float max_distance) { max_distance_ = max_distance; }
/** \brief Get the initial height above the parameterized ground surface to be considered a ground return. */
inline float
getInitialDistance () const { return (initial_distance_); }
/** \brief Set the initial height above the parameterized ground surface to be considered a ground return. */
inline void
setInitialDistance (float initial_distance) { initial_distance_ = initial_distance; }
/** \brief Get the cell size. */
inline float
getCellSize () const { return (cell_size_); }
/** \brief Set the cell size. */
inline void
setCellSize (float cell_size) { cell_size_ = cell_size; }
/** \brief Get the base to be used in computing progressive window sizes. */
inline float
getBase () const { return (base_); }
/** \brief Set the base to be used in computing progressive window sizes. */
inline void
setBase (float base) { base_ = base; }
/** \brief Get flag indicating whether or not to exponentially grow window sizes? */
inline bool
getExponential () const { return (exponential_); }
/** \brief Set flag indicating whether or not to exponentially grow window sizes? */
inline void
setExponential (bool exponential) { exponential_ = exponential; }
/** \brief Initialize the scheduler and set the number of threads to use.
* \param nr_threads the number of hardware threads to use (0 sets the value back to automatic)
*/
inline void
setNumberOfThreads (unsigned int nr_threads = 0) { threads_ = nr_threads; }
/** \brief This method launches the segmentation algorithm and returns indices of
* points determined to be ground returns.
* \param[out] ground indices of points determined to be ground returns.
*/
virtual void
extract (Indices& ground);
protected:
/** \brief Maximum window size to be used in filtering ground returns. */
int max_window_size_{33};
/** \brief Slope value to be used in computing the height threshold. */
float slope_{0.7f};
/** \brief Maximum height above the parameterized ground surface to be considered a ground return. */
float max_distance_{10.0f};
/** \brief Initial height above the parameterized ground surface to be considered a ground return. */
float initial_distance_{0.15f};
/** \brief Cell size. */
float cell_size_{1.0f};
/** \brief Base to be used in computing progressive window sizes. */
float base_{2.0f};
/** \brief Exponentially grow window sizes? */
bool exponential_{true};
/** \brief Number of threads to be used. */
unsigned int threads_{0};
};
}
#ifdef PCL_NO_PRECOMPILE
#include <pcl/segmentation/impl/approximate_progressive_morphological_filter.hpp>
#endif
pcl::ApproximateProgressiveMorphologicalFilter
Implements the Progressive Morphological Filter for segmentation of ground points.
Definition approximate_progressive_morphological_filter.h:57
pcl::ApproximateProgressiveMorphologicalFilter::setMaxDistance
void setMaxDistance(float max_distance)
Set the maximum height above the parameterized ground surface to be considered a ground return.
Definition approximate_progressive_morphological_filter.h:97
pcl::ApproximateProgressiveMorphologicalFilter::setCellSize
void setCellSize(float cell_size)
Set the cell size.
Definition approximate_progressive_morphological_filter.h:113
pcl::ApproximateProgressiveMorphologicalFilter::getMaxDistance
float getMaxDistance() const
Get the maximum height above the parameterized ground surface to be considered a ground return.
Definition approximate_progressive_morphological_filter.h:93
pcl::ApproximateProgressiveMorphologicalFilter::PointCloud
pcl::PointCloud< PointT > PointCloud
Definition approximate_progressive_morphological_filter.h:60
pcl::ApproximateProgressiveMorphologicalFilter::getCellSize
float getCellSize() const
Get the cell size.
Definition approximate_progressive_morphological_filter.h:109
pcl::ApproximateProgressiveMorphologicalFilter::getMaxWindowSize
int getMaxWindowSize() const
Get the maximum window size to be used in filtering ground returns.
Definition approximate_progressive_morphological_filter.h:77
pcl::ApproximateProgressiveMorphologicalFilter::setBase
void setBase(float base)
Set the base to be used in computing progressive window sizes.
Definition approximate_progressive_morphological_filter.h:121
pcl::ApproximateProgressiveMorphologicalFilter::getBase
float getBase() const
Get the base to be used in computing progressive window sizes.
Definition approximate_progressive_morphological_filter.h:117
pcl::ApproximateProgressiveMorphologicalFilter::setNumberOfThreads
void setNumberOfThreads(unsigned int nr_threads=0)
Initialize the scheduler and set the number of threads to use.
Definition approximate_progressive_morphological_filter.h:135
pcl::ApproximateProgressiveMorphologicalFilter::setSlope
void setSlope(float slope)
Set the slope value to be used in computing the height threshold.
Definition approximate_progressive_morphological_filter.h:89
pcl::ApproximateProgressiveMorphologicalFilter::ApproximateProgressiveMorphologicalFilter
ApproximateProgressiveMorphologicalFilter()
Constructor that sets default values for member variables.
pcl::ApproximateProgressiveMorphologicalFilter::~ApproximateProgressiveMorphologicalFilter
~ApproximateProgressiveMorphologicalFilter() override
pcl::ApproximateProgressiveMorphologicalFilter::getExponential
bool getExponential() const
Get flag indicating whether or not to exponentially grow window sizes?
Definition approximate_progressive_morphological_filter.h:125
pcl::ApproximateProgressiveMorphologicalFilter::getInitialDistance
float getInitialDistance() const
Get the initial height above the parameterized ground surface to be considered a ground return.
Definition approximate_progressive_morphological_filter.h:101
pcl::ApproximateProgressiveMorphologicalFilter::setMaxWindowSize
void setMaxWindowSize(int max_window_size)
Set the maximum window size to be used in filtering ground returns.
Definition approximate_progressive_morphological_filter.h:81
pcl::ApproximateProgressiveMorphologicalFilter::setInitialDistance
void setInitialDistance(float initial_distance)
Set the initial height above the parameterized ground surface to be considered a ground return.
Definition approximate_progressive_morphological_filter.h:105
pcl::ApproximateProgressiveMorphologicalFilter::getSlope
float getSlope() const
Get the slope value to be used in computing the height threshold.
Definition approximate_progressive_morphological_filter.h:85
pcl::ApproximateProgressiveMorphologicalFilter::setExponential
void setExponential(bool exponential)
Set flag indicating whether or not to exponentially grow window sizes?
Definition approximate_progressive_morphological_filter.h:129
pcl::PCLBase
PCL base class.
Definition pcl_base.h:70
pcl::PointCloud
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition point_cloud.h:173
point_types.h
Defines all the PCL implemented PointT point type structures.
pcl
Definition convolution.h:46
pcl::Indices
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition types.h:133
pcl::PointXYZRGB
A point structure representing Euclidean xyz coordinates, and the RGB color.
Definition point_types.hpp:623