ROS、PCL点云滤波

硬件:Kinect2、UR5。

软件:Ubuntu16.04、ROS kinetic。

未经处理的Kinect点云包含噪声、视野范围太大,所以需要对其进行处理。我采用了直通、半径、体素三种方式。

以下内容纯属个人学习,如有错误,欢迎指正,不胜感激!!

1、PCL滤波学习

官方教程:http://pointclouds.org/documentation/tutorials/index.php#filtering-tutorial

参考教程:https://blog.youkuaiyun.com/fandq1223/article/details/53185053

                  https://blog.youkuaiyun.com/u013019296/article/details/70052319

                  https://blog.youkuaiyun.com/qq_34719188/article/details/79179430

下面是我所使用的三种滤波,仅有滤波器的主体和参数设置部分(ROS下只用到了这些)。

直通滤波

保留或删除某一轴线特定范围内的点,改变视野范围。

  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);           //执行滤波

体素滤波

使用体素网格进行下采样,这么做减少了点云的数量和数据(并没有发现变化)、保留点云表面的形状体征,可以提高配准、表面重建等。

  pcl::VoxelGrid<pcl::PCLPointCloud2> sor;  //创建体素滤波器
  sor.setInputCloud (cloud);                //设置点云输入
  sor.setLeafSize (0.01f, 0.01f, 0.01f);    //设置滤波的体素大小,0.01m立方体
  sor.filter (*cloud_filtered);             //执行滤波

半径滤波

降噪,删除该图像内符合约束条件的点。

    pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;  //创建半径滤波
    outrem.setInputCloud(cloud);                      //设置点云输入
    outrem.setRadiusSearch(0.8);                      //设置查询半径,0.8m,并查询该邻域
    outrem.setMinNeighborsInRadius (2);               //该邻域内点的个数小于XX则删除
    outrem.filter (*cloud_filtered);                  //执行滤波

2、ROS下的PCL

官方教程:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值