点云数据是三维空间的离散数据,不是类似于PLY格式的点线概念,因此可以使用所谓的“滤波方法”。点云数据若非看成深度map数据,则不再适用于使用二维图形的核卷积方法。此外,滤波方法与点云存储格式密切相关,点云存储格式一般为八叉树,而2.5D图像存储格式可以用深度Map形式,对应了不同的滤波方式。

此外,点云划分为有序点云和无序点云之后,又对应了不同的滤波方法。

    (1) 如果点云是有序的,通过 pcl: : Organ izedDatalnd ex 使用有序搜索方法 。  (2) 如果点云是无序的,通过 pcl : : KdTreeFLANN 使用通用的 Kd 树  //有序点云  //Example:  //  cloud.width = 640; // Image-like organized structure, with 640 rows and 480 columns,  //  cloud.height = 480; // thus 640*480=307200 points total in the dataset  //无序点云  //Example:  //  cloud.width = 307200;  //  cloud.height = 1; // unorganized point cloud dataset with 307200 points  

实际意义上的点云滤波,是以三维点集的思维方面寻找方法,因此点云滤波依赖于几何信息,而不是数值关系。在滤波思想上,本质上三维点云X、Y、Z的思想方法权重应该是一致的。

0.何为双边滤波器

双边滤波,Bilateral filter。是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。在差值较高的地方降低权重,此时可以明显包住边缘。

双边滤波器的好处是可以做边缘保存edge preserving,一般过去用的维纳滤波或者高斯滤波去降噪,都会较明显的模糊边缘,对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigma-d,它是基于空间分布的高斯滤波函数,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。

但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。

参考这个:双边滤波器.....

即滤波函数在一个梯度计算时候添加一个判断条件的,复合函数...

1.PCL的双边滤波

类似于灰度图双边滤波的效果,点云双边滤波仍然具有保边滤波功能

PCL示例代码:

void Filters::bilateralFilter(pcl::PCLPointCloud2::ConstPtr input, pcl::PCLPointCloud2& output,float sigma_s, float sigma_r)
{// Convert data to PointCloud<T>pcl::PointCloud<pcl::PointXYZ>::Ptr xyz (new pcl::PointCloud<pcl::PointXYZ>);fromPCLPointCloud2 (*input, *xyz);// Apply the filterpcl::FastBilateralFilter<pcl::PointXYZ> fbf;fbf.setInputCloud (xyz);fbf.setSigmaS (sigma_s);fbf.setSigmaR (sigma_r);pcl::PointCloud<pcl::PointXYZ> xyz_filtered;fbf.filter (xyz_filtered);// Convert data backpcl::PCLPointCloud2 output_xyz;toPCLPointCloud2 (xyz_filtered, output_xyz);pcl::concatenateFields (*input, output_xyz, output);
}

此外,双边滤波依然有平面平滑的作用。因此,对于使用平面拟合获取点云稠密法线,还是有很大帮助的。

2.PCL的密度聚类

PCL的噪点大多分布比较随机,相对对于正确点云数据密度较低,调至一个合适的参数,可以用密度方法去除噪点(也叫离群点)。

缺点:对于相对于相机倾斜度极高的斜面,正确点云墙的密度也非常稀疏,因此在这种情况出现时,需要其他的判断方法。

PCL示例代码:

2.1基于统计密度的聚类

  pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;sor.setInputCloud (cloud);sor.setMeanK (50);sor.setStddevMulThresh (1.0);sor.filter (*cloud_filtered);

统计滤波器StatisticalOutlierRemoval用于去除明显离群点(离群点往往由测量噪声引入)。

每个点都表达一定信息量,某个区域点越密集则可能信息量越大。噪声信息属于无用信息,信息量较小。所以离群点表达的信息可以忽略不计。考虑到离群点的特征,则可以定义某处点云小于某个密度,既点云无效。计算每个点到其最近的k个点平均距离。则点云中所有点的距离应构成高斯分布。给定均值与方差,可剔除离群点。

2.2基于半径的聚类

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);pcl::RadiusOutlierRemoval<pcl::PointXYZ> outrem;// build the filteroutrem.setInputCloud(cloud);outrem.setRadiusSearch(0.8);outrem.setMinNeighborsInRadius (2);// apply filteroutrem.filter (*cloud_filtered);

基于半径的聚类,指明了使用半径统计的方法

3.其他方法:不管是密度聚类还是双边聚类,都无法避免超斜平面的点云稀疏性问题。

