diff --git a/README.md b/README.md index f6a23c5..dbb8975 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Below is an example usage of the treeseg binaries: * findstems 15 0.2 2 ../FGC01_coords.dat ../FGC01.slice.pcd * segmentstem 12.5 ../clusters/FGC01.cluster.*.pcd ../FGC01.tile.downsample.*.pcd * getcrownvolume ../stems/FGC01.stem.*.pcd ../FGC01.tile.downsample.*.pcd -* segmentcrown [14 - 16] ../FGC01.volume.*.pcd +* segmentcrown [14 - 16] 0 ../FGC01.volume.*.pcd ## Authors diff --git a/src/segmentcrown.cpp b/src/segmentcrown.cpp index b42d5ff..16ec186 100644 --- a/src/segmentcrown.cpp +++ b/src/segmentcrown.cpp @@ -11,7 +11,8 @@ int main (int argc, char* argv[]) pcl::PCDReader reader; pcl::PCDWriter writer; std::stringstream ss; - for(int i=2;i::Ptr> clusters; euclideanClustering(volume,nnmax,3,clusters); ss.str(""); - ss << "ec_" << id[0] << ".pcd"; + ss << id[0] << ".ec." << id[1] << ".pcd"; writeClouds(clusters,ss.str(),false); std::cout << ss.str() << std::endl; // @@ -40,57 +41,61 @@ int main (int argc, char* argv[]) float smoothness = atof(argv[1]); regionSegmentation(clusters[idx],nnearest,nmin,smoothness,regions); ss.str(""); - ss << "ec_rg_" << id[0] << ".pcd"; + ss << id[0] << ".ec.rg." << id[1] << ".pcd"; writeClouds(regions,ss.str(),false); std::cout << ss.str() << std::endl; // - std::cout << "Leaf stripping: " << std::endl; - // - std::cout << " Region-wise, " << std::flush; - arma::mat rfmat; - arma::gmm_full rmodel; - gmmByCluster(regions,5,1,5,50,100,rfmat,rmodel); - std::vector rclassifications; - rclassifications = classifyGmmClusterModel(regions,5,rfmat,rmodel); - std::vector::Ptr> csepclouds; - separateCloudsClassifiedByCluster(regions,rclassifications,csepclouds); - ss.str(""); - ss << "ec_rg_rlw_" << id[0] << ".pcd"; - writeCloudClassifiedByCluster(regions,rclassifications,ss.str()); - std::cout << ss.str() << std::endl; - // - std::cout << " Point-wise, " << std::flush; - arma::mat pfmat; - arma::gmm_diag pmodel; - gmmByPoint(csepclouds[1],50,5,1,5,50,100,pfmat,pmodel); - std::vector pclassifications; - pclassifications = classifyGmmPointModel(csepclouds[1],5,pfmat,pmodel); - std::vector::Ptr> psepclouds; - separateCloudsClassifiedByPoint(csepclouds[1],pclassifications,psepclouds); - ss.str(""); - ss << "ec_rg_rlw_plw_" << id[0] << ".pcd"; - writeCloudClassifiedByPoint(csepclouds[1],pclassifications,ss.str()); - std::cout << ss.str() << std::endl; - // - ss.str(""); - ss << "ec_rg_rlw_plw_w_" << id[0] << ".pcd"; - pcl::PointCloud::Ptr wood(new pcl::PointCloud); - *wood += *csepclouds[0] + *psepclouds[0]; - writer.write(ss.str(),*wood,true); - std::cout << ss.str() << std::endl; - // - std::cout << "Re-segmenting regions: " << std::flush; - regions.clear(); - regionSegmentation(wood,nnearest,nmin,smoothness+2.5,regions); - ss.str(""); - ss << "ec_rg_rlw_plw_w_rg" << id[0] << ".pcd"; - writeClouds(regions,ss.str(),false); - std::cout << ss.str() << std::endl; + if(sepwoodleaf == true) + { + std::cout << "Leaf stripping: " << std::endl; + // + std::cout << " Region-wise, " << std::flush; + arma::mat rfmat; + arma::gmm_full rmodel; + gmmByCluster(regions,5,1,5,50,100,rfmat,rmodel); + std::vector rclassifications; + rclassifications = classifyGmmClusterModel(regions,5,rfmat,rmodel); + std::vector::Ptr> csepclouds; + separateCloudsClassifiedByCluster(regions,rclassifications,csepclouds); + ss.str(""); + ss << id[0] << ".ec.rg.rlw." << id[1] << ".pcd"; + writeCloudClassifiedByCluster(regions,rclassifications,ss.str()); + std::cout << ss.str() << std::endl; + // + std::cout << " Point-wise, " << std::flush; + arma::mat pfmat; + arma::gmm_diag pmodel; + gmmByPoint(csepclouds[1],50,5,1,5,50,100,pfmat,pmodel); + std::vector pclassifications; + pclassifications = classifyGmmPointModel(csepclouds[1],5,pfmat,pmodel); + std::vector::Ptr> psepclouds; + separateCloudsClassifiedByPoint(csepclouds[1],pclassifications,psepclouds); + ss.str(""); + ss << id[0] << ".ec.rg.rlw.plw." << id[1] << ".pcd"; + writeCloudClassifiedByPoint(csepclouds[1],pclassifications,ss.str()); + std::cout << ss.str() << std::endl; + // + ss.str(""); + ss << id[0] << ".ec.rg.rlw.plw.w." << id[1] << ".pcd"; + pcl::PointCloud::Ptr wood(new pcl::PointCloud); + *wood += *csepclouds[0] + *psepclouds[0]; + writer.write(ss.str(),*wood,true); + std::cout << ss.str() << std::endl; + // + std::cout << "Re-segmenting regions: " << std::flush; + regions.clear(); + regionSegmentation(wood,nnearest,nmin,smoothness+2.5,regions); + ss.str(""); + ss << id[0] << ".ec.rg.rlw.plw.w.rg." << id[1] << ".pcd"; + writeClouds(regions,ss.str(),false); + std::cout << ss.str() << std::endl; + } // std::cout << "Optimising regions: " << std::flush; removeFarRegions(regions); ss.str(""); - ss << "ec_rg_rlw_plw_w_rg_o" << id[0] << ".pcd"; + if(sepwoodleaf == true) ss << id[0] << ".ec.rg.rlw.plw.w.rg.o." << id[1] << ".pcd"; + else ss << id[0] << ".ec.rg.o." << id[1] << ".pcd"; writeClouds(regions,ss.str(),false); std::cout << ss.str() << std::endl; // @@ -98,7 +103,7 @@ int main (int argc, char* argv[]) pcl::PointCloud::Ptr tree(new pcl::PointCloud); buildTree(regions,tree); ss.str(""); - ss << "tree_" << id[0] << ".pcd"; + ss << id[0] << "_" << id[1] << ".pcd"; writer.write(ss.str(),*tree,true); std::cout << ss.str() << std::endl; }