iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DuplicateRemovalFilter.H
Go to the documentation of this file.
1 /*! @file
2  @author Shane Grant
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 #ifdef NRT_HAVE_CLOUD
36 #ifndef INCLUDE_NRT_POINTCLOUD2_FILTER_DUPLICATEREMOVALFILTER_H
37 #define INCLUDE_NRT_POINTCLOUD2_FILTER_DUPLICATEREMOVALFILTER_H
38 
41 
42 namespace nrt
43 {
44  //! A filter that removes all points which are considered to be "duplicates"
45  /*! Often when combining point clouds, such as during registration, there will be
46  several copies of the "same" point since one cloud has been aligned to another.
47 
48  Keeping all of these points around can complicate algorithms and increase the
49  size of a cloud, so removing them can be useful. This filter removes points
50  excess points which are too close to each other, leaving only a single point
51  behind in some given geometric radius.
52 
53  The larger the radius, the longer this filter will take to run.
54 
55  TODO: make this much faster, it's very slow right now
56 
57  @ingroup pointcloud2filters */
59  {
60  public:
61  //! Create a duplicate removal filter that removes duplicates within a radius
62  /*! @param radius Radius in which to search for duplicate points */
63  DuplicateRemovalFilter( double radius );
64 
65  //! Filter the input
66  /*! @param input The cloud to filter
67  @return The filtered point cloud */
68  PointCloud2 filter( PointCloud2 const input );
69 
70  //! Filter a subset of the input
71  /*! @param input The cloud to filter
72  @param indices The subset to operate on
73  @return The filtered point cloud */
74  PointCloud2 filter( PointCloud2 const input,
75  Indices const indices );
76 
77  protected:
78  /*! @param inputSize the size of the input
79  @param search The search object
80  @param endIter Iterator to one past the end of the point cloud
81  @return The indices to remove */
82  Indices filterImpl( size_t const inputSize,
83  Search && search,
85 
86  private:
87  bool itsSearchRadius;
88  }; // class DuplicateRemovalFilter
89 } // namespace nrt
90 
91 #endif // INCLUDE_NRT_POINTCLOUD2_FILTER_DUPLICATEREMOVALFILTER_H
92 #endif // NRT_HAVE_CLOUD