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