1 #include "filters.h"
2 
3 #include <string>
4 #include <pcl/console/parse.h>
5 #include <pcl/io/pcd_io.h>
6 #include <pcl/visualization/pcl_visualizer.h>
7 
8 int
main(int argc,char ** argv)9 main (int argc, char ** argv)
10 {
11   if (argc < 2)
12   {
13     pcl::console::print_info ("Syntax is: %s input.pcd <options>\n", argv[0]);
14     pcl::console::print_info ("  where options are:\n");
15     pcl::console::print_info ("    -t min_depth,max_depth  ............... Threshold depth\n");
16     pcl::console::print_info ("    -d leaf_size  ......................... Downsample\n");
17     pcl::console::print_info ("    -r radius,min_neighbors ............... Radius outlier removal\n");
18     pcl::console::print_info ("    -s output.pcd ......................... Save output\n");
19     return (1);
20   }
21 
22   // Load the input file
23   PointCloudPtr cloud (new PointCloud);
24   pcl::io::loadPCDFile (argv[1], *cloud);
25   pcl::console::print_info ("Loaded %s (%lu points)\n", argv[1], cloud->size ());
26 
27   // Threshold depth
28   double min_depth, max_depth;
29   bool threshold_depth = pcl::console::parse_2x_arguments (argc, argv, "-t", min_depth, max_depth) > 0;
30   if (threshold_depth)
31   {
32     std::size_t n = cloud->size ();
33     cloud = thresholdDepth (cloud, min_depth, max_depth);
34     pcl::console::print_info ("Eliminated %lu points outside depth limits\n", n - cloud->size ());
35   }
36 
37   // Downsample and threshold depth
38   double leaf_size;
39   bool downsample_cloud = pcl::console::parse_argument (argc, argv, "-d", leaf_size) > 0;
40   if (downsample_cloud)
41   {
42     std::size_t n = cloud->size ();
43     cloud = downsample (cloud, leaf_size);
44     pcl::console::print_info ("Downsampled from %lu to %lu points\n", n, cloud->size ());
45   }
46 
47   // Remove outliers
48   double radius, min_neighbors;
49   bool remove_outliers = pcl::console::parse_2x_arguments (argc, argv, "-r", radius, min_neighbors) > 0;
50   if (remove_outliers)
51   {
52     std::size_t n = cloud->size ();
53     cloud = removeOutliers (cloud, radius, (int)min_neighbors);
54     pcl::console::print_info ("Removed %lu outliers\n", n - cloud->size ());
55   }
56 
57   // Save output
58   std::string output_filename;
59   bool save_cloud = pcl::console::parse_argument (argc, argv, "-s", output_filename) > 0;
60   if (save_cloud)
61   {
62     pcl::io::savePCDFile (output_filename, *cloud);
63     pcl::console::print_info ("Saved result as %s\n", output_filename.c_str ());
64   }
65   // Or visualize the result
66   else
67   {
68     pcl::console::print_info ("Starting visualizer... Close window to exit.\n");
69     pcl::visualization::PCLVisualizer vis;
70     vis.addPointCloud (cloud);
71     vis.resetCamera ();
72     vis.spin ();
73   }
74 
75   return (0);
76 }
77