iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
test-PointCloud2Filter.C
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 #include <nrt/config.h>
36 #ifdef NRT_HAVE_CLOUD
37 
38 #include <boost/random.hpp>
39 
41 
42 using namespace nrt;
43 
44 void createRandomCloud( PointCloud2 & cloud, int size )
45 {
46  boost::mt19937 rng;
47  boost::uniform_real<float> u(-3.0, 3.0);
48  boost::variate_generator< boost::mt19937&, boost::uniform_real<float> > gen(rng, u);
49 
50  cloud.resize( size );
51  for( auto i = cloud.geometry_begin(); i != cloud.geometry_end(); ++i )
52  *i = {gen(), gen(), gen()};
53 }
54 
55 int main( int argc, char ** argv )
56 {
57  PointCloud2 cloud1;
58 
59  const size_t cloudsize = 10000;
60  const double filteramount = 0.75;
61  createRandomCloud( cloud1, cloudsize );
62 
63  // Test RandomRemovalFilter
64  PointCloud2 filtered = filterPointCloud( cloud1, RandomRemovalFilter( filteramount ) );
65  NRT_INFO( "Filtered size (expect " << cloudsize * filteramount << "): " << filtered.size() );
66 
67  // Test pass through, only letting through values in a small cube area range
68  filtered = filterPointCloud( cloud1, PassThroughFilter(),
69  [](PointCloud2::Geometry const & p)
70  {
71  return p.x() >= 0.0 && p.x() < 1 && p.y() >= 0.0 && p.y() < 1 &&
72  p.z() >= 0.0 && p.z() < 1;
73  } );
74 
75  NRT_INFO( "And now a bunch of points in the cube [0,1) xyz: " );
76  for( auto i = filtered.begin(); i != filtered.end(); ++i )
77  NRT_INFO( *i );
78 
79  PointCloud2 cloud2;
80  for( size_t i = 0; i < 1000; ++i )
81  cloud2.insert( {0.3f, 0.3f, 0.3f} );
82 
83  filtered = filterPointCloud( cloud2, DuplicateRemovalFilter( 0.01 ) );
84  NRT_INFO( "Removing duplicates from a cloud of 1000 same point, should get one out: " );
85  for( auto i = filtered.begin(); i != filtered.end(); ++i )
86  NRT_INFO( *i );
87 }
88 #else
89 int main( int argc, char ** argv )
90 {
91  return 1;
92 }
93 #endif // NRT_HAVE_CLOUD