1 #include <pcl/features/rops_estimation.h> 2 #include <pcl/io/pcd_io.h> 3 main(int argc,char ** argv)4int 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