首页 > 解决方案 > 在python中将多条线拟合到一组数据点

问题描述

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

问题说明

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

我正在努力使用 RANSAC 来适应多行。有没有人有想法或方法?

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

其他方法是将四边形拟合到这些点。

PS:我知道它只有 4 条线段是必需的

标签: pythonalgorithmgeometrycurve-fittingransac

解决方案


你应该看看PIP (Perceptually Important Points) 算法。我用它来实现一种算法,该算法可以识别来自每日核电站报告的巨大传感器数据集中的异常模式。PIP 算法适用于 2D 上下文中的时间序列,但我认为将代码调整为像您这样的 3D 图形很容易。

不幸的是,我在 Google 上找不到免费且完整的文档,所以为了简单起见:

  • 您在两个最远的点(点 A点 B)之间画一条线
  • 对于图表中的所有点,您可以计算线与该点之间的距离
  • 考虑计算距离最大的点(点 C
  • 如果该距离超过阈值(您可以自己定义),则必须将 AB“切割”为 2 行:AC 和 CB。在另一种情况下,什么也不做。

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

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

下面有图,希望对你有帮助:)

画中画应用示例


推荐阅读