【PCL】PCL点云分割(一)


前言

点云分割是根据点云的空间、几何和纹理等特征将点云划分为不同的部分,使得同一部分内的点云具有相似的特征。点云分割又分为区域提取、线面提取、语义分割与聚类等。点云分割在许多应用中都是非常重要的,例如逆向工程、CAD建模、目标检测等。
PCL提供了多种点云分割的方法,其中一些常用的方法包括:
平面模型分割:这是PCL中最常用的点云分割方法之一。它通过识别点云中的平面模型,将点云分割为不同的平面区域。

圆柱模型分割:这种方法用于识别点云中的圆柱体模型,并将点云分割为不同的圆柱体区域。

欧几里得聚类分割:这是一种基于欧几里得距离的聚类方法,将距离较近的点云聚类在一起,形成不同的聚类簇。
除了上述方法,PCL还提供了其他一些点云分割的方法,如区域生长分割、最小割分割等。这些方法可以根据具体的应用场景选择使用。

一、基于模型的分割原理

PCL中可以基于平面模型,圆柱体模型等对点云进行分割。其基本思想如下:
**1.**基于随机采样一致性(Ransac)从一个样本集S中,随机抽取n个样本,拟合出一个模型(平面模型/圆柱模型等),n是能够初始化模型的最小样本数。
**2.**用上述拟合得到的模型去测试除去n个样本的剩余数据,如果某个点与模型的误差小于某个阈值,则该点适用于这个模型,认为它也是inliners(内点),否则就为outliners(外点)。
**3.**如果模型内的内点达到一定个数,那么估计的模型就足够合理。
**4.**用所有假设的内点去重新执行1,2,估计模型,因为它仅仅被初始的假设内点估计过。
**5.**最后,通过估计内点与模型的错误率来评估模型。
这个过程被重复执行多次,达到设定的迭代次数或者迭代误差后停止。

二、平面模型分割

代码如下:

#include <iostream>
#include <pcl/ModelCoefficients.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/sample_consensus/method_types.h>//模型定义头文件
#include <pcl/sample_consensus/model_types.h>//随机参数估计方法头文件
#include <pcl/segmentation/sac_segmentation.h>//基于采样一致性分割的类的头文件
#include <pcl/visualization/cloud_viewer.h> //显示相关头文件
#include <pcl/features/normal_3d.h>
#include <pcl/filters/extract_indices.h>

int main()
{
   
	
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("./Graphic/sanlunzhu.pcd", *cloud_in);
	std::vector<pcl::PointIndices> clusters; 
	int max_iterations = 500;  //最大迭代次数
	double threshold = 1;   //分割模型迭代时,距离阈值
	float keepRatio = 0.05; //循环分割时,终止比例
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_out(new pcl::PointCloud<pcl::PointXYZRGB>);

	if (cloud_in->empty())
	{
   
		std::cout << "input cloud is empty";
		return -1;
	}

	// 创建平面模型的分割对象,并设置所有参数
	pcl::SACSegmentation<pcl::PointXYZ> seg;
	p
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shanhedian2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值