Point Cloud Library (PCL)  1.11.1-dev
shadowpoints.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2009-2011, Willow Garage, Inc.
6  *
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * * Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  * * Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  * * Neither the name of the copyright holder(s) nor the names of its
20  * contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
37 
38 #pragma once
39 
40 #include <pcl/filters/filter_indices.h>
41 
42 namespace pcl
43 {
44  /** \brief @b ShadowPoints removes the ghost points appearing on edge discontinuties
45  *
46  * \author Aravindhan K Krishnan. This code is ported from libpointmatcher (https://github.com/ethz-asl/libpointmatcher)
47  * \ingroup filters
48  */
49  template<typename PointT, typename NormalT>
50  class ShadowPoints : public FilterIndices<PointT>
51  {
61 
63  using PointCloudPtr = typename PointCloud::Ptr;
65  using NormalsPtr = typename pcl::PointCloud<NormalT>::Ptr;
66 
67  public:
68 
69  using Ptr = shared_ptr< ShadowPoints<PointT, NormalT> >;
70  using ConstPtr = shared_ptr< const ShadowPoints<PointT, NormalT> >;
71 
72  /** \brief Empty constructor. */
73  ShadowPoints (bool extract_removed_indices = false) :
74  FilterIndices<PointT> (extract_removed_indices),
75  input_normals_ (),
76  threshold_ (0.1f)
77  {
78  filter_name_ = "ShadowPoints";
79  }
80 
81  /** \brief Set the normals computed on the input point cloud
82  * \param[in] normals the normals computed for the input cloud
83  */
84  inline void
85  setNormals (const NormalsPtr &normals) { input_normals_ = normals; }
86 
87  /** \brief Get the normals computed on the input point cloud */
88  inline NormalsPtr
89  getNormals () const { return (input_normals_); }
90 
91  /** \brief Set the threshold for shadow points rejection
92  * \param[in] threshold the threshold
93  */
94  inline void
95  setThreshold (float threshold) { threshold_ = threshold; }
96 
97  /** \brief Get the threshold for shadow points rejection */
98  inline float
99  getThreshold () const { return threshold_; }
100 
101  protected:
102 
103  /** \brief The normals computed at each point in the input cloud */
104  NormalsPtr input_normals_;
105 
106  /** \brief Sample of point indices into a separate PointCloud
107  * \param[out] output the resultant point cloud
108  */
109  void
110  applyFilter (PointCloud &output) override;
111 
112  /** \brief Sample of point indices
113  * \param[out] indices the resultant point cloud indices
114  */
115  void
116  applyFilter (Indices &indices) override;
117 
118  private:
119 
120  /** \brief Threshold for shadow point rejection
121  */
122  float threshold_;
123  };
124 }
125 
126 #ifdef PCL_NO_PRECOMPILE
127 #include <pcl/filters/impl/shadowpoints.hpp>
128 #endif
pcl
Definition: convolution.h:46
pcl::Filter::Ptr
shared_ptr< Filter< PointT > > Ptr
Definition: filter.h:83
pcl::PCLBase::PointCloudConstPtr
typename PointCloud::ConstPtr PointCloudConstPtr
Definition: pcl_base.h:74
pcl::PCLBase::PointCloudPtr
typename PointCloud::Ptr PointCloudPtr
Definition: pcl_base.h:73
pcl::ShadowPoints::setThreshold
void setThreshold(float threshold)
Set the threshold for shadow points rejection.
Definition: shadowpoints.h:95
pcl::PointCloud
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition: distances.h:55
pcl::PointXYZRGB
A point structure representing Euclidean xyz coordinates, and the RGB color.
Definition: point_types.hpp:628
pcl::ShadowPoints::input_normals_
NormalsPtr input_normals_
The normals computed at each point in the input cloud.
Definition: shadowpoints.h:104
pcl::ShadowPoints::getThreshold
float getThreshold() const
Get the threshold for shadow points rejection.
Definition: shadowpoints.h:99
pcl::ShadowPoints::applyFilter
void applyFilter(PointCloud &output) override
Sample of point indices into a separate PointCloud.
Definition: shadowpoints.hpp:47
pcl::ShadowPoints::ShadowPoints
ShadowPoints(bool extract_removed_indices=false)
Empty constructor.
Definition: shadowpoints.h:73
pcl::Filter::ConstPtr
shared_ptr< const Filter< PointT > > ConstPtr
Definition: filter.h:84
pcl::ShadowPoints::setNormals
void setNormals(const NormalsPtr &normals)
Set the normals computed on the input point cloud.
Definition: shadowpoints.h:85
pcl::FilterIndices
FilterIndices represents the base class for filters that are about binary point removal.
Definition: filter_indices.h:74
pcl::Indices
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition: types.h:131
pcl::ShadowPoints
ShadowPoints removes the ghost points appearing on edge discontinuties
Definition: shadowpoints.h:50
pcl::Filter::filter_name_
std::string filter_name_
The filter name.
Definition: filter.h:158
pcl::PointCloud::Ptr
shared_ptr< PointCloud< PointT > > Ptr
Definition: point_cloud.h:406
pcl::PointCloud::ConstPtr
shared_ptr< const PointCloud< PointT > > ConstPtr
Definition: point_cloud.h:407
pcl::ShadowPoints::getNormals
NormalsPtr getNormals() const
Get the normals computed on the input point cloud.
Definition: shadowpoints.h:89