PCL 点云滤波介绍(一)

** 由于采集的点云数据存在噪声,这些噪声不利于对点云后续特征的提取,因此需要通过相应的滤波算法去除噪声数据**

一、体素滤波

体素网格滤波用于对稠密点云进行降采样,其首先把 3D 空间划分成多个很小的体素, 然后将每个体素网格的中心点作为该网格内的唯一点,体素网格滤波可以在减少数据量的同时很好的保留原始点云的几何结构。 PCL 点云库中通过 VoxelGrid 函数进行体素网格滤波,使用 setLeafSize 函数来设置网格的大小, leafSize 越大表示每个网格的体积越大,保留的点云数量越少。

cpp 复制代码
#include <pcl/point_types_conversion.h>
#include <pcl/filters/voxel_grid.h>
 
void DownSample_Filter(pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_in,
                       pcl::PointCloud<pcl::PointXYZI>::Ptr &cloud_downsize,
                       double downsize){
   pcl::VoxelGrid<pcl::PointXYZI> downsample_filter;
   downsample_filter.setLeafSize(downsize, downsize, downsize);
   downsample_filter.setDownsampleAllData(true);    //对全字段进行下采样;
   downsample_filter.setInputCloud(cloud_in);
   downsample_filter.filter(*cloud_downsize);
}

二、均匀采样滤波

均匀采样滤波基本上等同于体素滤波器,但是其不改变点的位置。下采样后,其点云分布基本均匀,但是其点云的准确度要好于体素滤波,因为没有移动点的位置。

cpp 复制代码
#include <pcl/keypoints/uniform_sampling.h>
 
void Uniform_Filter(pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_input,
                    pcl::PointCloud<pcl::PointXYZI>::Ptr &result,
                    float radius)
{
  pcl::UniformSampling<pcl::PointXYZI> sor2;    // 创建均匀采样对象
  sor2.setInputCloud(cloud_input);             //设置需要过滤的点云
  sor2.setRadiusSearch(radius);      //设置滤波时创建的体素体积为1cm的立方体,radius=0.01f
  sor2.filter(*result);             //执行滤波处理,储存输出点云
}

三、双边滤波

双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。一定程度上拟补了高斯滤波的缺点。双边滤波对高斯噪声效果比较好。双边滤波从单纯的考虑空间域点的位置的高斯滤波上,又加上一个维度上的权重。在点云处理上,可以叫做为特征域,即当前点的法向量与临近点的法向量。

cpp 复制代码
#include <pcl/filters/fast_bilateral.h>
 
 
void Bilateral_Filter(pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_input,
                      pcl::PointCloud<pcl::PointXYZI>::Ptr &result,
                      float sigma_s, float sigma_R )
{
  pcl::FastBilateralFilter<pcl::PointXYZI> filter;
  filter.setInputCloud(cloud_input);
  filter.setSigmaS(sigma_s);        //0.5 空间邻域/窗口设置双边滤波器使用的高斯标准差
  filter.setSigmaR(sigma_R);         //0.0004 设置高斯的标准偏差,用于控制由于强度差,而使相邻像素的权重降低的程度
  filter.applyFilter(*result);
}
相关推荐
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:[NOIP 2018 普及组] 标题统计
c++·字符串·csp·高频考点·信奥赛·专项训练·标题统计
冯诺依曼的锦鲤9 小时前
从零实现高并发内存池:TCMalloc 核心架构拆解
c++·学习·算法·架构
无忧.芙桃10 小时前
C++IO库的超详细讲解
开发语言·c++
爱看书的小沐10 小时前
【小沐学GIS】基于C++渲染三维飞行仿真Flight Simulation(OpenGL )第十三期
c++·qt·webgl·opengl·飞行仿真·flight
你撅嘴真丑10 小时前
最大质因子序列
c++
努力努力再努力wz10 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
澈20711 小时前
C++ string全面解析:从入门到精通
数据结构·c++·算法
无忧.芙桃11 小时前
现代C++讲解之变量模板,泛型lambda,函数返回类型推导的使用
开发语言·c++·visualstudio
郝学胜-神的一滴11 小时前
[简化版 GAMES 101] 计算机图形学 07:图形学投影完全推导
c++·unity·图形渲染·three.js·unreal engine
zh_xuan11 小时前
api调试工具增加支持输入请求头
c++·libcurl