基于几何距离的椭圆拟合
問(wèn)題
給定離散點(diǎn)集Xi=(xi,yi)X_i=(x_i,y_i)Xi?=(xi?,yi?),我們希望找到最好的橢圓去擬合這些離散點(diǎn)。
方法
通常我們使用最小二乘法求解如下的最優(yōu)化問(wèn)題:
Min∑i=1Nf(xi,E)2Min \sum_{i=1}^N f(x_i,E)^2 Mini=1∑N?f(xi?,E)2
這里f(xi,E)f(x_i,E)f(xi?,E)表示點(diǎn)xix_ixi?到E(指待擬合的橢圓)的最小距離。
通常我們有兩種方法來(lái)表達(dá)f(xi,E)f(x_i,E)f(xi?,E),分別是:幾何距離和代數(shù)距離。前面我們已經(jīng)描述了基于代數(shù)距離的橢圓擬合,下面我們將重點(diǎn)介紹基于幾何距離的橢圓擬合方法,這種方法也是橢圓擬合方法中最魯棒、精度最高的擬合方法。
我們主要參考論文《Least-squares orthogonal distances fitting of circle,
sphere, ellipse, hyperbola, and parabola》。
論文的核心思路
顯然,由于離散點(diǎn)到橢圓的幾何距離是非線性的,因此橢圓擬合是一種非線性優(yōu)化的問(wèn)題,需要通過(guò)多次迭代求解。
因此下面我們闡述論文的思路時(shí),將分成兩個(gè)片段來(lái)講解。第一段,主要介紹基于高斯-牛頓法的非線性優(yōu)化方法。第二段,具體介紹這種方法在橢圓擬合中的應(yīng)用。
非線性最小二乘擬合
問(wèn)題
考慮一般的非線性最小二乘問(wèn)題如下:
min?a∣∣X?F(a)∣∣2(1)\min_a~~||X-F(a)||^2 ~~~~~~~~~~~~~~~~~~~~~~~~~ (1) amin???∣∣X?F(a)∣∣2?????????????????????????(1)
這里a∈Rqa\in R^qa∈Rq為優(yōu)化參數(shù),F為非線性函數(shù),X∈RpX\in R^pX∈Rp是已知向量。如下我們給出基于梯度的迭代公式:
ak+1=ak+λAJFT(X?F(ak))(2)a_{k+1}=a_{k}+\lambda AJ_F^T(X-F(a_k)) ~~~~~~~~~~~~~~~~~~~~~~~~~(2) ak+1?=ak?+λAJFT?(X?F(ak?))?????????????????????????(2)
這里λ\lambdaλ為步長(zhǎng),A為縮放因子,J_F為F在當(dāng)前參數(shù)a下的Jacobian矩陣。
各種優(yōu)化方法不同,主要是A的選擇不同。具體如下:
- 當(dāng)A=H?1A=H^{-1}A=H?1時(shí),為牛頓迭代法。
- 當(dāng)A=(JFTJF)?1A=(J_F^TJ_F)^{-1}A=(JFT?JF?)?1時(shí),為高斯-牛頓迭代法。
- 當(dāng)A=IA=IA=I時(shí),為梯度下降法。
這里我們選擇使用高斯-牛頓迭代法。
我們將A帶入(2),即可以改寫為:
{ak+1=ak+λΔa(3)JFΔa=X?F(ak)(4)\left\{\begin{matrix} a_{k+1}=a_{k}+\lambda \Delta a ~~~~~~~~~~~~~~~~~(3)\\ J_F\Delta a= X-F(a_k)~~~~~~~~~~~~~~(4) \end{matrix}\right. {ak+1?=ak?+λΔa?????????????????(3)JF?Δa=X?F(ak?)??????????????(4)?
這里JF=(?Fi?aj),i=1,2,...,p,j=1,2,...,qJ_F=(\frac{\partial F_i}{\partial a_j}),i=1,2,...,p,j=1,2,...,qJF?=(?aj??Fi??),i=1,2,...,p,j=1,2,...,q
并且,我們根據(jù)(1)可以寫出迭代算法的性能表現(xiàn)指數(shù),其實(shí)就是參差的表達(dá)式:
σ02=∣∣X?F(a)∣∣2=[X?F(a)]T[X?F(a)](5)\sigma_0^2=||X-F(a)||^2 =[X-F(a)]^T[X-F(a)]~~~~~~~~~~~~~~(5) σ02?=∣∣X?F(a)∣∣2=[X?F(a)]T[X?F(a)]??????????????(5)
求解
接下來(lái),我們需要求解出Δa\Delta aΔa,才能進(jìn)行迭代。
事實(shí)上求解Δa\Delta aΔa只需要求解方程組(4)即可.我們可以使用奇異值分解求解方程組。
基于幾何距離的橢圓擬合
平面上的橢圓可以使用5個(gè)參數(shù)唯一地表達(dá),即圓心(Xc,Yc)(X_c,Y_c)(Xc?,Yc?)、主軸a,ba,ba,b,角度α(?π/2<α≤π/2)\alpha (-\pi/2<\alpha\leq \pi/2)α(?π/2<α≤π/2).
對(duì)于橢圓的最小二乘正交距離擬合,我們將使用第一段所講的方法。此時(shí),我們定義
a^=(Xc,Yc,a,b,α)T\hat{a}=(X_c,Y_c,a,b,\alpha)^Ta^=(Xc?,Yc?,a,b,α)T
XXX可以看成給定的離散點(diǎn)XiX_iXi?,而自然F(a^)F(\hat{a})F(a^)就是定點(diǎn)XiX_iXi?在橢圓上的最近點(diǎn)Xi′X_i'Xi′?(也稱為正交關(guān)聯(lián)點(diǎn))。迭代公式就變成了如下:
{a^k+1=a^k+λΔa^(6)JXi′,a^Δa^=Xi?Xi′,i=1,2....m(7)\left\{\begin{matrix} \hat{a}_{k+1}&=&\hat{a}_{k}+\lambda \Delta \hat{a} ~~~~~~~~~~~~~~~~~~~~~~(6)\\ J_{X_i',\hat{a}}\Delta\hat{a}&=& X_i-X_i',i=1,2....m~~~~(7) \end{matrix}\right. {a^k+1?JXi′?,a^?Δa^?==?a^k?+λΔa^??????????????????????(6)Xi??Xi′?,i=1,2....m????(7)?
這里m指給定的離散點(diǎn)的個(gè)數(shù)。各個(gè)離散點(diǎn)均滿足(7),因此關(guān)于(7)可以聯(lián)立。實(shí)際上關(guān)于(7)的方程是2m個(gè),而未知數(shù)a的維數(shù)是5,顯然2m>>5,因此解是不唯一的,我們需要求出最小二乘解即可。
顯然我們必須計(jì)算Xi′X_i'Xi′?以及在Xi′X_i'Xi′?點(diǎn)上的Jacobian矩陣JXi′,a^J_{X_i',\hat{a}}JXi′?,a^?。下面我們將闡述如何求解這兩個(gè)量。
坐標(biāo)系轉(zhuǎn)換
為了便于后面的求解,我們需要考慮,將原來(lái)的坐標(biāo)系XY,旋轉(zhuǎn)α\alphaα角,建立一個(gè)位于(0,0)(0,0)(0,0)的臨時(shí)坐標(biāo)系xy。見(jiàn)Fig.3
則有
x=R(X?Xc)(8)x=R(X-X_c) ~~~~~~~~~~~~~~(8) x=R(X?Xc?)??????????????(8)
or
X=R?1x+Xc(9)X=R^{-1}x+X_c ~~~~~~~~~~~~~~(9) X=R?1x+Xc???????????????(9)
這里
R=(CS?SC)和R?1=RTR=\begin{pmatrix} C & S\\ -S & C \end{pmatrix} 和R^{-1}=R^T R=(C?S?SC?)和R?1=RT
C=cos?(α),S=sin?(α)C=\cos(\alpha),S=\sin(\alpha)C=cos(α),S=sin(α)
橢圓上的正交關(guān)聯(lián)點(diǎn)
經(jīng)過(guò)坐標(biāo)軸轉(zhuǎn)換,5個(gè)橢圓參數(shù)變成了2個(gè),僅僅包含了主軸a,ba,ba,b。橢圓上的點(diǎn)可以用標(biāo)準(zhǔn)方程描述如下:
x2a2+y2b2=1(10)\frac{x^2}{a^2}+\frac{y^2}{b^2}=1~~~~~~~~~~~~~~(10) a2x2?+b2y2?=1??????????????(10)
從Fig.3上,我們可以看到位于xy坐標(biāo)系上的正交關(guān)聯(lián)點(diǎn)(xi′,yi′)(x_i',y_i')(xi′?,yi′?)的切向量與兩點(diǎn)(即(xi,yi)、(xi′,yi′)(x_i,y_i)、(x_i',y_i')(xi?,yi?)、(xi′?,yi′?))的連線是正交的。因此,有:
dydx?yi?yxi?x=?b2xa2y?yi?yxi?x=?1(11)\frac{dy}{dx}\cdot\frac{y_i-y}{x_i-x}=\frac{-b^2x}{a^2y}\cdot\frac{y_i-y}{x_i-x}=-1~~~~~~~~~~~~~~(11) dxdy??xi??xyi??y?=a2y?b2x??xi??xyi??y?=?1??????????????(11)
重寫(10,11)有:
f1(x,y)=12(a2y2+b2x2?a2b2)=0(12)f2(x,y)=b2x(yi?y)?a2y(xi?x)=0(13)f_1(x,y)=\frac{1}{2}(a^2y^2+b^2x^2-a^2b^2)=0 ~~~~~~~~~~~~~~(12) \\ f_2(x,y)=b^2x(y_i-y)-a^2y(x_i-x)=0 ~~~~~~~~~~~(13) f1?(x,y)=21?(a2y2+b2x2?a2b2)=0??????????????(12)f2?(x,y)=b2x(yi??y)?a2y(xi??x)=0???????????(13)
上面兩式稱為正交關(guān)聯(lián)條件,我們將使用廣義牛頓法來(lái)求解上面方程組的解。
即使用如下的迭代公式求解:
{xk+1=xk+ΔxQkΔx=?f(xk)(14)\left\{\begin{matrix} x_{k+1}=x_k+\Delta x\\ Q_k\Delta x=-f(x_k) \end{matrix}\right. ~~~~~~~~~~~ ~~~~~~~~~~~(14) {xk+1?=xk?+ΔxQk?Δx=?f(xk?)???????????????????????(14)
Q=(?f1?x?f1?y?f2?x?f2?y)=(b2xa2y(a2?b2)y+b2yi(a2?b2)x?a2xi)(15)Q=\begin{pmatrix} \frac{\partial f_1}{\partial x} & \frac{\partial f_1}{\partial y}\\ \frac{\partial f_2}{\partial x} & \frac{\partial f_2}{\partial y} \end{pmatrix}=\begin{pmatrix} b^2x & a^2y\\ (a^2-b^2)y+b^2y_i &(a^2-b^2)x-a^2x_i \end{pmatrix}~~~~~~~~~~~ ~~~~(15) Q=(?x?f1???x?f2????y?f1???y?f2???)=(b2x(a2?b2)y+b2yi??a2y(a2?b2)x?a2xi??)???????????????(15)
對(duì)于迭代公式(14),我們提供初始解x0x_0x0?,如下:(見(jiàn)Fig.3)
x0=12(x^k1+x^k2)x_0=\frac{1}{2}(\hat{x}_{k1}+\hat{x}_{k2}) x0?=21?(x^k1?+x^k2?)
這里
x^k1=(xk1yk1)=(xiyi)ab/b2xi2+a2yi\hat{x}_{k1}=\begin{pmatrix} x_{k1}\\ y_{k1} \end{pmatrix}=\begin{pmatrix} x_{i}\\ y_{i} \end{pmatrix}ab/\sqrt{b^2x_i^2+a^2y_i} x^k1?=(xk1?yk1??)=(xi?yi??)ab/b2xi2?+a2yi??
我們先把XiX_iXi?通過(guò)轉(zhuǎn)換公式(8)轉(zhuǎn)換成xy坐標(biāo)系的xix_ixi?,然后通過(guò)求解廣義的牛頓法求解得到正交關(guān)聯(lián)點(diǎn)xi′x_i'xi′?,最后再通過(guò)轉(zhuǎn)換公式(9)轉(zhuǎn)換成XY坐標(biāo)系的Xi′X_i'Xi′?,最后給出正交誤差距離向量為:
Xi′′=Xi?Xi′(16)X_i''=X_i-X_i' ~~~~~~~~~~~ ~~~~~~~~~~~(16) Xi′′?=Xi??Xi′???????????????????????(16)
橢圓上的正交關(guān)聯(lián)點(diǎn)的Jacobian矩陣
下面我們直接給出橢圓上的正交關(guān)聯(lián)點(diǎn)的Jacobian矩陣,(注:本部分推導(dǎo)比較復(fù)雜,貼出本人的詳細(xì)推導(dǎo)過(guò)程,需要的可以參考推導(dǎo)1,2,3,4,5)
JXi′,a^=(R?1Q?1B)∣x=xi′(17)J_{X_i',\hat{a}}=(R^{-1}Q^{-1}B)|_{x=x_i'}~~~~~~~~~~~ ~~~~~~~~~~~(17) JXi′?,a^?=(R?1Q?1B)∣x=xi′????????????????????????(17)
這里QQQ見(jiàn)(15),B=(B1,B2,B3,B4,B5)B=(B_1,B_2,B_3,B_4,B_5)B=(B1?,B2?,B3?,B4?,B5?)
此時(shí)
橢圓的正交距離擬合
給定m個(gè)二維點(diǎn),我們可以利用(16)、(17)給定的誤差距離向量Xi′′X_i''Xi′′?和Jacobian矩陣JXi′,a^J_{X_i',\hat{a}}JXi′?,a^?,構(gòu)造p(=2m)個(gè)線性方程組。如下:
,當(dāng)我們使用奇異值分解求解出上述方程組的解時(shí),就可以進(jìn)行高斯-牛頓迭代。
此時(shí)我們還需要一個(gè)初值,一般可以選擇基于代數(shù)擬合的橢圓或者使用圓作為初始值來(lái)進(jìn)行迭代。通常我們推薦使用圓來(lái)作為初始值參數(shù)。
顯然,從圓擬合中獲得的初始參數(shù)為:
(Xc,Yc)ellipse=(Xc,Yc)circle,a=b=R,α=0(X_c,Y_c)_{ellipse}=(X_c,Y_c)_{circle},a=b=R,\alpha=0(Xc?,Yc?)ellipse?=(Xc?,Yc?)circle?,a=b=R,α=0
并且在迭代過(guò)程中,如果a<ba<ba<b,則需要令α←α?sign(α)π2\alpha\leftarrow \alpha-sign(\alpha)\frac{\pi}{2}α←α?sign(α)2π?(保持a為主軸長(zhǎng))
標(biāo)準(zhǔn)坐標(biāo)軸下的橢圓擬合
有時(shí)候,我們也需要為橢圓擬合增加一些約束,經(jīng)典的就是要求在標(biāo)準(zhǔn)坐標(biāo)軸下進(jìn)行橢圓擬合(α=0或者π/2\alpha=0或者 \pi/2α=0或者π/2),或者要求增加橢圓面積約束.此時(shí),我們只需要在原來(lái)的第(7)式增加如下約束即可。
此時(shí)w3,w4w_3,w_4w3?,w4?為權(quán)重參數(shù),一般可以取1.0×1061.0\times 10^{6}1.0×106.
實(shí)驗(yàn)結(jié)果
例1.
我們對(duì)Table 7的離散點(diǎn)進(jìn)行橢圓擬合,其中初始參數(shù)a0a_0a0?源自基于幾何距離的圓擬合。
取λ=1.2\lambda=1.2λ=1.2,在經(jīng)過(guò)19次迭代后,最終的校正向量的范數(shù)為∣∣Δa∣∣=4.2×10?6||\Delta a||=4.2\times 10^{-6}∣∣Δa∣∣=4.2×10?6,并且得到誤差指數(shù)σ0=1.1719\sigma_0=1.1719σ0?=1.1719.見(jiàn)如下:
為了更好地比較,我們也考慮了初始參數(shù)a0a_0a0?源自基于代數(shù)距離的橢圓擬合,而達(dá)到與上述相同的估計(jì),需要進(jìn)行21次迭代(∣∣Δa∣∣=1.1×10?6||\Delta a||=1.1\times 10^{-6}∣∣Δa∣∣=1.1×10?6).
我們也比較了我們的結(jié)果與Gander的結(jié)果,而后者達(dá)到相同的估計(jì),需要進(jìn)行71次迭代(∣∣Δa∣∣=1.0×10?6||\Delta a||=1.0\times 10^{-6}∣∣Δa∣∣=1.0×10?6).具體可參考Table 8 的III,IV.
Gander的算法有一個(gè)缺點(diǎn)就是不能使用圓的結(jié)果作為初始參數(shù),為了克服這個(gè)困難,一般取$ a=R, b=R/2$.為了更加直接驗(yàn)證我們算法的魯棒性,我們也考慮了使用兩種設(shè)置作為初始值,分別見(jiàn)Table 8的II,III。即:
II:
a=R,b=R/2,α=0a=R,b=R/2,\alpha=0a=R,b=R/2,α=0
III:
a=R,b=R/2,α=?1.211a=R,b=R/2,\alpha=-1.211a=R,b=R/2,α=?1.211.
我們分別使用17次和23次迭代達(dá)到了相同的估計(jì),其中校正向量的范數(shù)分別是1.2×10?6,5.2×10?61.2\times 10^{-6},5.2\times10^{-6}1.2×10?6,5.2×10?6.
從以上結(jié)果來(lái)看,我們的算法是魯棒的,即使初始值不夠好,最終也能迭代到較好的效果。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的基于几何距离的椭圆拟合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: excel如何记账
- 下一篇: JAVA API帮助文档