检测点云中的异常点

机器算法验证 异常值 空间的
2022-03-31 11:54:33

我在 Math SE 上问过同样的问题,但建议是这个问题可能属于这里。

方面的点云列表,如何确定异常点?(x,y,z)

动机是这样的。我们需要从这些点云中重建一个地形表面,这些点云是测量员在进行实地测量时获得的。测量员将使用设备并记录足够的地形这些点将被记录到 CAD 程序中。x,y,z

问题是 CAD 文件可能会随着“异常”点的引入而损坏。这些点通常不适合地形表面,并且往往具有错误值(即值超出正常范围)。zz

我知道异常点的定义有点松散;我无法给出一个严格的定义。但是,当我看到图纸时,我知道什么是异常点。

鉴于所有这些约束,是否有任何算法来检测这些异常点?

4个回答

GRASS 中的异常值检测器可用于不规则(“矢量”)点数据的v.outlier

空间异常值检测方法的概述出现在Cheng 和 Li 2004 年的一篇论文中

一种专门用于地形数据的旧方法依赖于“排水强制”(使水源源不断地向下流而不会积聚在水槽中)。这可以找到一些异常值,但可能不是全部。

一种更通用的方法是调整空间可变性的局部指标,例如局部 Moran's I统计量,以识别距离表面“太远”的点。 GeoDa可以计算此类统计数据。

拟合某种平滑函数,可能使用局部加权散点图平滑(LOWESS 或 LOESS),然后寻找的残差(即观察值和拟合值之间的差异)更大的点比预测的标准误差的一些固定倍数。这应该很简单,例如使用标准包中的函数。z(x,y)zRloessstats

您的表面上的点是否相对密集?然后我建议计算每个点周围的球体中的点数。选择球体的半径,使其比“异常”点与常规表面的距离略小 - 可能是它们通常具有的一半。然后丢弃该球体内其他点数非常少的点。(我不知道您的异常值是出现在小组中还是孤立点;这种技术应该适用于任何一种情况。)

如果一个简单的实现选择了正确的点但速度太慢,并且您正在努力想出一个更快的算法来做同样的事情,那么请告诉我们。我相信我们可以想出一些办法:)

我认为这个问题只依赖于变量的异常值z.

测量员扫描网格x,y“行为良好”的点。另一方面z点可能包含异常值(在统计中我们称之为异常值)。

我建议探索z,以及的情节(x,y,z).

从这些图中可以清楚地看出,z发生孤立。

假设我们有一个矩形网格点xk,yk,在网格的每个点我们都有一个值z我们将表示为zk,k.

所以,如果我们认为zk是一个异常点,我们预计它们之间的相关性较低(xk,yk,zk,k)(xk+1,yk,zk+1,k).

一般来说,我们预计两者之间的相关性较低(xk,yk,zk,k)及其邻居N(k,k). 一种测量点之间空间相关性的方法(k,k)其邻域是由下式定义的经验变异函数:

γ^(k,k)=1#N(k,k)(i,j),(p,q)N(k,k)|zi,jzp,q|2.

如果你计算γ^(k,k)对于整个网格,您可以确定经验变异函数中的异常值确实是异常点。

箱线图可用于识别异常值。

使用变异函数是一种确保您实际读取异常点的方法。假设您的测量员正在扫描一个斜坡,那么您会注意到zk,k有很高的价值,也有他们的邻居。仅当点异常时zk,k会有很高的价值。

注意:如果您确定您的测量员正在分析一个相当平坦的表面,请去掉变异函数并制作一个箱线图z,由箱线图识别的任何异常值都是异常点。