使用直通滤波器进行点云的滤波

在获取点云数据时,难免会产生一些噪声。在点云处理流程中滤波处理作为预处理的第一步,对后续的影响比较大,只有在滤波预处理中将噪声点、立群点、孔洞、数据压缩等按照后续处理定制,才能更好的进行配准、特征提取、曲面重建、可视化等后续应用处理,PCL中点云滤波模块提供了很多灵活实用的滤波处理算法,例如:双边滤波,高斯滤波,条件滤波,直通滤波,基于随机采样一致性滤波等等。

PCL中总结了几种需要进行点云滤波处理情况,这几种情况分别如下:
(1)点云数据密度不规则需要平滑
(2)因为遮挡等问题造成了离群点需要去除
(3)大量数据需要下采样
(4)噪声数据需要出去
对应的方案如下:
(1)按照给定的规则限制过滤去除点
(2)通过常用滤波算法修改点的部分属性
(3)对数据进行下采样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.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>);

//生成并填充点云
cloud->width=10;
cloud->height=1;
cloud->resize(cloud->width*cloud->height);

for (size_t i = 0; i < cloud->size(); ++i) {
cloud->points[i].x=1024*rand()/(RAND_MAX+1.0f);
cloud->points[i].y=1024*rand()/(RAND_MAX+1.0f);
cloud->points[i].z=1024*rand()/(RAND_MAX+1.0f);
}
std::cout<<"cloud point before filtering"<<std::endl;
for (size_t i = 0; i < cloud->size(); ++i)
std::cout<<" "<<cloud->points[i].x
<<" "<<cloud->points[i].y
<<" "<<cloud->points[i].z
<<std::endl;
/****************************************************************************************
创建直通滤波器对象,设定参数,滤波字段设置为z轴方向,可接受的范围为(0.0,1.0)即将点云中所有点的z轴坐标不在
该范围内的点过滤掉或保存,这里是过滤掉。如果要保存范围外的点,删除范围内的点,则使用setFilterLimitsNegative
设定,为true时,为删除,为false时,为保留,默认为false
*****************************************************************************************/
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud(cloud);
pass.setFilterFieldName("z");
pass.setFilterLimits(0.0,1.0);
pass.setFilterLimitsNegative(false);
pass.filter(*cloud_filtered);

std::cout<<"cloud point after filtering"<<std::endl;
for (size_t i = 0; i < cloud_filtered->size(); ++i)
std::cout<<" "<<cloud_filtered->points[i].x
<<" "<<cloud_filtered->points[i].y
<<" "<<cloud_filtered->points[i].z
<<std::endl;
return 0;
}

保留范围点的结果

删除范围点的结果

感谢您的阅读。 🙏 关于转载请看这里