CloudCompare——点云滤波

目录

  • 一、低通滤波
    • 1.算法原理
    • 2.软件实现
    • 3.结果展示
  • 二、直通滤波
    • 1.算法原理及代码实现
    • 2.软件实现
    • 3.结果展示
  • 三、高斯滤波
    • 1.算法原理及代码实现
    • 2.软件实现
    • 3.结果展示
  • 四、双边滤波
    • 1.算法原理及代码实现
    • 2.软件实现
    • 3.结果展示
  • 五、统计滤波
    • 1.算法原理及代码实现
    • 2.软件实现
    • 3.代码过程
    • 4.结果展示
  • 六、CSF地面滤波
    • 1.算法原理及代码实现
    • 2.软件实现
  • 七、坡度法地面滤波
    • 1.算法原理及代码实现
    • 2.软件实现
      • 2.1 计算坡度
      • 2.2 设置坡度阈值
    • 3.结果展示
      • 3.1 非地面点
      • 3.2 地面点
  • 八、相关链接

一、低通滤波

1.算法原理

  局部范围内拟合平面,设置适当的阈值,把远离平面的点当做离群点删除。由于算法的工作方式,它在平面(墙壁等)上非常强大。但是,特别是如果使用太高的内核半径(或太低的错误阈值),它将“吃掉”角落。为了保存角点或锐边,可以尝试以较小的半径和相对较高的错误阈值重复运行该算法。

2.软件实现

1、找到低通滤波功能
CloudCompare——点云滤波_第1张图片
2、设置相关参数
CloudCompare——点云滤波_第2张图片

  • Points/Radius:选择在每个点周围提取给定数量的邻居(适用于密度恒定的云)或指定球半径(球应该足够大,通常至少可以捕获6个点)
  • Max error:输入最大误差(点到拟合平面的距离),以确定点是否被删除。误差可以是相对的Relative(作为拟合平面上邻域重投影误差的一个因子)或绝对的Absolute
  • Remove isolated points:去除孤立点。如果使用的是②位置的半径搜索,球邻域内少于3个点,则认为该点为孤立点,剔除。

3.结果展示

滤波前
CloudCompare——点云滤波_第3张图片
滤波后
CloudCompare——点云滤波_第4张图片

二、直通滤波

1.算法原理及代码实现

见:[1]

2.软件实现

这里仅以Z方向的滤波操作为例,x、y、xy、xz、yz方向上的直通滤波操作方法相同。

1、选定进行直通滤波的方向

CloudCompare——点云滤波_第5张图片
2、根据高程分布色谱图查看高程分布
CloudCompare——点云滤波_第6张图片
3、设置直通滤波范围阈值:
CloudCompare——点云滤波_第7张图片
CloudCompare——点云滤波_第8张图片

3.结果展示

阈值范围内的点
CloudCompare——点云滤波_第9张图片
阈值范围外的点
CloudCompare——点云滤波_第10张图片

三、高斯滤波

1.算法原理及代码实现

见:[2]

2.软件实现

1、找到高斯滤波功能
CloudCompare——点云滤波_第11张图片
2、设置参数
CloudCompare——点云滤波_第12张图片
   选择一个“内核”大小(实际上是球体的半径,在该半径中,将在每个点周围提取最近的邻居以计算平均值)。滤波器越大越强(计算速度越慢…)。

3.结果展示

滤波前
CloudCompare——点云滤波_第13张图片

滤波后
CloudCompare——点云滤波_第14张图片
差距不够明显??放个明显的图
CloudCompare——点云滤波_第15张图片

四、双边滤波

1.算法原理及代码实现

见:[3]

2.软件实现

1、找到双边滤波功能
CloudCompare——点云滤波_第16张图片
2、设置参数
在这里插入图片描述

  • Spatial sigma:滤波器空间部分的正态分布方差
  • Scalar sigma:滤波器标量部分的正态分布方差

3.结果展示

滤波前
CloudCompare——点云滤波_第17张图片

滤波后
CloudCompare——点云滤波_第18张图片

五、统计滤波

1.算法原理及代码实现

见:[4]

2.软件实现

参数设置
CloudCompare——点云滤波_第19张图片
完整操作
CloudCompare——点云滤波_第20张图片

3.代码过程

该算法在PCL、Open3D、matlab中都有现成调用接口。为什么要再自己写呢?因为我乐意。

CloudCompare——点云滤波_第21张图片

4.结果展示

CloudCompare软件滤波结果
CloudCompare——点云滤波_第22张图片
手写代码运行结果
CloudCompare——点云滤波_第23张图片

六、CSF地面滤波

1.算法原理及代码实现

见:[5]

2.软件实现

1、加载点云数据,点击Plugins中的CSF Filter功能
CloudCompare——点云滤波_第24张图片
2、弹出如下窗口:
CloudCompare——点云滤波_第25张图片
CloudCompare——点云滤波_第26张图片
  图中:Cloth resolution:是指用于覆盖地形的布的网格大小(单位与点云的单位相同)。你设置的布分辨率越大,你得到的DTM就越粗糙;Max iterations:是指地形仿真的最大迭代次数。500对大多数场景来说都足够了。Classification threshold:是指根据点与模拟地形之间的距离,将点云划分为地面和非地面部分的阈值。0.5适用于大多数场景
  这里的网格分辨率和距离阈值最小只能设置为10cm,地面10cm的范围默认是地面点,精确度不如自己代码实现中的高。
3、最后得到的结果:
CloudCompare——点云滤波_第27张图片

七、坡度法地面滤波

1.算法原理及代码实现

见:[8] [9] [10]

2.软件实现

2.1 计算坡度

  CloudCompare中的Gradient功能用于计算标量域的梯度/坡度/倾斜度。当标量域设置为高程的时候,计算的就是坡度。操作如下:
1、设置待计算的标量域为:高程
CloudCompare——点云滤波_第28张图片

2、计算坡度
CloudCompare——点云滤波_第29张图片
这里会蹦出一个对话框:“Gradient字段是要用(欧几里德)距离进行计算吗?”。
CloudCompare——点云滤波_第30张图片
当前标量域是点云实体的高程,因此选"yes"

2.2 设置坡度阈值

进行如下操作,可看到点云中每个点的坡度分布:
CloudCompare——点云滤波_第31张图片
根据右侧的坡度值分布色谱图,设置阈值:
CloudCompare——点云滤波_第32张图片
坡度阈值设置为:0.1,点击Split即可完成地面点与非地面点的分割。
CloudCompare——点云滤波_第33张图片

3.结果展示

3.1 非地面点

CloudCompare——点云滤波_第34张图片

3.2 地面点

CloudCompare——点云滤波_第35张图片

八、相关链接

[1] PCL 直通滤波器
[2] PCL 高斯滤波
[3] PCL 双边滤波
[4] PCL 统计滤波器
[5] Open3D 实现CSF布料模拟算法
[6] python代码:Open3D 实现坡度滤波算法
[7] C++代码:点云地面滤波实验之坡度法(实验三)

你可能感兴趣的:(CloudCompare,计算机视觉)