目录
- 一、低通滤波
- 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、找到低通滤波功能
2、设置相关参数
-
Points/Radius
:选择在每个点周围提取给定数量的邻居(适用于密度恒定的云)或指定球半径(球应该足够大,通常至少可以捕获6个点) -
Max error
:输入最大误差(点到拟合平面的距离),以确定点是否被删除。误差可以是相对的Relative
(作为拟合平面上邻域重投影误差的一个因子)或绝对的Absolute
。 -
Remove isolated points
:去除孤立点。如果使用的是②位置的半径搜索,球邻域内少于3个点,则认为该点为孤立点,剔除。
3.结果展示
滤波前
滤波后
二、直通滤波
1.算法原理及代码实现
见:[1]
2.软件实现
这里仅以Z方向的滤波操作为例,x、y、xy、xz、yz方向上的直通滤波操作方法相同。
1、选定进行直通滤波的方向
2、根据高程分布色谱图查看高程分布
3、设置直通滤波范围阈值:
3.结果展示
阈值范围内的点
阈值范围外的点
三、高斯滤波
1.算法原理及代码实现
见:[2]
2.软件实现
1、找到高斯滤波功能
2、设置参数
选择一个“内核”大小(实际上是球体的半径,在该半径中,将在每个点周围提取最近的邻居以计算平均值)。滤波器越大越强(计算速度越慢…)。
3.结果展示
滤波前
滤波后
差距不够明显??放个明显的图
四、双边滤波
1.算法原理及代码实现
见:[3]
2.软件实现
1、找到双边滤波功能
2、设置参数
-
Spatial sigma
:滤波器空间部分的正态分布方差 -
Scalar sigma
:滤波器标量部分的正态分布方差
3.结果展示
滤波前
滤波后
五、统计滤波
1.算法原理及代码实现
见:[4]
2.软件实现
参数设置
完整操作
3.代码过程
该算法在PCL、Open3D、matlab中都有现成调用接口。为什么要再自己写呢?因为我乐意。
4.结果展示
CloudCompare软件滤波结果
手写代码运行结果
六、CSF地面滤波
1.算法原理及代码实现
见:[5]
2.软件实现
1、加载点云数据,点击Plugins中的CSF Filter功能
2、弹出如下窗口:
图中:Cloth resolution:是指用于覆盖地形的布的网格大小(单位与点云的单位相同)。你设置的布分辨率越大,你得到的DTM就越粗糙;Max iterations:是指地形仿真的最大迭代次数。500对大多数场景来说都足够了。Classification threshold:是指根据点与模拟地形之间的距离,将点云划分为地面和非地面部分的阈值。0.5适用于大多数场景
这里的网格分辨率和距离阈值最小只能设置为10cm,地面10cm的范围默认是地面点,精确度不如自己代码实现中的高。
3、最后得到的结果:
七、坡度法地面滤波
1.算法原理及代码实现
见:[8] [9] [10]
2.软件实现
2.1 计算坡度
Gradient功能用于计算标量域的梯度/坡度/倾斜度。当标量域设置为高程的时候,计算的就是坡度。操作如下:
1、设置待计算的标量域为:高程
2、计算坡度
这里会蹦出一个对话框:“Gradient字段是要用(欧几里德)距离进行计算吗?”。
当前标量域是点云实体的高程,因此选"yes"
。
2.2 设置坡度阈值
进行如下操作,可看到点云中每个点的坡度分布:
根据右侧的坡度值分布色谱图,设置阈值:
坡度阈值设置为:0.1,点击Split
即可完成地面点与非地面点的分割。
3.结果展示
3.1 非地面点
3.2 地面点
八、相关链接
[1] PCL 直通滤波器 [2] PCL 高斯滤波 [3] PCL 双边滤波 [4] PCL 统计滤波器 [5] Open3D 实现CSF布料模拟算法 [6] python代码:Open3D 实现坡度滤波算法 [7] C++代码:点云地面滤波实验之坡度法(实验三)