PCL 基于颜色的区域生长分割
程序员文章站
2022-05-20 21:10:33
...
一、算法原理
该算法与区域生长算法一样,时基于同一策略之上的,与区域生长相比,该算法主要有两处不同。第一,该算法用颜色代替了法线测试。第二,利用合并算法来控制过分割或欠分割。分割过程中,若两个相邻聚类的平均颜色相差较少,则将这两个聚类合并。然后进行第二步合并,在此步骤中,检查每一个聚类所包含的点的数量,如果这个数量小于用户定义的值,则当前这个聚类与其相近邻聚类合并在一起。
Color-based region growing segmentation
二、代码实现
#include <iostream>
#include <vector>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/search/search.h>
#include <pcl/search/kdtree.h>
#include <pcl/visualization/cloud_viewer.h>
#include <boost/thread/thread.hpp>
#include <pcl/filters/passthrough.h>
#include <pcl/segmentation/region_growing_rgb.h>
using namespace std;
int
main(int argc, char** argv)
{
pcl::PointCloud <pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud <pcl::PointXYZRGB>);
if (pcl::io::loadPCDFile <pcl::PointXYZRGB>("region_growing_rgb_tutorial.pcd", *cloud) == -1)
{
cout << "Cloud reading failed." << endl;
return (-1);
}
//-------------------------直通滤波----------------------------
pcl::IndicesPtr indices(new std::vector <int>);
pcl::PassThrough<pcl::PointXYZRGB> pass;
pass.setInputCloud(cloud);
pass.setFilterFieldName("z");
pass.setFilterLimits(0.0, 1.0);
pass.filter(*indices);
//-----------------可以同时用颜色测试和法线测试这两种手段-----------------------
pcl::search::Search <pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>);
pcl::RegionGrowingRGB<pcl::PointXYZRGB> reg;
reg.setInputCloud(cloud);
reg.setIndices(indices);
reg.setSearchMethod(tree);
reg.setDistanceThreshold(10);//设置距离阈值,用于聚类相邻点搜索
reg.setPointColorThreshold(6);//设置两点颜色阈值
reg.setRegionColorThreshold(5);//设置两类区域颜色阈值
reg.setMinClusterSize(600);//设置一个聚类的最少点数目
vector <pcl::PointIndices> clusters;
reg.extract(clusters);//获取聚类的结果,分割结果保存在点云索引的向量中
//------------对不同的聚类分割结果,随机赋予颜色---------------------------
pcl::PointCloud <pcl::PointXYZRGB>::Ptr colored_cloud = reg.getColoredCloud();
//----------------------------可视化----------------------------------------
pcl::visualization::CloudViewer viewer("Cluster viewer");
viewer.showCloud(colored_cloud);
while (!viewer.wasStopped())
{
}
return 0;
}
三、结果展示
四、官网链接
上一篇: 数据结构与算法 -树和森林
下一篇: 深搜算法实例:老鼠走迷宫(一)