最好的方法,是在点云滤波之前,使用平面拟合和曲面拟合的方法,先找出平面和曲面,保留平面点和曲面点集合,再进行滤波。

三维重建8:点云图像的滤波方法相关推荐

  1. 三维重建9:点云图像的滤波方法小结

    摘抄下来,如有不适,请告知删除. 原文链接:PCL-低层次视觉-点云滤波(初步处理) 若非涉及到数据精度级别的底层处理,使用离群点去除算法就可以了. 点云滤波的概念 点云滤波是点云处理的基本步骤,也是 ...

  2. 三维点云体素滤波python_三维重建9:点云图像的滤波方法小结

    摘抄下来,如有不适,请告知删除. 若非涉及到数据精度级别的底层处理,使用离群点去除算法就可以了. 点云滤波的概念 点云滤波是点云处理的基本步骤,也是进行 high level 三维图像处理之前必须要进 ...

  3. 三维重建面试0:*SLAM滤波方法的串联综述

    知乎上的提问,高翔作了回答:能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 写的比较通顺,抄之.如有异议,请拜访原文.如有侵权,请联系删除. 我怎么会写得那么长--如果您有兴趣可以和我 ...

  4. 点云平面提取_基于LiDAR点云数据滤波方法

    基于LiDAR点云数据滤波方法 机载激光雷达所获取的数据被称为"点云(points cloud)"它在三维空间中呈现出随机分布的形状.在点云中,有些点属于真实的地形表面的点,有些点 ...

  5. (转)ADC的滤波方法

    ADC转换-10种软件滤波技术分享(I) http://www.cnblogs.com/chenxukai/archive/2010/07/31/1789704.html 嚯嚯,上次记得做ADC转换的 ...

  6. 单片机 10种软件滤波方法的示例程序

    单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /*  A值可根据实际情况调整     v ...

  7. Opencv中常见的滤波方法

    Opencv中常见的滤波方法 - 随性岁分享 - 博客园 opencv:基于opencv的五种滤波方法_M海洋的博客-CSDN博客_opencv滤波 OpenCV3学习(4.2)--图像常用滤波方法( ...

  8. TIP 2019开源论文:基于深度学习的HEVC多帧环路滤波方法

    作者丨李天一 学校丨北京航空航天大学博士生 研究方向丨视频编码与深度学习 本文概述的是作者近期在 IEEE TIP 期刊上发表的论文:A Deep Learning Approach for Mult ...

  9. OpenCV3学习(4.2)——图像常用滤波方法(方框、均值、高斯、中值、双边)

    滤波处理分为两大类:线性滤波和非线性滤波.OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法. 线性滤波: 1.方框滤波:模糊图像 2.均值滤波:模糊图像 3.高斯滤波:信号的平 ...

最新文章

  1. Firefox 多版本共存
  2. c++ 使用vs2010调用 win32api
  3. java怎么防止表单重复提交_如何防止表单重复提交
  4. 【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​
  5. mvcc原理_MVCC原理探究及MySQL源码实现分析
  6. php匹配中文最准确的正则表达式
  7. SpringBoot中yml配置文件:定义list集合、数组及注意事项
  8. 中缀变后缀(nyoj)
  9. RCNN,fast R-CNN,faster R-CNN
  10. 响应式高端大气的模板源码图库素材资源下载平台网站源码,无加密无后门
  11. Office文档修复介绍之:laola文件格式介绍
  12. MATLAB实现追赶法
  13. Flash builder 4.6下载以及安装
  14. 【ember zigbee】第三章:ug103-02-fundamentals-zigbee 学习笔记(中)
  15. php隐藏notice错误,php屏蔽notice错误
  16. linux如何打印脚本运行进度,linux-如何在使用systemd引导期间最后运行并打印我的脚本输出?...
  17. python 对比两张图片是否相同
  18. css样式单位px,em,pt,ex,pc,in,mm,cm详解
  19. VM虚拟机Ubuntu21.04 升级为22.04
  20. [4G5G专题-90]:流程 - 4G LTE 终端在RRC IDLE状态下的行为

热门文章

  1. JVM实用参数(二)参数分类和即时(JIT)编译器诊断
  2. (58) 在计算字段提供搜索功能
  3. OneAPM CI与阿里云容器服务集成
  4. Eclipse创建java webproject配置Tomacat和JDK
  5. 收藏:软件开发、软件收藏
  6. Skipping failed optional dependency /chokidar/fsevents
  7. 源码分析系列1:HashMap源码分析(基于JDK1.8)
  8. linux命令crontab
  9. 【Python自动化运维之路Day2】
  10. Objective-C之category