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

2021-07-07 11:03:27 字數 1684 閱讀 1265

設有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,

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

最小二乘法擬合平面

最小二乘法通過最小化誤差的平方和,使擬合物件越來越接近最終物件。擬合直線就是找到一條直線使所有資料點到擬合直線的歐式距離之和最小。擬合平面就是找到乙個平面使得所有資料點到擬合平面的歐式距離最小 設擬合平面方程為ax by cz d 0,則約束條件為a平方 b平方 c平方 1 構建方程ax by cz...

python最小二乘法擬合圓 最小二乘法擬合圓

有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...

python最小二乘法擬合圓 最小二乘法擬合圓

有一系列的資料點 我們知道這些資料點近似的落在乙個圓上。依據這些資料預計這個圓的引數就是乙個非常有意義的問題。今天就來講講怎樣來做圓的擬合。圓擬合的方法有非常多種,最小二乘法屬於比較簡單的一種。今天就先將這樣的。我們知道圓方程能夠寫為 x?xc 2 y?yc 2 r2 通常的最小二乘擬合要求距離的平...