平面擬合
- 1、平面擬合
- 2、參考文獻
- 3、相關代碼
1、平面擬合
??PCA 是一種數學變換的方法,利用降維的思想在變換中保持變量的總方差不變,將給定的一組變量線性變換為另一組不相關的變量,并且使變換后的第一變量的方差最大,即第一主成分,其他分量的方差依次遞減。在點云數據中的變量為三維點坐標的集合,其變量為X、Y、Z 三個坐標值,則經過變換后,應有三個主成分,對于一個空間平面,在平行于平面的方向上點集分布最為離散,方差最大,在垂直于平面的方向上,點集分布最為集中,方差最小,即空間平面的第三主成分為垂直于空間平面的向量。由于平面擬合最關鍵的為法向量的擬合,利用PCA 得到點集的第三主成分,即能進一步擬合出平面方程,如圖1 所示。
??對于在坐標系XYZ 下的待擬合平面點云,利用主成分分析法對其進行分析,可得到三個按照從大到小排列的特征值 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1?、λ2?、λ3?,對應的主分量分別為 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1?、V2?、V3?,其中 V 1 V_1 V1?和 V 2 V_2 V2?組成了待擬合平面的一組基, V 3 V_3 V3?與 V 1 V_1 V1?、 V 2 V_2 V2?正交,為垂直于待擬合平面的法向量。如圖1,在XYZ 坐標系下的點云,經過主成分分析后,三個主成分分量 V 1 、 V 2 、 V 3 V_1、V_2、V_3 V1?、V2?、V3?組成了新坐標系 X ′ Y ′ Z ′ X'Y'Z' X′Y′Z′的三個基, V 1 V_1 V1?和 V 2 V_2 V2?為平面 X ′ O ′ Z ′ X'O'Z' X′O′Z′的一組基, V 3 V_3 V3?為 O ′ Z ′ O'Z' O′Z′方向的基,即所擬合平面的法向量。
PCA 過程如下:
( 1) 特征中心化。即每一維的數據都減去該維的均值,變換之后每一維的均值都變成了零。特征中心化后的點集 P P P,如式( 1) ,其中, x i 、 y i 、 z i x_i、y_i、z_i xi?、yi?、zi?為中心化后點坐標:
P = [ x 1 y 1 z 1 x 2 y 2 z 2 ? ? ? x n y n z n ] (1) P=\left[ \begin{matrix} x_1 & y_1 & z_1\\ x_2 & y_2 & z_2 \\ \vdots & \vdots & \vdots\\ x_n & y_n & z_n \end{matrix} \right] \tag{1} P= ?x1?x2??xn??y1?y2??yn??z1?z2??zn?? ?(1)
(2) 計算三個坐標的協方差矩陣。協方差矩陣 C C C為:
C = [ c o v ( x , x ) c o v ( x , y ) c o v ( x , z ) c o v ( y , x ) c o v ( y , y ) c o v ( y , z ) c o v ( z , x ) c o v ( z , y ) c o v ( z , z ) ] (2) C=\left[ \begin{matrix} cov(x,x) & cov(x,y) & cov(x,z)\\ cov(y,x) & cov(y,y) & cov(y,z) \\ cov(z,x) & cov(z,y) & cov(z,z) \end{matrix} \right] \tag{2} C= ?cov(x,x)cov(y,x)cov(z,x)?cov(x,y)cov(y,y)cov(z,y)?cov(x,z)cov(y,z)cov(z,z)? ?(2)
??其中, c o v ( x , y ) cov( x,y) cov(x,y) 為 x x x 坐標和 y y y 坐標的協方差, c o v ( x , x ) cov( x,x ) cov(x,x) 為 x x x坐標的方差,協方差計算公式如式( 3) , x i 、 y i x_i、y_i xi?、yi?為中心化后點坐標:
c o v ( x , y ) = ∑ i = 1 n x i y i n ? 1 (3) cov(x,y)=\frac{\sum_{i=1}^nx_iy_i}{n-1}\tag{3} cov(x,y)=n?1∑i=1n?xi?yi??(3)
??當協方差大于零時說明 x x x和 y y y是正相關關系,協方差小于零時 x x x和 y y y是負相關關系,協方差為零時 x x x和 y y y相互獨立。
( 3) 計算協方差矩陣 C C C的特征值和特征向量。所計算出來的特征值按照從大到小排序,分別為 λ 1 、 λ 2 、 λ 3 λ_1、λ_2、λ_3 λ1?、λ2?、λ3?,其所對應的特征向量分別為 ξ 1 、 ξ 2 、 ξ 3 ξ_1、ξ_2、ξ_3 ξ1?、ξ2?、ξ3?。顯然,兩個較大 λ λ λ 所對應的特征向量 ξ 1 、 ξ 2 ξ_1、ξ_2 ξ1?、ξ2?為待擬合平面的一組基,而 ξ 3 ξ_3 ξ3?為待擬合平面的法向量,其三個分量分別為 a 、 b 、 c a、b、c a、b、c。
??若已知待擬合平面經過點 p ( x 0 , y 0 , z 0 ) p( x_0,y_0,z_0) p(x0?,y0?,z0?) ,則擬合平面為式( 4) :
a ( x - x 0 ) + b ( y - y 0 ) + c ( z - z 0 ) = 0 (4) a( x-x_0) +b( y-y_0) +c( z-z_0) = 0\tag{4} a(x-x0?)+b(y-y0?)+c(z-z0?)=0(4)
否則,取其均值作為平面上點 p ( x ˉ , y ˉ , z ˉ ) p(\bar{x},\bar{y},\bar{z}) p(xˉ,yˉ?,zˉ) 進行擬合。
??采用主成分分析法擬合平面的方法,對于存在噪聲點的情況,也能很好的擬合出結果。因為在一個平面點云中,噪聲點偏離平面的距離相對于平面的范圍較小,對擬合結果的影響可以忽略。
2、參考文獻
[1]葉玲潔;顏遠青. 基于PCA算法的機載LiDAR點云平面分割算法研究 [J]. 城市勘測, 2018, (01): 41-44+51.
3、相關代碼
- matlab 點云最小二乘擬合平面(PCA法)
- matlab 點云最小二乘擬合平面(PCA法詳細過程版)
- matlab 最小二乘擬合平面并與XOY平面對齊
- Open3D 最小二乘擬合平面(PCA法 python詳細過程版)
- Open3D 進階(12)PCA擬合平面