1 #include <pcl/features/rops_estimation.h>
2 #include <pcl/io/pcd_io.h>
3 
main(int argc,char ** argv)4 int main (int argc, char** argv)
5 {
6   if (argc != 4)
7     return (-1);
8 
9   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ> ());
10   if (pcl::io::loadPCDFile (argv[1], *cloud) == -1)
11     return (-1);
12 
13   pcl::PointIndicesPtr indices (new pcl::PointIndices);
14   std::ifstream indices_file;
15   indices_file.open (argv[2], std::ifstream::in);
16   for (std::string line; std::getline (indices_file, line);)
17   {
18     std::istringstream in (line);
19     unsigned int index = 0;
20     in >> index;
21     indices->indices.push_back (index - 1);
22   }
23   indices_file.close ();
24 
25   std::vector <pcl::Vertices> triangles;
26   std::ifstream triangles_file;
27   triangles_file.open (argv[3], std::ifstream::in);
28   for (std::string line; std::getline (triangles_file, line);)
29   {
30     pcl::Vertices triangle;
31     std::istringstream in (line);
32     unsigned int vertex = 0;
33     in >> vertex;
34     triangle.vertices.push_back (vertex - 1);
35     in >> vertex;
36     triangle.vertices.push_back (vertex - 1);
37     in >> vertex;
38     triangle.vertices.push_back (vertex - 1);
39     triangles.push_back (triangle);
40   }
41 
42   float support_radius = 0.0285f;
43   unsigned int number_of_partition_bins = 5;
44   unsigned int number_of_rotations = 3;
45 
46   pcl::search::KdTree<pcl::PointXYZ>::Ptr search_method (new pcl::search::KdTree<pcl::PointXYZ>);
47   search_method->setInputCloud (cloud);
48 
49   pcl::ROPSEstimation <pcl::PointXYZ, pcl::Histogram <135> > feature_estimator;
50   feature_estimator.setSearchMethod (search_method);
51   feature_estimator.setSearchSurface (cloud);
52   feature_estimator.setInputCloud (cloud);
53   feature_estimator.setIndices (indices);
54   feature_estimator.setTriangles (triangles);
55   feature_estimator.setRadiusSearch (support_radius);
56   feature_estimator.setNumberOfPartitionBins (number_of_partition_bins);
57   feature_estimator.setNumberOfRotations (number_of_rotations);
58   feature_estimator.setSupportRadius (support_radius);
59 
60   pcl::PointCloud<pcl::Histogram <135> >::Ptr histograms (new pcl::PointCloud <pcl::Histogram <135> > ());
61   feature_estimator.compute (*histograms);
62 
63   return (0);
64 }
65