点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 7180|回复: 7

在PCL中使用直通滤波器对点云进行滤波处理

[复制链接]
发表于 2013-1-21 09:52:22 | 显示全部楼层 |阅读模式
本帖最后由 小园赋 于 2013-1-21 17:51 编辑

   
本小节中我们将学习如何对指定的某一维度实行一个简单的滤波,即去掉在用户指定范围内部(或外部)的点。
代码
首先,在PCLPoint Cloud Learning)中国协助发行的书[1]提供光盘的第8章例1文件夹中,打开名为passthrough.cpp的代码文件。
解释分析
在下列代码中,我们利用随机数生成了点云,作为滤波的输入点云数据,并将其打印到标准输出。
// 生成并填充点云数据
cloud->width=5;                                     //设置点云宽度或数量,这里为数量
cloud
->height=1;                                    //设置点云高度或标准其为无序点云
cloud->points.resize(cloud->width*cloud->height);
for(size_t i=0;i<cloud->points.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
::cerr<<"Cloud before filtering: "<<std::endl; //打印所有点到标准错误输出
for(size_t i=0;i<cloud->points.size();++i)
std::cerr<<"    "<<cloud->points[i].x<<" "
<<
cloud->points[i].y<<" "<
<
cloud->points[i].z<<std::endl;
接下来,我们创建了直通滤波器的对象,设立它的参数,滤波字段名被设为Z轴方向,可接受的范围设为是(0.0,1.0),即将点云中所有点的z坐标不在该范围内的点过滤掉或保留,这里是过滤掉,由函数setFilterLimitsNegative设定
pcl::PassThrough<pcl::PointXYZ>pass;     //设置滤波器对象
pass.setInputCloud(cloud);                //设置输入点云
pass.setFilterFieldName("z");             //设置过滤时所需要点云类型的z字段
pass.setFilterLimits(0.0,1.0);           //设置在过滤字段上的范围
//pass.setFilterLimitsNegative (true);     //设置保留范围内的还是过滤掉范围内的
pass.filter(*cloud_filtered);              //执行滤波,保存过滤结果在cloud_filtered
最后我们打印出过滤后的点云数据。
std::cerr<<"Cloud after filtering: "<<std::endl;
for(size_t i=0;i<cloud_filtered->points.size();++i)
std::cerr<<"    "<<cloud_filtered->points[i].x<<" "
<<cloud_filtered->points[i].y<<" "
<<cloud_filtered->points[i].z<<std::endl;
编译和运行程序
利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:
...>passthrough.exe
你会看到类似图1的输出结果,由于是随机数据产生的点云,所以每次运行结果不一样,但都会将点云中z坐标在(0,1)范围外的点过滤掉。
图1 例1过滤点云运行结果
   敬请关注PCLPoint Cloud Learning)中国更多的点云库PCLPoint Cloud Library)相关官方教程。
参考文献:
    1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社 2012-10
回复

使用道具 举报

发表于 2013-7-30 17:32:46 | 显示全部楼层
本帖最后由 你猜 于 2013-7-30 17:34 编辑

在使用 statistical-removal的时候出现C:\Users\qin\Desktop\1.jpg 是什么原因啊 能解释下吗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

发表于 2013-7-31 17:17:38 | 显示全部楼层
你猜 发表于 2013-7-30 17:32
在使用 statistical-removal的时候出现 是什么原因啊 能解释下吗

你的数据是什么样子,怎么获取的,这个提示貌似是在近邻搜索时使用了有序点云对应的类。你用的数据可能是无序点云吧。
回复 支持 反对

使用道具 举报

发表于 2013-8-2 09:12:28 | 显示全部楼层
mypcl 发表于 2013-7-31 17:17
你的数据是什么样子,怎么获取的,这个提示貌似是在近邻搜索时使用了有序点云对应的类。你用的数据可能是 ...

嗯  你说的是正确的 我把点云变成有序点云 结果就正确了 是我在转换成PCD的时候 将点云的高度和宽度设置错了  谢谢你!
回复 支持 反对

使用道具 举报

发表于 2013-8-2 10:48:59 | 显示全部楼层
你猜 发表于 2013-8-2 09:12
嗯  你说的是正确的 我把点云变成有序点云 结果就正确了 是我在转换成PCD的时候 将点云的高度和宽度设置 ...

客气,互相分享学习了。
回复 支持 反对

使用道具 举报

发表于 2014-2-24 15:34:16 | 显示全部楼层
mypcl 发表于 2013-8-2 10:48
客气,互相分享学习了。

你好,请教下,以pcd或者vtk格式存储的点云数据如何滤波,然后三维重建啊,另外,用paraview可以直接滤波和重建么?希望能给予指点:)    谢谢啦
回复 支持 反对

使用道具 举报

发表于 2014-3-6 13:09:16 | 显示全部楼层
weidadeyao 发表于 2014-2-24 15:34
你好,请教下,以pcd或者vtk格式存储的点云数据如何滤波,然后三维重建啊,另外,用paraview可以直接滤波 ...

以pcd或者vtk格式存储的点云数据如何滤波,然后三维重建啊,这个问题,我没看懂什么意思,直接打开pcd或vtk后滤波和重建pcl里都有一些模块,但是否适合你的应用就不好说了。
paraview我没玩过,我感觉应该有吧,你搜搜。
回复 支持 反对

使用道具 举报

发表于 2014-3-10 11:17:04 | 显示全部楼层
mypcl 发表于 2014-3-6 13:09
以pcd或者vtk格式存储的点云数据如何滤波,然后三维重建啊,这个问题,我没看懂什么意思,直接打开pcd或v ...

好的,谢谢你了,我自己查查相关模块试下
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-29 12:16 , Processed in 1.807523 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表