00001 #include <iostream> 00002 #include <vector> 00003 #include <pcl/point_types.h> 00004 #include <pcl/io/pcd_io.h> 00005 #include <pcl/search/search.h> 00006 #include <pcl/search/kdtree.h> 00007 #include <pcl/visualization/cloud_viewer.h> 00008 #include <pcl/filters/passthrough.h> 00009 #include <pcl/segmentation/region_growing_rgb.h> 00010 00011 int 00012 main (int argc, char** argv) 00013 { 00014 pcl::search::Search <pcl::PointXYZRGB>::Ptr tree = boost::shared_ptr<pcl::search::Search<pcl::PointXYZRGB> > (new pcl::search::KdTree<pcl::PointXYZRGB>); 00015 00016 pcl::PointCloud <pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud <pcl::PointXYZRGB>); 00017 if ( pcl::io::loadPCDFile <pcl::PointXYZRGB> ("region_growing_rgb_tutorial.pcd", *cloud) == -1 ) 00018 { 00019 std::cout << "Cloud reading failed." << std::endl; 00020 return (-1); 00021 } 00022 00023 pcl::IndicesPtr indices (new std::vector <int>); 00024 pcl::PassThrough<pcl::PointXYZRGB> pass; 00025 pass.setInputCloud (cloud); 00026 pass.setFilterFieldName ("z"); 00027 pass.setFilterLimits (0.0, 1.0); 00028 pass.filter (*indices); 00029 00030 pcl::RegionGrowingRGB<pcl::PointXYZRGB> reg; 00031 reg.setInputCloud (cloud); 00032 reg.setIndices (indices); 00033 reg.setSearchMethod (tree); 00034 reg.setDistanceThreshold (10); 00035 reg.setPointColorThreshold (6); 00036 reg.setRegionColorThreshold (5); 00037 reg.setMinClusterSize (600); 00038 00039 std::vector <pcl::PointIndices> clusters; 00040 reg.extract (clusters); 00041 00042 pcl::PointCloud <pcl::PointXYZRGB>::Ptr colored_cloud = reg.getColoredCloud (); 00043 pcl::visualization::CloudViewer viewer ("Cluster viewer"); 00044 viewer.showCloud (colored_cloud); 00045 while (!viewer.wasStopped ()) 00046 { 00047 boost::this_thread::sleep (boost::posix_time::microseconds (100)); 00048 } 00049 00050 return (0); 00051 }