天天看點

最小二乘法平面方程拟合計算, 點雲法向量估算

設有n個資料點Pi(xi,yi,zi).

假設平面方程為:a*x+b*y+c*z+d=0,其中a、b、c、d為待定系數a、b、c不能同時為0.

顯然,a*x+b*y+c*z+d=0與

k*a*x+k*b*y+k*c*z+k*d=0(k≠0)

表示同一個平面.故,如d不為0,可通過把方程兩邊同除以d,把常數項化為1;但d=0時,情況稍微複雜一點.

現在說明大緻思路,為讨論友善,開始時暫不假設d=1或0.

設拟合平面的方程為∏:a*x+b*y+c*z+d=0.

資料點Pi到平面a*x+b*y+c*z+d=0的距離設為di,

則di^2=(a*xi+b*yi+c*zi+d)^2/(a^2+b^2+c^2),

令L=∑di^2 (i=1,...,n),為目标函數,現欲使L最小.

L可以看成是關于(a,b,c,d)的函數((xi,yi,zi)均已知),

L取最小值的一個必要(非充分)條件是:

∂L/∂a=0,∂L/∂b=0,∂L/∂c=0,∂L/∂d=0,

∂L/∂a=∑2*xi*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)

=A1*a+B1*b+C1*c+D1*d,

其中,

A1=2/(a^2+b^2+c^2)*(∑xi^2)(i=1,...,n),

B1=2/(a^2+b^2+c^2)*(∑xi*yi)(i=1,...,n),

C1=2/(a^2+b^2+c^2)*(∑xi*zi)(i=1,...,n),

D1=2/(a^2+b^2+c^2)*(∑xi)(i=1,...,n),

同理,

∂L/∂b=A2*a+B2*b+C2*c+D2*d,

∂L/∂c=A3*a+B3*b+C3*c+D3*d,

其中,

A2=2/(a^2+b^2+c^2)*(∑yi*xi)(i=1,...,n),

B2=2/(a^2+b^2+c^2)*(∑yi^2)(i=1,...,n),

C2=2/(a^2+b^2+c^2)*(∑yi*zi)(i=1,...,n),

D2=2/(a^2+b^2+c^2)*(∑yi)(i=1,...,n),

A3=2/(a^2+b^2+c^2)*(∑zi*xi)(i=1,...,n),

B3=2/(a^2+b^2+c^2)*(∑zi*yi)(i=1,...,n),

C3=2/(a^2+b^2+c^2)*(∑zi^2)(i=1,...,n),

D3=2/(a^2+b^2+c^2)*(∑zi)(i=1,...,n),

∂L/∂d=∑2*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)

=D1*a+D2*b+D3*c+D4*d,

其中,D4=2n/(a^2+b^2+c^2).

于是有方程組:

A1*a+B1*b+C1*c+D1*d=0,

A2*a+B2*b+C2*c+D2*d=0,

A3*a+B3*b+C3*c+D3*d=0,

D1*a+D2*b+D3*c+D4*d=0,

解此方程組即可.具體如何解,可參考計算方法的書,上面有詳細說明.

千萬注意:上述矩陣的秩rank<=3, 會的人立刻明白怎麼結算了,不會的留言吧.

最小二乘法平面方程拟合計算, 點雲法向量估算
最小二乘法平面方程拟合計算, 點雲法向量估算

繼續閱讀