矩阵:采用奇异值分解(SVD)对n个点进行平面拟合

采用奇异值分解(SVD)对已知的n个点进行平面拟合


奇异值分解(SVD)

奇异值分解(Singular Value Decomposition, SVD),是线性代数中一种重要的矩阵分解,在信号处理、统计学等领域有重要应用。奇异值分解在某些方面与对称矩阵或厄米矩阵基于特征向量的对角化类似。对称矩阵特征向量分解的基础是谱分析,而奇异值分解则是谱分析理论在任意矩阵上的推广 1


3D平面拟合

已知三维空间中 n ( n > 2 ) n (n>2) n(n>2) 个点 { p 1 ( x 1 , y 1 , z 1 ) ,   p 2 ( x 2 , y 2 , z 2 ) ,   ⋅ ⋅ ⋅   , p n ( x n , y n , z n ) } \{p_1(x_1,y_1,z_1),\ p_2(x_2,y_2,z_2),\ \cdot\cdot\cdot \ , p_n(x_n,y_n,z_n)\} { p1(x1,y1,z1), p2(x2,y2,z2),  ,pn(xn,yn,zn)},拟合出一个3D平面 Π \Pi Π
a x + b y + c z + d = 0 , n = [ a    b    c ] T ax+by+cz+d=0, \quad \boldsymbol n = [a\ \ b\ \ c]^T ax+by+cz+d=0,n=[a  b  c]T
具体如下:

点集的中心 p 0 p_0 p0 为:
p 0 = ( x 0 , y 0 , z 0 ) = ( 1 n ∑ i = 1 n x i ,   1 n ∑ i = 1 n y i ,   1 n ∑ i = 1 n z i ) p_0 = (x_0,y_0,z_0)=(\frac{1}{n} \sum_{i=1}^n x_i,\ \frac{1}{n} \sum_{i=1}^n y_i,\ \frac{1}{n} \sum_{i=1}^n z_i ) p0=(x0,y0,z0)=(n1i=1nxi, n1i=1nyi, n1i=1nzi)
设面 Π \Pi Π 过点 p 0 p_0 p0 ,则 p 0 p_0 p0 到其他 n n n 个点形成的向量与 Π \Pi Π 的法向量 n n n 正交,即:
p 0 p i ⋅ n = 0 , ∀ i ∈ { 1 , 2 , . . . , n } \boldsymbol{p_0p_i} \cdot \boldsymbol{n} = 0,\quad \forall i \in \{1,2, ..., n\} p0pin=0,i{ 1,2,...,n}
将向量 p 0 p i \boldsymbol{p_0p_i} p0pi 表示为一个 n n n 3 3 3 列的矩阵 A \boldsymbol A A
A = [ p 1 − p 0 p 2 − p 0 ⋮ p n − p 0 ] \boldsymbol A = \left[ \begin{matrix} \boldsymbol{p_1-p_0} \\ \boldsymbol{p_2-p_0} \\ \vdots \\ \boldsymbol{p_n-p_0} \\ \end{matrix} \right] \\ A= p1p0p2p0pnp0

则:
A n = 0 \boldsymbol {A n}=0 An=0
线性方程求解就可以得到法向量 n n n 。显然采用SVD对矩阵 A \boldsymbol {A} A 进行奇异值分解是最高效的方法。
A = U Σ V T \boldsymbol {A} = \boldsymbol {U\Sigma V}^T A=UΣVT
其中, V = [ v 0 , v 1 , v 2 ] \boldsymbol{V}=[\boldsymbol{v}_0,\boldsymbol{v}_1,\boldsymbol{v}_2] V=[v0,v1,v2] v 3 \boldsymbol{v}_3 v3 是最小奇异值对应的右奇异向量,则:
n = v 3 d = − n ⋅ p 0 \boldsymbol{n}=\boldsymbol{v}_3\\ d=-\boldsymbol{n}\cdot\boldsymbol{p}_0 n=v3d=np0
有了法向量 n \boldsymbol{n} n 和 原点到 Π \Pi Π 的距离 d d d,就得到了面的一般方程:
a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0

总结

本文主要记录 已知至少3个点,采用SVD进行平面拟合的方法,感谢您的观看,如有不对,欢迎指正!

参考文献


  1. https://en.wikipedia.org/wiki/Singular_value_decomposition ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_42286660/article/details/127174906