【问题标题】:Curve fitting unsorted points on a plane曲线拟合平面上的未排序点
【发布时间】:2010-11-02 21:41:23
【问题描述】:

问题:如果平面上的点不是单值点,你如何将它们拟合成曲线?

对于所示示例,如何将曲线(如黑色曲线)拟合到嘈杂的蓝色数据?类似于样条平滑,但我不知道数据的顺序。

首选Matlab,但伪代码也可以。或者指出这个问题的正确术语是什么会很棒。

谢谢

【问题讨论】:

  • 您希望得到什么结果?它是一个单一的方程吗?还是样条?还是别的什么?
  • 最好是单个方程(或者更确切地说:两个 x=f(t) y=f(t)),尽管分段方程也可以。

标签: matlab image-processing curve-fitting spline best-fit-curve


【解决方案1】:

您必须进行多次分段拟合或样条曲线。不要指望任何算法能够一次性完成所有操作。至少可以是三条曲线:第一条到交叉点,循环,然后从交叉点向前返回。

【讨论】:

    【解决方案2】:

    编辑:nvm 误解了这个问题。无论如何我都会把这个答案留在这里。

    也许尝试先找到点的convex hull,然后在平原上拟合凸包

    http://www.cse.unsw.edu.au/~lambert/java/3d/giftwrap.html http://en.wikipedia.org/wiki/Convex_hull_algorithms

    如果您不想要效率,可以使用一些非常简单的实现,例如 O(n^2) 的礼品包装版本 http://en.wikipedia.org/wiki/Gift_wrapping_algorithm

    分而治之的版本是O(nlogn)

    【讨论】:

      【解决方案3】:

      您的数据看起来像是(x,y) 的二维parametric plot,是某个基础参数t 的函数。因此,如果您可以为它们提出合理的模型,则可以对x(t)y(t) 进行least-squares 拟合。您的数据似乎描述了limacon

      【讨论】:

      • 虽然显示的数据确实有一个基础曲线(玫瑰函数),但这只是因为它很容易绘制。我需要为任意数据拟合曲线。
      • 您必须对基础数据有所了解才能进行任何有用的曲线拟合。从你上面的例子中,没有特别的理由(对于一个天真的算法)选择在交叉路口直行,而不是做两个急转弯。您可以将任何曲线拟合到任何点集,这只是“适合度”的问题。您需要一个启发式方法来选择要使用的曲线,然后任何标准误差最小化例程都会将曲线拟合到点。
      • 我认为如果你包含一个正则化项(例如最小化曲率),它会解决交叉点的歧义。
      【解决方案4】:

      如果您没有订单,这个问题真的很难。对一些 (x(t), y(t)) 做最小二乘很容易——假设你知道 t 的顺序。

      您可能需要某种搜索算法。遗传算法可能没问题。

      【讨论】:

        【解决方案5】:

        您可以尝试推断点的顺序,然后应用样条程序。当然,曲线与自身相交的地方存在歧义。

        也许最简单的方法是计算 Delaunay 三角剖分(nlogn 时间),从中近似得出通过点的欧几里得最小距离哈密顿循环。你仍然需要弄清楚“终点”在哪里。然后,您可以从订购中应用样条技术。如需参考,请参阅Finding Hamiltonian Cycles in Delaunay Triangulations Is NP-Complete,或 Reinelt 关于 TSP 启发式的论文,1992,或 Wikipedia 上的 EMST

        第,

        【讨论】:

          【解决方案6】:

          对于使用 B 样条的分段近似,您可以使用 this Matlab 包。它适用于自动和半手动模式。

          【讨论】:

            【解决方案7】:

            我不是这方面的专家,但我找到了this page,谈论曲线重建,这似乎符合您的问题。仍在阅读论文并且很难理解它们,所以我还不能提供解决方案。

            【讨论】:

              猜你喜欢
              • 2017-01-02
              • 2015-03-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-12-16
              • 2016-04-20
              • 2020-06-26
              相关资源
              最近更新 更多