python - 在python中将多条线拟合到一组数据点
问题描述
我有一组传感器数据点,我试图在下图中拟合 4 条线以形成一个四边形。我的目的是获得四边形的顶点。
RANSAC 将有助于确定线,但该点云上的多条线具有挑战性。
我正在努力使用 RANSAC 来适应多行。有没有人有想法或方法?
在这种情况下,除了 RANSAC 之外,还有什么好方法可以获取多条线路吗?
其他方法是将四边形拟合到这些点。
PS:我知道它只有 4 条线段是必需的。
解决方案
你应该看看PIP (Perceptually Important Points) 算法。我用它来实现一种算法,该算法可以识别来自每日核电站报告的巨大传感器数据集中的异常模式。PIP 算法适用于 2D 上下文中的时间序列,但我认为将代码调整为像您这样的 3D 图形很容易。
不幸的是,我在 Google 上找不到免费且完整的文档,所以为了简单起见:
- 您在两个最远的点(点 A和点 B)之间画一条线
- 对于图表中的所有点,您可以计算线与该点之间的距离
- 考虑计算距离最大的点(点 C)
- 如果该距离超过阈值(您可以自己定义),则必须将 AB“切割”为 2 行:AC 和 CB。在另一种情况下,什么也不做。
然后使用 AC 和 CB 子线重复操作。您可以完美地自定义定义最大子行数的算法。
算法复杂度在标准情况下为O(n.ln(n)) ,在最坏情况下为O(n^2)(噪声图)。
下面有图,希望对你有帮助:)
推荐阅读
- sql - 尝试在具有到期日期的 TSQL 中进行分析
- python - 制作 python UI - Tkinter 是最佳选择吗?
- postgresql - 在 Windows (PostGIS) 上启动 shp2pgsql-gui 时找不到 libsqlite3-0.dll 错误
- git - Fedora 33 git pull 或 clone 不再工作和/或 ssh 密钥不再识别
- android - 使用 5 公里附近的查询(经度和纬度)查询 Firebase 实时数据库
- spring-boot - 为什么我会收到“权限被拒绝”?
- android - 在 logcat / chatty 相同的 1 行中将我的应用程序列入白名单
- jestjs - 开玩笑忽略赛普拉斯测试
- javascript - 在没有 makeStyles 的材料 ui 中使用来自主题的自定义样式
- c# - 如何自动完成 Visual Studio 代码?