天天看點

SVD平面拟合原理

已知三維空間中的一堆點,拟合平面平面的方程為 a x + b y + c z = d ax + by + cz = d ax+by+cz=d,為了容易得到平面到原點距離,需要使 a 2 + b 2 + c 2 = 1 a^{2}+b^{2}+c^{2}=1 a2+b2+c2=1。

首先計算這些點 ( x i , y i , z i ) (x_{i},y_{i},z_{i}) (xi​,yi​,zi​)的平均坐标 ( x ˉ , y ˉ , z ˉ ) (\bar x,\bar y,\bar z) (xˉ,yˉ​,zˉ),顯然,有 a x ˉ + b y ˉ + c z ˉ = d a\bar x + b\bar y + c\bar z = d axˉ+byˉ​+czˉ=d

與平面方程相減,并寫為矩陣形式,得到

[ x 1 − x ˉ y 1 − y ˉ z 1 − z ˉ x 2 − x ˉ y 2 − y ˉ z 2 − z ˉ x 3 − x ˉ y 3 − y ˉ z 3 − z ˉ . . . x n − x ˉ y n − y ˉ z n − z ˉ ] [ a b c ] = 0 \begin{bmatrix} {{x_1} - \bar x} & {{y_1} - \bar y} & {{z_1} - \bar z} \\ {{x_2} - \bar x} & {{y_2} - \bar y} & {{z_2} - \bar z} \\ {{x_3} - \bar x} & {{y_3} - \bar y} & {{z_3} - \bar z} \\ {} & {...} & {} \\ {{x_n} - \bar x} & {{y_n} - \bar y} & {{z_n} - \bar z} \\ \end{bmatrix} \begin{bmatrix} a \\ b \\ c \\ \end{bmatrix} =0 ⎣⎢⎢⎢⎢⎡​x1​−xˉx2​−xˉx3​−xˉxn​−xˉ​y1​−yˉ​y2​−yˉ​y3​−yˉ​...yn​−yˉ​​z1​−zˉz2​−zˉz3​−zˉzn​−zˉ​⎦⎥⎥⎥⎥⎤​⎣⎡​abc​⎦⎤​=0

另左邊矩陣為 A A A,右邊矩陣為 X X X,則拟合的目标函數為 min ⁡ ∣ ∣ A X ∣ ∣ \min ||AX|| min∣∣AX∣∣,并具有限制 ∣ X ∣ ∣ = 1 |X|| = 1 ∣X∣∣=1。

對 A A A做奇異值分解

A = U D V T A = UD{V^T} A=UDVT

其中, D D D是對角矩陣, U U U和 V V V均為酉矩陣。

是以 ∣ ∣ A X ∣ ∣ = ∣ ∣ U D V T X ∣ ∣ = ∣ ∣ D V T X ∣ ∣ ||AX|| = ||UD{V^T}X|| = ||D{V^T}X|| ∣∣AX∣∣=∣∣UDVTX∣∣=∣∣DVTX∣∣(酉矩陣性質),其中 V T X V^TX VTX為列矩陣,并且 ∣ V T X ∣ ∣ = ∣ ∣ X ∣ ∣ = 1 |{V^T}X|| = ||X|| = 1 ∣VTX∣∣=∣∣X∣∣=1。

因為 D D D的對角元素為奇異值,最後一個對角元素為最小奇異值,當且僅當

V T X = [ 0 0 1 ] {V^T}X = \begin{bmatrix} 0 \\ 0 \\ 1 \\ \end{bmatrix} VTX=⎣⎡​001​⎦⎤​

時, ∣ ∣ A X ∣ ∣ ||AX|| ∣∣AX∣∣ 取到最小值,此時

X = [ a b c ] = V [ 0 0 1 ] X =\begin{bmatrix} a\\b\\c \end{bmatrix}= {V}\begin{bmatrix} 0 \\ 0 \\ 1 \\ \end{bmatrix} X=⎣⎡​abc​⎦⎤​=V⎣⎡​001​⎦⎤​

而 ( a , b , c ) (a,b,c) (a,b,c)即為平面 a x + b y + c z = d ax + by + cz = d ax+by+cz=d的法向量。

該方法的代碼實作可以參考筆者以前的部落格

https://blog.csdn.net/iamqianrenzhan/article/details/103463932。

繼續閱讀