0
点赞
收藏
分享

微信扫一扫

点云滤波

简述

点云滤波方法及效果

内容

滤波原因

点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等

一般下面这几种情况需要进行点云滤波处理:

(1)点云数据密度不规则需要平滑

(2)因为遮挡等问题造成离群点需要去除

(3)大量数据需要下采样

(4)噪声数据需要去除


滤波方法

PCL滤波算法的实现是通过滤波器类来完成的,需要实现滤波功能时则新建一个滤波器对象并设置参数,从而保证可以针对不同的滤波任务,使用不同参数的滤波器对点云进行处理

直通滤波器

// Create the filtering object

	pcl::PassThrough<pcl::PointXYZ> pass;

	pass.setInputCloud(point_cloud_ptr);

	pass.setFilterFieldName("z");

	pass.setFilterLimits(-2, 0);

	//pass.setFilterLimitsNegative(true);

	pass.filter(*cloud_filtered);

体素滤波器

// 创建过滤对象  
	pcl::VoxelGrid<pcl::PointXYZ> sor;

	sor.setInputCloud(point_cloud_ptr);

	sor.setDownsampleAllData(1);

	sor.setLeafSize(0.02f, 0.02f, 0.02f);

	sor.filter(*cloud_filtered1);

统计滤波器

// 创建过滤对象  
	pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor1;

	sor1.setInputCloud(point_cloud_ptr);

	sor1.setMeanK(50);

	sor1.setStddevMulThresh(1.0);

	sor1.filter(*cloud_filtered2);

半径滤波器

// 构建过滤器  
	pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;

	outrem.setInputCloud(point_cloud_ptr);

	outrem.setRadiusSearch(0.01);

	outrem.setMinNeighborsInRadius(1);

	// apply filter  
	outrem.filter(*cloud_filtered3);

不同的滤波器在滤波过程中,总是先创建一个对象,再设置对象参数,最后调用滤波函数对点云进行处理(点云为智能指针指向的一块区域)

滤波效果

点云滤波_点云滤波

效果图依次是点云原始数据、直通滤波、体素滤波、统计滤波、半径滤波

举报

相关推荐

0 条评论