一、点云滤波介绍
当激光或结构光设备采集的时候会因为被采集物体的表面材料,环境带来许多的噪声点(也叫做离群点),也会因为点云数据冗余,需要进行降采样,便于后续处理数据量的减少。
本文借助PCL开源库,实现基础的点云滤波算法。
二、具体实现
2.1直通滤波
直通滤波是在给定的通道上(x、y、z等)进行给定区域的滤波,在自动驾驶中一般用来进行地面的滤除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<pcl/filters/passthrough.h>
cout<<"----------直通滤波开始-------------"<<endl; cout<<*cloud<<endl; pcl::PointXYZ minPt, maxPt; pcl::getMinMax3D(*cloud,minPt,maxPt);
pcl::PassThrough<pcl::PointXYZ>PassZ; PassZ.setInputCloud(cloud); PassZ.setFilterFieldName("z"); PassZ.setFilterLimits(minPt.z,0); PassZ.setNegative(true); PassZ.filter(*cloud); cout<<"----------直通滤波完成-------------"<<endl; cout<<*cloud<<endl;
|
2.2统计滤波
统计滤波是针对每一个点进行其领域的统计分析,得到该点到其领域点距离的分布特征,过滤掉不满足阈值的离群点,保留内点。
1 2 3 4 5 6 7 8 9 10 11 12
| #include<pcl/filters/statistical_outlier_removal.h>
cout<<"----------离群点滤波开始-------------"<<endl; cout<<*cloud<<endl; pcl::StatisticalOutlierRemoval<pcl::PointXYZ>sor; sor.setInputCloud(cloud); sor.setMeanK(50); sor.setStddevMulThresh(1.0);
sor.filter(*cloud); cout<<*cloud<<endl; cout<<"----------离群点滤波完成-------------"<<endl;
|
处理图像