【pcl入门教程滤波系列】之StatisticalOutlierRemoval

简介

  激光雷达扫描周围环境时候通常会产生不同点密度的数据集。同时,如果测量偏差(例如抖动、传感器安装位置偏差)将会导致更加稀疏的异常值出现,从而使点云生成结果质量更差。这样将会导致局部点云特征(如曲面法线或曲率变化)的估计更加复杂,很肯能导致估计出错误值。StatisticalOutlierRemoval算法通过对每个点的邻域进行统计分析,删除不符合特定标准的点,能够解决一些异常离群点的干扰。该算法对点云的异常值判断是通过输入点云的所有点到其邻域内距离分布的统计计算。对于每个点,都计算其到所有邻域距离的平均值。

下面是官网给出的统计离群点去除效果图:
在这里插入图片描述

  StatisticalOutlierRemoval算法迭代整个点云两次过程,第一次迭代时候它首先计算每个点与最近 k k k个邻域的平均距离。这里 k k k的值可以通过 s e t M e a n K ( ) setMeanK() setMeanK()进行参数设置。其次,计算出所有这些点距离的均值与标准差,以来确定距离阈值。距离阈值的计算将等于: s t d d e v M u l t ∗ s t d d e v stddevMult * stddev stddevMultstddev。这里面的标准差系数 s t d d e v M u l t stddevMult stddevMult 可以使用函数 s e t S t d e v M u l t h r e s h ( ) setStdevMulthresh() setStdevMulthresh()进行设置。第二次迭代的过程中,如果点的平均邻域距离高于此阈值,则被判断为离群点。否则,为内联点。

代码Demo
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>

int main(int argc, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);

	// Fill in the cloud data
	pcl::PCDReader reader;
	// Replace the path below with the path where you saved your file 
	reader.read<pcl::PointXYZ> ("table_scene_lms400.pcd", *cloud);

	std::cerr << "Cloud before filtering: " << cloud->points.size()<< std::endl;

	// Create the filtering object 
	pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
	sor.setInputCloud(cloud);
	sor.setMeanK(50);
	sor.setStddevMulThresh(1.0);
	sor.filter(*cloud_filtered);

	std::cerr << "Cloud after filtering: " << cloud_filtered->points.size() << std::endl;

	pcl::PCDWriter writer;
	writer.write<pcl::PointXYZ>("table_scene_lms400_inliers.pcd", *cloud_filtered, false);

	sor.setNegative(true);
	sor.filter(*cloud_filtered);
	writer.write<pcl::PointXYZ>("table_scene_lms400_outliers.pcd", *cloud_filtered, false);

	return 0;
}

实验结果

原始点云
内联点
离群点
参考

https://pointclouds.org/documentation/classpcl_1_1_statistical_outlier_removal.html#details

R. B. Rusu, Z. C. Marton, N. Blodow, M. Dolha, and M. Beetz. Towards 3D Point Cloud Based Object Maps for Household Environments Robotics and Autonomous Systems Journal (Special Issue on Semantic Knowledge), 2008.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值