【问题标题】:center of a cluster of points and track shape点簇的中心和轨迹形状
【发布时间】:2014-03-24 19:47:00
【问题描述】:

我有一些看起来像这样的点。

这些点形成的轨迹可以是圆形或椭圆形。很明显,上面两张图中圆形轨道的中心是不同的。

我怎样才能找到这些轨道的中心点(圆形/椭圆形)?我想找到作为中心的 (x,y) 坐标,不必一定是点在绘制的数据集中。即,我不想要 medoid。

编辑:另外,我是否可以找到一个包含大部分这些点的圆/椭圆方程?在椭圆轨道中,我添加了一个包含这些点的椭圆在轨道上。这些值是通过反复试验计算的。中心也是通过观察该图来计算的。如何以编程方式执行此操作?

【问题讨论】:

  • 我认为只是取 x 和 y 坐标的平均值不足以满足您的目的?
  • 是的。仅仅取平均值并不总是给我准确的中心。
  • 我猜你想要一些方法来让你的点集适合椭圆。也许您可以拟合 z = p(x,y) 其中 p 是二次多项式,z 是您使用 OLS 将所有数据点设置为 0 的变量?那么得到椭圆的中心应该是微不足道的。
  • 对不起,你能详细说明一下吗?我没听懂。
  • 对不起,更多的是半生不熟的想法。我在想您可以尝试使用 z = A1*x^2 +A2*y^2 + A3 x*y + A4 x + A5 y + A6 的形式,其中 z 是您设置为 0 的“假”变量对于所有数据点。这为您提供了一个椭圆方程,您可以将其中心坐标写为 Ai 系数的某个函数。但不确定它在实践中的效果如何。

标签: center computational-geometry point centroid


【解决方案1】:

Smallest circle problem,这是smallest ellipse problem 上的一篇论文(可下载 PDF)。两者都有 O(N) 算法,并且应该能够提供可以从中获得中心的圆和区域的公式。然而,他们专注于封闭所有的点。要解决该问题,您需要删除一些边界点,您也应该从算法中获得这些边界点。不幸的是,什么是足够好的解决方案取决于您。

一个快速简单的随机解决方案是:

  1. 将点集随机分成 k 组,每组 N/k 个点。
  2. 为每个集合运行最小圆/椭圆算法
  3. 对于 k 个集合中的每一个,选择至少 1 个但不再有 m 个边界点以从主要点集中移除。
  4. 返回步骤 1,t 次。
  5. 返回圆/椭圆算法对剩余点的结果。

该算法每次通过都会删除 k 和 mk 个边界点,代价为 O(N)。出于您的目的,您可能希望删除一定百分比的边界点,1-25% 似乎是一个很好的起点。此解决方案假定 k 与 N 相比非常小,否则您将删除太多点。

如果您想重复从最小椭圆中删除一个或全部边界点,重新计算最小椭圆,然后再次删除边界点,则较慢但可能更好的算法很有用。

您可以通过让父节点成为其子节点的最小封闭椭圆的边界点(存储为一组以便于更快移除的点)来实现这一点。边界点的最大数量不应超过 k(我认为椭圆为 9,而圆形为 3)。因此,在 O(k log N) 处从数据结构中删除一个点,因为它需要重新计算最小的圆,对于每个受影响的父级 O(log N),它是 O(k)。所以从数据结构中移除 m 个点应该是 O(mk log N)。您可能还需要考虑计算每个删除点的椭圆面积,并以 O(Nk log N) 的成本删除每个点,直到只剩下三个点。然后,您可以分析区域数据以确定应该使用什么椭圆。一个简单的结果是简单地使用面积最接近创建的所有椭圆的平均面积的椭圆,但可能并不完全符合您的要求。它也可能太慢了,在这种情况下,我建议使用更快的算法。

【讨论】:

    【解决方案2】:

    这看起来像一个稳健椭圆拟合的实例。检查本文:异常值消除 稳健的椭圆和椭球拟合http://arxiv.org/pdf/0910.4610.pdf

    惯性椭圆(惯性椭圆http://en.wikipedia.org/wiki/Moment_of_inertia#Inertia_ellipsoid 的二维版本)提供了第一个粗略且简单的解决方案。它的中心只是质心,轴由 2x2 惯性矩阵的特征向量/值给出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多