欢迎光临
我们一直在努力

Wolform Mathematica 点云统计滤波去噪全解析

MMA点云进阶篇——点云去噪篇


目录

MMA点云进阶篇

前言

一、什么是统计滤波?

二、MMA实现步骤

1.计算“定义距离”

2.构建筛选原则

总结


前言

三维点云中的去噪算法层出不穷,本节介绍基础去噪算法,统计滤波去噪算法。

一、什么是统计滤波?

统计滤波(SOR),最简单理解为在点云中依据统计原理,识别噪声点。具体实现思想可以参考 "3σ原则",其表示当数据分布满足正态分布,在μ-3*σ和μ+3*σ之间的区域内的点概率为99.73%,在如此高的概率下,落在双边0.135%区域内的点可以判别为异常值。

但是,点云数据量很大,很密,点与点之间的“定义距离”应该会满足一个偏态分布,通常右偏,定义的距离集中分布在小值。而这个定义距离,通常选择为某一点周围K个点的平均距离。可以认为,噪声点就是哪些在μ+n*σ和之外区间的点,其中n自行设定。

二、MMA实现步骤

1.计算“定义距离”

代码如下(示例),点云数据的读取可以参考上篇文章

Nea21 = Nearest[sampledPoints, sampledPoints, 21];

Nea20 = Rest /@ Nea21;(*包含自身,去掉第一个,自身到自身的距离是0*)

averages20 =
Table[Mean[
EuclideanDistance[sampledPoints[[i]], #] & /@ Nea20[[i]]], {i,
Length[sampledPoints]}];

上述为MMA中的代码,需要注意的是,Nearset函数选择的方法包含:  "Octree"、"KDtree" 和 "Scan"。默认就自动优化选择了,一般默认就可以。

2.构建筛选原则

代码如下(示例)

Ave = Mean[averages20];

Std = StandardDeviation[averages20];

Distt = Ave + Std *5; (*定义距离阀值*)

mask = Thread[avgDistPerPoint <= Distt];

FilterSampledpoints = Pick[sampledPoints, mask];

代码计算完平均距离和标准差之后,定义筛选的阀值 Distt = Ave + Std *5。

下图,可视化了定义距离的分布图,显而易见,偏态分布,右边的尾部就可能是噪声点存在的区域,并且可以得知,n越大,被判别为噪声点的数量就越大。


总结

最后,完成了噪声点的识别与筛除,该方法简单,高效,但是存在两个大问题,第一,如果点云的密度分布尤其不均匀,会发生显著的过去噪或者去不掉噪声;第二,n的设置完全依靠人为设定。因此,要想通过SOR完全去除噪声点,几乎不可能,但作为如此简单和高效的方法,仍被广泛使用,尤其是在大量数据面前。


以上就是本文全部内容,后面将继续探索MMA在三维点云领域的应用,为MMA的中文资料继续添砖加瓦。

赞(0)
未经允许不得转载:171主机测评 » Wolform Mathematica 点云统计滤波去噪全解析
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址