2012-02-12 135 views
0

這是交易。我有多個點(X,Y)形成一個'橢圓形'形狀。從分散點評估/擬合橢圓

我想評估/擬合可能的「最佳」橢圓,並得到它的屬性(a,b,F1,F2),或者只是橢圓的中心。

任何想法/線索,將不勝感激。

吉拉德。

+0

是否有任何noice? – 2012-02-12 08:51:35

+0

我假設你的意思是噪音。是的,有噪音。 「最佳擬合」橢圓在散佈點上可能沒有單點。 – Gilad 2012-02-12 08:57:16

+2

你想要正交距離擬合嗎?如果不是,那麼錯誤模型是什麼? – 2012-02-12 08:59:05

回答

3

有一個Matlab函數fit_ellipse可以完成這項工作。關於橢圓正交距離擬合的方法也有this paper。網頁搜索正交橢圓擬合也可能會出現很多其他資源。

0

我會解釋我將如何處理這個問題。我會建議爬山的方法。首先計算點的重心作爲起點,並以某種方式爲a和b選擇兩個值(可能爲任意正值)。你需要有一個合適的功能,我建議它(足夠接近)返回的點數趴在一個給定的橢圓:

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開始。我會選擇一個足夠大的值來確保elipse的最佳中心距離第一個點永遠不會超過step。選擇這麼大的價值是沒有必要的,但算法中最慢的部分是接近最佳中心所需的時間,所以我認爲更大的價值更好。

所以現在我們有一些初始點(Xÿ)的一個b一些初始值和初始步驟。如果有鄰居優於鄰居,則該算法迭代地選擇當前點的鄰居中的最好鄰居,否則則減少步驟兩次。這裏'最好'的意思是使用擬合函數。 (x,y,a,b),它的鄰居是8: ,y,a + -step,b),(x,y,a,b + -step)(如果結果不夠好,則可以通過對角線增加更多鄰居 - 例如(x + -step,y + 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 

你繼續迭代直到步驟的值越小則給定的閾值(例如1E-6)。我使用僞代碼編寫了所有內容,因爲我不確定要使用哪種語言。

這並不能保證以這種方式找到的答案是最優的,但我相當肯定它會足夠好的近似值。

這是關於hill climbing的文章。

0

問題是定義「最好」。你的情況最好?面積最小的橢圓包含n%的點S?

如果根據概率定義「最佳」,則可以簡單地使用點的協方差矩陣,然後計算誤差橢圓。

對於這種「多元高斯分佈」錯誤橢圓然後將含有相應於任何置信區間,你決定點。

許多計算包可以計算協方差,以及相應的特徵值和特徵向量。橢圓的角度是x軸和與最大特徵值對應的特徵向量之間的角度。半軸是特徵值的倒數。

如果你的程序返回的一切歸一化(應該如此),那麼你可以通過什麼因素決定一切相乘獲得α-置信區間。

2

的橢圓擬合通過提出的方法:

Z. L. Szpak,W. Chojnacki,和A.範登亨格爾。 帶有置信區域的保證橢圓擬合以及中心,軸和方向的不確定性測量。 J. Math。 J. Math。 Imaging Vision,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-measure-for-centre-axes-and-orientation