专栏首页点云PCL久违的小分享(2)

久违的小分享(2)

PCL中基于统计的点云去噪

PCL中进行点云去噪的方法比较多,其中一种基于统计学的方法比较新颖,其函数为StatisticalOutlierRemoval。其原理是将输入数据中每个点到临近点的距离分布情况进行计算,得到各点到它所有临近点的平均距离。假设得到的结果是一个高斯分布,其形状由均值和标准差决定,平均距离在标准范围之外,就被定义为离群点而将其从数据集中删除。 其实现的关键代码进行说明:

pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor; // 创建滤波器对象
sor.setInputCloud(cloud); // 设置需要进行去噪的点云对象
sor.setMeanK(m); // 设置 m 为在进行统计时考虑查询点邻近点数
sor.setStddevMulThresh(1.0); // 设置距离阈值,
 其公式是 mean + global stddev_mult * global stddev
sor.filter(*cloud_filtered); // 执行去噪计算并保存到 cloud_filtered

最后附上完整代码,以及不同参数设置时,滤波效果截图

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/visualization/pcl_visualizer.h>

void main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptrcloud
                          (new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptrcloud_filtered
                          (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("E:\\table_scene_lms400.pcd",*cloud);
pcl::visualization::PCLVisualizerviewer1("Cloud before filtering");
viewer1.setBackgroundColor(0,0, 0);//黑色背景
pcl::visualization::PointCloudColorHandlerCustom
                          <pcl::PointXYZ>before_color(cloud, 0, 255, 0);
viewer1.addPointCloud<pcl::PointXYZ>(cloud,before_color, "before filter");
pcl::StatisticalOutlierRemoval<pcl::PointXYZ>sor;
sor.setInputCloud(cloud);
sor.setMeanK(50);//近邻点个数50
sor.setStddevMulThresh(1);
sor.filter(*cloud_filtered);
pcl::visualization::PCLVisualizerviewer2("After before filtering");
viewer2.setBackgroundColor(0,0, 0);//黑色背景

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>
                          after_color(cloud_filtered, 255, 0, 0);
viewer2.addPointCloud<pcl::PointXYZ>
                          (cloud_filtered,after_color, "after filter");
     
while (!viewer1.wasStopped()|| !viewer2.wasStopped())
      {
             viewer1.spinOnce(1);
             viewer2.spinOnce(1);
      }
}

其中绿色点云是未进行滤波,红色点云是不同参数滤波后的图。

sor.setStddevMulThresh(0.5); 参数设置过小,导致边界点部分被剔除

sor.setStddevMulThresh(1);参数设置恰当,提取效果理想

欢迎投稿分享,联系邮箱或者QQ:920177957@qq.com

亦可以加入QQ群一起交流学习。

本文分享自微信公众号 - 点云PCL(dianyunPCL),作者:武汉大学刘博

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PCL中的区域生长分割(region growing segmentation)

    首先注意一点,这里是region growing segmentation,不是color-based region growing segmentation.

    点云PCL博主
  • PCL法线估计

    平面的法线是垂直于它的单位向量。在点云的表面的法线被定义为垂直于与点云表面相切的平面的向量。表面法线也可以计算点云中一点的法线,被认为是一种十分重要的性质。 法...

    点云PCL博主
  • PCL点云曲面重建(1)

    在测量较小的数据时会产生一些误差,这些误差所造成的不规则数据如果直接拿来曲面重建的话,会使得重建的曲面不光滑或者有漏洞,可以采用对数据重采样来解决这样问题,通过...

    点云PCL博主
  • PCL中的区域生长分割(region growing segmentation)

    首先注意一点,这里是region growing segmentation,不是color-based region growing segmentation.

    点云PCL博主
  • PCL法线估计

    平面的法线是垂直于它的单位向量。在点云的表面的法线被定义为垂直于与点云表面相切的平面的向量。表面法线也可以计算点云中一点的法线,被认为是一种十分重要的性质。 法...

    点云PCL博主
  • PCL中分割方法的介绍(3)

    上两篇介绍了关于欧几里德分割,条件分割,最小分割法等等还有之前就有用RANSAC法的分割方法,这一篇是关于区域生成的分割法,

    点云PCL博主
  • 开启 CDN 后 wordpress 后台打不开的解决办法

    魏艾斯博客www.vpsss.net
  • 从句的分类与做题方法

    白胡杨同学
  • SQL SERVER拼接字符串(字符串中有变量)

      3、若在执行时存在类型转换错误,则应用相应的类型转换函数,对变量进行类型转换(如cast()函数)。

    挽风
  • 最新!八部门联合发布的无人航空器标准出炉

    据工信部官网消息,日前,工业和信息化部联合国家标准化管理委员会、科技部、公安部、农业部、国家体育总局、国家能源局、中国民用航空局等部门发布了《无人驾驶航空器系统...

    机器人网

扫码关注云+社区

领取腾讯云代金券