Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
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
42namespace 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
62 using PointCloud = typename FilterIndices<PointT>::PointCloud;
63 using PointCloudPtr = typename PointCloud::Ptr;
64 using PointCloudConstPtr = typename PointCloud::ConstPtr;
65 using NormalsPtr = typename pcl::PointCloud<NormalT>::Ptr;
66
67 public:
68
71
72 /** \brief Empty constructor. */
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
Iterator class for point clouds with or without given indices.
bool extract_removed_indices_
Set to true if we want to return the indices of the removed points.
Definition filter.h:161
const std::string & getClassName() const
Get a string representation of the name of this class.
Definition filter.h:174
std::string filter_name_
The filter name.
Definition filter.h:158
IndicesPtr removed_indices_
Indices of the points that are removed.
Definition filter.h:155
FilterIndices represents the base class for filters that are about binary point removal.
float user_filter_value_
The user given value that the filtered point dimensions should be set to (default = NaN).
bool keep_organized_
False = remove points (default), true = redefine points, keep structure.
bool negative_
False = normal filter behavior (default), true = inverted behavior.
PointCloudConstPtr input_
The input point cloud dataset.
Definition pcl_base.h:147
IndicesPtr indices_
A pointer to the vector of point indices to use.
Definition pcl_base.h:150
PointCloud represents the base class in PCL for storing collections of 3D points.
shared_ptr< PointCloud< PointT > > Ptr
shared_ptr< const PointCloud< PointT > > ConstPtr
ShadowPoints removes the ghost points appearing on edge discontinuties
void setNormals(const NormalsPtr &normals)
Set the normals computed on the input point cloud.
NormalsPtr input_normals_
The normals computed at each point in the input cloud.
NormalsPtr getNormals() const
Get the normals computed on the input point cloud.
float getThreshold() const
Get the threshold for shadow points rejection.
void applyFilter(PointCloud &output) override
Sample of point indices into a separate PointCloud.
void setThreshold(float threshold)
Set the threshold for shadow points rejection.
ShadowPoints(bool extract_removed_indices=false)
Empty constructor.
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition types.h:133
A point structure representing Euclidean xyz coordinates, and the RGB color.