PCL 滤波去除噪点StatisticalOutlierRemoval

1 篇文章 0 订阅

PCL 滤波去除噪点StatisticalOutlierRemoval

        激光雷达扫描周围环境的时候,周围环境材料不同,反射不同,会产生不同密度的点云,同时,如果有测量偏差会导致更加稀疏的异常值出现,从而使点云生成结果质量更差。这样将会导致局部点云特征的估计更加复杂,很可能导致估计出错误值。
       离群点滤波是一种常见的去除噪点的方法。它通过计算一个点的邻域内的点和该点的距离,来判断该点是否为噪点。如果该点距离邻域内的点的平均距离超过一定的阈值,则认为该点为噪点。
       StatisticalOutlierRemoval 是一种基于统计学的离群点滤波方法。它通过计算每个点与其邻域内点的距离的标准差和平均值,来判断该点是否为噪点。如果该点与邻域内点的距离超过一定倍数的标准差,则认为该点为噪点。
实现代码如下:

#include <ros/ros.h> 

#include <iostream>
#include "pcl_ros/point_cloud.h"
#include <sensor_msgs/PointCloud2.h>

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "nav_msgs/OccupancyGrid.h"

#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/common/transforms.h>
#include <visualization_msgs/Marker.h>


#include <string>

int main (int argc, char** argv) 
{ 
  //初始化节点 
  ros::init(argc, argv, "serial_example_node"); 
  //声明节点句柄 
  ros::NodeHandle nh; 
 
  std::string file_path;
  nh.param("file_path", file_path, file_path);


  ros::Publisher cloud_pub = nh.advertise<sensor_msgs::PointCloud2>("/marker/bottom", 1);


  std::string pcd_path = file_path + "map.pcd";


  //加载点云:
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
  if (pcl::io::loadPCDFile<pcl::PointXYZ>(pcd_path.c_str(), *cloud) == -1) 
  {
    std::cout << "Failed to load PCD file.";
    return -1;
  }

  pcl::PointCloud<pcl::PointXYZ>::Ptr filterd_cloud(new pcl::PointCloud<pcl::PointXYZ>);

  std::cout<<"cloud.points.szie() = "<< cloud->points.size()<<std::endl;



  pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
  sor.setInputCloud (cloud);                        //
  sor.setMeanK (50);
  sor.setStddevMulThresh (0.1); 
  sor.filter (*filterd_cloud); 


  //指定循环的频率 
  ros::Rate loop_rate(5); 
  while(ros::ok()) 
  { 

    filterd_cloud->header.frame_id = "map";
    filterd_cloud->header.stamp = ros::Time::now().toSec();
    cloud_pub.publish(filterd_cloud);

  //处理ROS的信息,比如订阅消息,并调用回调函数 
  ros::spinOnce(); 
  loop_rate.sleep(); 
  } 
} 

滤波前:
在这里插入图片描述

滤波后的效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值