0

这是交易。我有多个点(X,Y)形成“椭圆形”形状。

我想评估/拟合可能的“最佳”椭圆并获得它的属性(a、b、F1、F2),或者只是椭圆的中心。

任何想法/线索将不胜感激。

吉拉德。

4

5 回答 5

3

有一个 Matlab 函数fit_ellipse可以完成这项工作。还有这篇关于椭圆正交距离拟合方法的论文。对正交椭圆拟合的网络搜索也可能会出现许多其他资源。

于 2012-02-12T09:02:02.170 回答
2

椭圆拟合方法由:

ZL Szpak、W. Chojnacki 和 A. van den Hengel。 保证椭圆拟合,具有置信区域和中心、轴和方向的不确定性度量。 J.数学。影像视觉,2015。

您可能会感兴趣。它们提供代数和几何椭圆参数的估计,以及表示参数估计不确定性的协方差矩阵。它们还提供了一种计算与估计相关的平面 95% 置信区域的方法,允许人们可视化椭圆拟合中的不确定性。

作者网站 ( http://cs.adelaide.edu.au/~wojtek/publicationsWC.html )上提供了该论文的预印本。该方法的 MATLAB 实现也可供下载: https ://sites.google.com/site/szpakz/source-code/guaranteed-ellipse-fitting-with-a-confidence-region-and-an-uncertainty-测量中心轴和方向

于 2014-09-25T14:19:52.577 回答
0

我将解释我将如何解决这个问题。我建议采用爬山的方法。首先计算点的重心作为起点,并以某种方式为 a 和 b 选择两个值(可能是任意正值)。您需要有一个 fit 函数,我建议它返回位于给定椭圆上的点数(足够接近):

int fit(x, y, a, b)
  int res := 0
  for point in points
    if point_almost_on_ellipse(x, y, a, b, point)
      res = res + 1
    end_if
  end_for
  return res

现在从一些step. 我会选择一个足够大的值,以确保椭圆的最佳中心永远不会step远离第一点。选择这么大的值是不必要的,但算法中最慢的部分是接近最佳中心所需的时间,所以我认为越大的值越好。

所以现在我们有了一些初始点(xy),一些ab的初始值以及一个初始步长。如果有比它更好的邻居,该算法迭代地选择当前点的最佳邻居,否则减少两次步长。这里的“最佳”是指使用 fit 函数。并且一个位置由四个值(x,y,a,b)定义,它的邻居是8:(x+-step,y,a,b),(x,y+-step,a,b),(x , y, a+-step, b), (x, y, a, b+-step)(如果结果不够好,您还可以通过对角线添加更多邻居 - 例如 (x+-step, y+-step, a, b) 等等)。这是你如何做到的

neighbours = [[-1, 0, 0, 0], [1, 0, 0, 0], [0, -1, 0, 0], [0, 1, 0, 0],
              [0, 0, -1, 0], [0, 0, 1, 0], [0, 0, 0, -1], [0, 0, 0, 1]]
iterate (cx, cy, ca, cb, step) 
  current_fit = fit(cx, cy, ca, cb)
  best_neighbour = []
  best_fit = current_fit
  for neighbour in neighbours
    tx = cx + neighbour[0]*step
    ty = cx + neighbour[1]*step
    ta = ca + neighbour[2]*step
    tb = cb + neighbour[3]*step
    tfit = fit(tx, ty, ta, tb)
    if (tfit > best_fit) 
      best_fit = tfit
      best_neighbour = [tx,ty,ta,tb]
    endif
  end_for
  if best_neighbour.size == 4
    cx := best_neighbour[0]
    cy := best_neighbour[1]
    ca := best_neighbour[2]
    cb := best_neighbour[3]
  else 
    step = step * 0.5
  end_if

然后继续迭代,直到 step 的值小于给定的阈值(例如 1e-6)。我已经用伪代码编写了所有内容,因为我不确定您要使用哪种语言。

不能保证以这种方式找到的答案是最佳的,但我很确定这将是足够好的近似值。

这是一篇关于爬山的文章。

于 2012-02-12T09:28:59.120 回答
0

我认为Wild Magic库包含一个椭圆拟合的功能。有文章有方法说明

于 2012-02-12T09:45:30.060 回答
0

问题是定义“最佳”。在你的情况下什么是最好的?包含 n% 点的面积最小的椭圆?

如果您根据概率定义“最佳”,则可以简单地使用点的协方差矩阵,并计算误差椭圆。

这种“多元高斯分布”的误差椭圆将包含与您决定的任何置信区间相对应的点。

许多计算包可以计算协方差及其对应的特征值和特征向量。椭圆的夹角是x轴与最大特征值对应的特征向量的夹角。半轴是特征值的倒数。

如果您的例程返回所有归一化的内容(它应该返回),那么您可以决定通过什么因素将所有内容相乘以获得 alpha 置信区间。

于 2012-02-14T03:48:39.407 回答