将多行拟合到python中的一组数据点

问题描述

我有一组传感器数据点,并且在下图中,我试图拟合4条线以形成四边形。我的意图是获取四边形的顶点。

Illustration of the problem

RANSAC将有助于确定线,但是在该点云上的多条线具有挑战性。

我正在努力使用RANSAC来容纳多行。有人有想法或办法吗?

在这种情况下,除了RANSAC之外,还有什么好方法可以获取多行?

其他方法是使四边形适合这些点。

PS:我知道它仅需要4个线段

解决方法

您应该查看 PIP(感知重要点)算法。我用它来实现一种算法,该算法可以识别来自每日核电站报告的巨大传感器数据集中的异常模式。 PIP算法适用于2D上下文中的时间序列,但是我认为很容易将代码修改为适合您的3D图形。

不幸的是,我在Google上找不到免费且完整的文档,因此简单起见:

  • 您在两个最远的点(点A 点B )之间划了一条线
  • 对于图形中的所有点,您都可以计算线与该点之间的距离
  • 考虑具有最大计算距离的点(点C
  • 如果该距离超过阈值(您可以定义自己),则必须将AB分为两行:AC和CB。在其他情况下,什么也不做。

然后使用AC和CB子线重复该操作。您可以完美地自定义定义最大子行数的算法。

在标准情况下,算法复杂度为 O(n.ln(n)),在最坏情况下,算法复杂度为 O(n ^ 2)(噪声图)

下面有一个插图,希望对您有所帮助:)

PIP application example

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...