00001 #include <iostream> 00002 #include <vector> 00003 #include <pcl/io/pcd_io.h> 00004 #include <pcl/point_types.h> 00005 #include <pcl/visualization/cloud_viewer.h> 00006 #include <pcl/filters/passthrough.h> 00007 #include <pcl/segmentation/min_cut_segmentation.h> 00008 00009 int main (int argc, char** argv) 00010 { 00011 pcl::PointCloud <pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud <pcl::PointXYZ>); 00012 if ( pcl::io::loadPCDFile <pcl::PointXYZ> ("min_cut_segmentation_tutorial.pcd", *cloud) == -1 ) 00013 { 00014 std::cout << "Cloud reading failed." << std::endl; 00015 return (-1); 00016 } 00017 00018 pcl::IndicesPtr indices (new std::vector <int>); 00019 pcl::PassThrough<pcl::PointXYZ> pass; 00020 pass.setInputCloud (cloud); 00021 pass.setFilterFieldName ("z"); 00022 pass.setFilterLimits (0.0, 1.0); 00023 pass.filter (*indices); 00024 00025 pcl::MinCutSegmentation<pcl::PointXYZ> seg; 00026 seg.setInputCloud (cloud); 00027 seg.setIndices (indices); 00028 00029 pcl::PointCloud<pcl::PointXYZ>::Ptr foreground_points(new pcl::PointCloud<pcl::PointXYZ> ()); 00030 pcl::PointXYZ point; 00031 point.x = 68.97; 00032 point.y = -18.55; 00033 point.z = 0.57; 00034 foreground_points->points.push_back(point); 00035 seg.setForegroundPoints (foreground_points); 00036 00037 seg.setSigma (0.25); 00038 seg.setRadius (3.0433856); 00039 seg.setNumberOfNeighbours (14); 00040 seg.setSourceWeight (0.8); 00041 00042 std::vector <pcl::PointIndices> clusters; 00043 seg.extract (clusters); 00044 00045 std::cout << "Maximum flow is " << seg.getMaxFlow () << std::endl; 00046 00047 pcl::PointCloud <pcl::PointXYZRGB>::Ptr colored_cloud = seg.getColoredCloud (); 00048 pcl::visualization::CloudViewer viewer ("Cluster viewer"); 00049 viewer.showCloud(colored_cloud); 00050 while (!viewer.wasStopped ()) 00051 { 00052 } 00053 00054 return (0); 00055 }