前言
接續ICP(Iterative Closest Point)算法推導,本篇介紹ICP的變種Point-To-Plane損失函數及其求解方法。
本文同樣整理自深藍學院三維點雲處理課程的Lecture 9 – Registration。
損失函數
在一般(Point-To-Point)的ICP中,是以多組點對距離的平方和當作損失函數,在Point-To-Plane中,則是以多組點對經轉換後的source點到target點法向量所定義的平面的距離平方和當作損失函數。
如下圖:
將第 i i i組點對表示為 ( p i , q i ) (p_i,q_i) (pi,qi),其中 q i q_i qi的法向量為 n i n_i ni。
經 R , t R,t R,t轉換後的 p i p_i pi到 q i q_i qi所在局部擬合平面的距離等於兩者連線 R p i + t − q i Rp_i+t - q_i Rpi+t−qi在 n i n_i ni方向上的投影,也就是 ( R p i + t − q i ) T n i (Rp_i+t - q_i)^Tn_i (Rpi+t−qi)Tni。
考慮所有
1
1
1到
n
n
n組點對,所以有以下損失函數:
E
(
R
,
t
)
=
∑
i
=
1
n
(
(
R
p
i
+
t
−
q
i
)
T
n
i
)
2
E(R,t) = \sum\limits^n_{i=1}((Rp_i+t - q_i)^Tn_i)^2
E(R,t)=i=1∑n((Rpi+t−qi)Tni)2
R,t參數化
可以將 R R R拆成以 x x x為軸、以 y y y為軸和以 z z z為軸的旋轉,假設在這三個軸上各自旋轉 α , β , γ \alpha,\beta,\gamma α,β,γ度,則有:
R x ( α ) = [ 1 0 0 0 cos ( α ) − sin ( α ) 0 sin ( α ) cos ( α ) ] R_x(\alpha) = \begin{bmatrix}1 & 0 & 0 \\ 0 & \cos(\alpha) & -\sin(\alpha) \\ 0 & \sin(\alpha) & \cos(\alpha) \end{bmatrix} Rx(α)=⎣⎡1000cos(α)sin(α)0−sin(α)cos(α)⎦⎤
R y ( β ) = [ cos ( β ) 0 sin ( β ) 0 1 0 − sin ( β ) 0 cos ( β ) ] R_y(\beta) = \begin{bmatrix}\cos(\beta) & 0 & \sin(\beta) \\ 0 & 1 & 0 \\ -\sin(\beta) & 0 & \cos(\beta) \end{bmatrix} Ry(β)=⎣⎡cos(β)0−sin(β)010sin(β)0cos(β)⎦⎤
R z ( γ ) = [ cos ( γ ) − sin ( γ ) 0 sin ( γ ) cos ( γ ) 0 0 0 1 ] R_z(\gamma) = \begin{bmatrix}\cos(\gamma) & -\sin(\gamma) & 0 \\ \sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(γ)=⎣⎡cos(γ)sin(γ)0−sin(γ)cos(γ)0001⎦⎤
旋轉矩陣為它們三者的乘積,先沿 x x x軸旋轉,然後依次沿 y , z y,z y,z軸旋轉:
R = R z ( γ ) R y ( β ) R x ( α ) ≜ [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R = R_z(\gamma)R_y(\beta)R_x(\alpha) \triangleq \begin{bmatrix}r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33}\end{bmatrix} R=Rz(γ)Ry(β)Rx(α)≜⎣⎡r11r21r31r12r22r32r13r23r33⎦⎤
展開如下:
R = R z ( γ ) [ cos ( β ) 0 sin ( β ) 0 1 0 − sin ( β ) 0 cos ( β ) ] [ 1 0 0 0 cos ( α ) − sin ( α ) 0 sin ( α ) cos ( α ) ] = [ cos ( γ ) − sin ( γ ) 0 sin ( γ ) cos ( γ ) 0 0 0 1 ] [ cos ( β ) sin ( α ) sin ( β ) cos ( α ) sin ( β ) 0 cos ( α ) − sin ( α ) − sin ( β ) sin ( α ) cos ( β ) cos ( α ) cos ( β ) ] = [ cos ( β ) cos ( γ ) sin ( α ) sin ( β ) cos ( γ ) − cos ( α ) sin ( γ ) cos ( α ) sin ( β ) cos ( γ ) + sin ( α ) sin ( γ ) cos ( β ) sin ( γ ) sin ( α ) sin ( β ) sin ( γ ) + cos ( α ) cos ( γ ) cos ( α ) sin ( β ) sin ( γ ) − sin ( α ) cos ( γ ) − sin ( β ) sin ( α ) cos ( β ) cos ( α ) cos ( β ) ] \begin{aligned} R &= R_z(\gamma)\begin{bmatrix}\cos(\beta) & 0 & \sin(\beta) \\ 0 & 1 & 0 \\ -\sin(\beta) & 0 & \cos(\beta) \end{bmatrix}\begin{bmatrix}1 & 0 & 0 \\ 0 & \cos(\alpha) & -\sin(\alpha) \\ 0 & \sin(\alpha) & \cos(\alpha) \end{bmatrix} \\&= \begin{bmatrix}\cos(\gamma) & -\sin(\gamma) & 0 \\ \sin(\gamma) & \cos(\gamma) & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix}\cos(\beta) & \sin(\alpha)\sin(\beta) & \cos(\alpha)\sin(\beta) \\ 0 & \cos(\alpha) & -\sin(\alpha) \\ -\sin(\beta) & \sin(\alpha)\cos(\beta) & \cos(\alpha)\cos(\beta) \end{bmatrix} \\&= \begin{bmatrix}\cos(\beta)\cos(\gamma) & \sin(\alpha)\sin(\beta)\cos(\gamma)-\cos(\alpha)\sin(\gamma) & \cos(\alpha)\sin(\beta)\cos(\gamma)+\sin(\alpha)\sin(\gamma) \\ \cos(\beta)\sin(\gamma) & \sin(\alpha)\sin(\beta)\sin(\gamma)+\cos(\alpha)\cos(\gamma) & \cos(\alpha)\sin(\beta)\sin(\gamma)-\sin(\alpha)\cos(\gamma) \\ -\sin(\beta) & \sin(\alpha)\cos(\beta) & \cos(\alpha)\cos(\beta) \end{bmatrix}\end{aligned} R=Rz(γ)⎣⎡cos(β)0−sin(β)010sin(β)0cos(β)⎦⎤⎣⎡1000cos(α)sin(α)0−sin(α)cos(α)⎦⎤=⎣⎡cos(γ)sin(γ)0−sin(γ)cos(γ)0001⎦⎤⎣⎡cos(β)0−sin(β)sin(α)sin(β)cos(α)sin(α)cos(β)cos(α)sin(β)−sin(α)cos(α)cos(β)⎦⎤=⎣⎡cos(β)cos(γ)cos(β)sin(γ)−sin(β)sin(α)sin(β)cos(γ)−cos(α)sin(γ)sin(α)sin(β)sin(γ)+cos(α)cos(γ)sin(α)cos(β)cos(α)sin(β)cos(γ)+sin(α)sin(γ)cos(α)sin(β)sin(γ)−sin(α)cos(γ)cos(α)cos(β)⎦⎤
所以 R R R為 α , β , γ \alpha,\beta,\gamma α,β,γ的(非線性)函數。
假設每次迭代估計出來的旋轉角度都很小
α
,
β
,
γ
→
0
\alpha,\beta,\gamma \rightarrow 0
α,β,γ→0,那麼:
cos
(
θ
)
→
1
\cos(\theta) \rightarrow 1
cos(θ)→1,
sin
(
θ
)
→
θ
\sin(\theta) \rightarrow \theta
sin(θ)→θ,
θ
2
→
0
if
θ
→
0
\theta^2 \rightarrow 0 \text{ if } \theta \rightarrow 0
θ2→0 if θ→0。
將上面得到的前兩個近似代入矩陣 R R R:
R ≈ [ 1 ∗ 1 α ∗ β ∗ 1 − 1 ∗ γ 1 ∗ β ∗ 1 + α ∗ γ 1 ∗ γ α ∗ β ∗ γ + 1 ∗ 1 1 ∗ β ∗ γ − α ∗ 1 − β α ∗ 1 1 ∗ 1 ] R \approx \begin{bmatrix}1*1 & \alpha*\beta*1-1*\gamma & 1*\beta*1+\alpha*\gamma \\ 1*\gamma & \alpha*\beta*\gamma+1*1 & 1*\beta*\gamma-\alpha*1 \\ -\beta & \alpha*1 & 1*1 \end{bmatrix} R≈⎣⎡1∗11∗γ−βα∗β∗1−1∗γα∗β∗γ+1∗1α∗11∗β∗1+α∗γ1∗β∗γ−α∗11∗1⎦⎤
接著套用最後一個近似 θ 2 → 0 if θ → 0 \theta^2 \rightarrow 0 \text{ if } \theta \rightarrow 0 θ2→0 if θ→0,得到:
R ≈ [ 1 − γ β γ 1 − α − β α 1 ] R \approx \begin{bmatrix}1 & -\gamma & \beta \\ \gamma & 1 & -\alpha \\ -\beta & \alpha & 1 \end{bmatrix} R≈⎣⎡1γ−β−γ1αβ−α1⎦⎤
至此, R R R已經變為 α , β , γ \alpha,\beta,\gamma α,β,γ的線性函數了。
t t t的參數化很簡單,也是用三個變數來表達: t = [ t x t y t z ] t = \begin{bmatrix}t_x \\ t_y \\ t_z \end{bmatrix} t=⎣⎡txtytz⎦⎤。
如此一來損失函數就變成未知數的線性函數了(?)
最小二乘問題
此處的目標是將損失函數表示成 ∥ A x − b ∥ 2 \|Ax-b\|^2 ∥Ax−b∥2的形式,接下來就可以把它當成最小二乘問題,套用現成的方法求解。
先關注第
i
i
i項的距離(未做平方):
(
R
p
i
+
t
−
q
i
)
T
n
i
=
(
[
1
−
γ
β
γ
1
−
α
−
β
α
1
]
[
p
i
x
p
i
y
p
i
z
]
+
[
t
x
t
y
t
z
]
−
[
q
i
x
q
i
y
q
i
z
]
)
T
n
i
=
[
p
i
x
−
p
i
y
γ
+
p
i
z
β
+
t
x
−
q
i
x
p
i
x
γ
+
p
i
y
−
p
i
z
α
+
t
y
−
q
i
y
−
p
i
x
β
+
p
i
y
α
+
p
i
z
+
t
z
−
q
i
z
]
T
[
n
i
x
n
i
y
n
i
z
]
=
n
i
x
(
p
i
x
−
p
i
y
γ
+
p
i
z
β
+
t
x
−
q
i
x
)
+
n
i
y
(
p
i
x
γ
+
p
i
y
−
p
i
z
α
+
t
y
−
q
i
y
)
+
n
i
z
(
−
p
i
x
β
+
p
i
y
α
+
p
i
z
+
t
z
−
q
i
z
)
=
(
n
i
z
p
i
y
−
n
i
y
p
i
z
)
α
+
(
n
i
x
p
i
z
−
n
i
z
p
i
x
)
β
+
(
n
i
y
p
i
x
−
n
i
x
p
i
y
)
γ
+
n
i
x
t
x
+
n
i
y
t
y
+
n
i
z
t
z
−
(
n
i
x
q
i
x
+
n
i
y
q
i
y
+
n
i
z
q
i
z
−
n
i
x
p
i
x
−
n
i
y
p
i
y
−
n
i
z
p
i
z
)
\begin{aligned}(Rp_i+t - q_i)^Tn_i &= (\begin{bmatrix}1 & -\gamma & \beta \\ \gamma & 1 & -\alpha \\ -\beta & \alpha & 1 \end{bmatrix}\begin{bmatrix}p_{ix}\\p_{iy}\\p_{iz}\end{bmatrix}+\begin{bmatrix}t_{x}\\t_{y}\\t_{z}\end{bmatrix}-\begin{bmatrix}q_{ix}\\q_{iy}\\q_{iz}\end{bmatrix})^Tn_i \\&= \begin{bmatrix} p_{ix}- p_{iy}\gamma+ p_{iz}\beta+t_{x}-q_{ix} \\ p_{ix}\gamma+p_{iy}-p_{iz}\alpha+t_{y}-q_{iy} \\ -p_{ix}\beta +p_{iy} \alpha + p_{iz}+t_{z}-q_{iz}\end{bmatrix}^T\begin{bmatrix}n_{ix} \\ n_{iy} \\ n_{iz} \end{bmatrix} \\&= n_{ix}(p_{ix}- p_{iy}\gamma+ p_{iz}\beta+t_{x}-q_{ix}) \\&+ n_{iy}(p_{ix}\gamma+p_{iy}-p_{iz}\alpha+t_{y}-q_{iy}) \\&+ n_{iz}(-p_{ix}\beta +p_{iy} \alpha + p_{iz}+t_{z}-q_{iz}) \\&= (n_{iz}p_{iy} -n_{iy}p_{iz})\alpha+(n_{ix}p_{iz}-n_{iz}p_{ix})\beta+(n_{iy}p_{ix}-n_{ix}p_{iy})\gamma \\&+n_{ix}t_{x}+n_{iy}t_{y}+n_{iz}t_{z} \\&- (n_{ix}q_{ix}+n_{iy}q_{iy}+n_{iz}q_{iz}-n_{ix}p_{ix}-n_{iy}p_{iy}-n_{iz}p_{iz}) \end{aligned}
(Rpi+t−qi)Tni=(⎣⎡1γ−β−γ1αβ−α1⎦⎤⎣⎡pixpiypiz⎦⎤+⎣⎡txtytz⎦⎤−⎣⎡qixqiyqiz⎦⎤)Tni=⎣⎡pix−piyγ+pizβ+tx−qixpixγ+piy−pizα+ty−qiy−pixβ+piyα+piz+tz−qiz⎦⎤T⎣⎡nixniyniz⎦⎤=nix(pix−piyγ+pizβ+tx−qix)+niy(pixγ+piy−pizα+ty−qiy)+niz(−pixβ+piyα+piz+tz−qiz)=(nizpiy−niypiz)α+(nixpiz−nizpix)β+(niypix−nixpiy)γ+nixtx+niyty+niztz−(nixqix+niyqiy+nizqiz−nixpix−niypiy−nizpiz)
注意因為我們希望將損失函數表示為 ∥ A x − b ∥ 2 \|Ax-b\|^2 ∥Ax−b∥2的形式,所以最後一個符號是減。
定義未知數向量 x ≜ [ α β γ t x t y t z ] T x \triangleq \begin{bmatrix}\alpha & \beta & \gamma & t_{x} & t_{y} & t_{z}\end{bmatrix}^T x≜[αβγtxtytz]T
將所有 i = 1 ~ n i=1~n i=1~n的各項納入考慮,定義矩陣 A ≜ [ a 11 a 12 a 13 n 1 x n 1 y n 1 z . . . a i 1 a i 2 a i 3 n i x n i y n i z . . . a N 1 a N 2 a N 3 n N x n N y n N z ] A \triangleq \begin{bmatrix}a_{11} & a_{12} & a_{13} & n_{1x} & n_{1y} & n_{1z} \\ ... \\ a_{i1} & a_{i2} & a_{i3} & n_{ix} & n_{iy} & n_{iz} \\... \\ a_{N1} & a_{N2} & a_{N3} & n_{Nx} & n_{Ny} & n_{Nz} \end{bmatrix} A≜⎣⎢⎢⎢⎢⎡a11...ai1...aN1a12ai2aN2a13ai3aN3n1xnixnNxn1yniynNyn1zniznNz⎦⎥⎥⎥⎥⎤,
其中 a i 1 = n i z p i y − n i y p i z a_{i1} = n_{iz}p_{iy} -n_{iy}p_{iz} ai1=nizpiy−niypiz, a i 2 = n i x p i z − n i z p i x a_{i2} = n_{ix}p_{iz}-n_{iz}p_{ix} ai2=nixpiz−nizpix, a i 3 = n i y p i x − n i x p i y a_{i3} = n_{iy}p_{ix}-n_{ix}p_{iy} ai3=niypix−nixpiy。
定義矩陣 b ≜ [ b 1 . . . b i . . . b N ] b \triangleq \begin{bmatrix}b_1 \\ ... \\ b_i \\ ... \\ b_N \end{bmatrix} b≜⎣⎢⎢⎢⎢⎡b1...bi...bN⎦⎥⎥⎥⎥⎤,
其中 b i = n i x q i x + n i y q i y + n i z q i z − n i x p i x − n i y p i y − n i z p i z b_i = n_{ix}q_{ix}+n_{iy}q_{iy}+n_{iz}q_{iz}-n_{ix}p_{ix}-n_{iy}p_{iy}-n_{iz}p_{iz} bi=nixqix+niyqiy+nizqiz−nixpix−niypiy−nizpiz。
於是我們就可以將損失函數表示為:
E ( R , t ) = ∑ i = 1 n ( ( R p i + t − q i ) T n i ) 2 = ∥ A x − b ∥ 2 E(R,t) = \sum\limits^n_{i=1}((Rp_i+t - q_i)^Tn_i)^2 = \|Ax-b\|^2 E(R,t)=i=1∑n((Rpi+t−qi)Tni)2=∥Ax−b∥2
求解
將損失函數表達為最小二乘問題後,接下來就可以用以下方式來求解:
- Moore–Penrose偽逆
- SVD矩陣分解
Moore–Penrose偽逆
根據Moore–Penrose inverse, 假設有 A ∈ R m × n , m > = n A \in \R^{m \times n}, m >=n A∈Rm×n,m>=n,在 A A A的每個column都是線性獨立(column full-rank),即 A T A A^TA ATA是可逆的情況下,有: A + = ( A T A ) − 1 A T A^+=(A^TA)^{-1}A^T A+=(ATA)−1AT,其中 A + A = I A^+A = I A+A=I, A + A^+ A+稱為 A A A的left inverse。
對於 A x = b Ax=b Ax=b這個方程來說,取 x ^ = A + b = ( A T A ) − 1 A T b \hat{x} = A^+b = (A^TA)^{-1}A^Tb x^=A+b=(ATA)−1ATb可以使得 ∥ A x − b ∥ \|Ax-b\| ∥Ax−b∥為最小,即最小二乘解。證明可以參考stanford - Least-squares的第二到第四頁。
欲計算 x ^ \hat{x} x^,可以先分別計算 ( A T A ) − 1 (A^TA)^{-1} (ATA)−1和 A T b A^Tb ATb,再將它們相乘即可。
首先計算 ( A T A ) − 1 (A^TA)^{-1} (ATA)−1:
A T A = [ a 11 . . . a i 1 . . . a N 1 a 12 . . . a i 2 . . . a N 2 a 13 . . . a i 3 . . . a N 3 n 1 x . . . n i x . . . n N x n 1 y . . . n i y . . . n N y n 1 z . . . n i z . . . n N z ] [ a 11 a 12 a 13 n 1 x n 1 y n 1 z . . . a i 1 a i 2 a i 3 n i x n i y n i z . . . a N 1 a N 2 a N 3 n N x n N y n N z ] \begin{aligned}A^TA &= \begin{bmatrix}a_{11} & ... & a_{i1} & ... & a_{N1} \\ a_{12} & ... & a_{i2} & ... & a_{N2} \\ a_{13} & ... & a_{i3} & ... & a_{N3} \\ n_{1x} & ... & n_{ix} & ... & n_{Nx} \\ n_{1y} & ... & n_{iy} & ... & n_{Ny} \\ n_{1z} & ... & n_{iz} & ... & n_{Nz} \end{bmatrix} \begin{bmatrix}a_{11} & a_{12} & a_{13} & n_{1x} & n_{1y} & n_{1z} \\ ... \\ a_{i1} & a_{i2} & a_{i3} & n_{ix} & n_{iy} & n_{iz} \\... \\ a_{N1} & a_{N2} & a_{N3} & n_{Nx} & n_{Ny} & n_{Nz} \end{bmatrix} \end{aligned} ATA=⎣⎢⎢⎢⎢⎢⎢⎡a11a12a13n1xn1yn1z..................ai1ai2ai3nixniyniz..................aN1aN2aN3nNxnNynNz⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡a11...ai1...aN1a12ai2aN2a13ai3aN3n1xnixnNxn1yniynNyn1zniznNz⎦⎥⎥⎥⎥⎤
來看看其中的幾項:
A T A ( 1 , 1 ) = [ a 11 . . . a i 1 . . . a N 1 ] [ a 11 . . . a i 1 . . . a N 1 ] = ∑ i = 1 N a i 1 2 A^TA(1,1) = \begin{bmatrix}a_{11} & ... & a_{i1} & ... & a_{N1}\end{bmatrix} \begin{bmatrix}a_{11} \\ ... \\ a_{i1} \\... \\ a_{N1} \end{bmatrix} = \sum\limits_{i=1}^Na_{i1}^2 ATA(1,1)=[a11...ai1...aN1]⎣⎢⎢⎢⎢⎡a11...ai1...aN1⎦⎥⎥⎥⎥⎤=i=1∑Nai12
A T A ( 1 , 2 ) = [ a 11 . . . a i 1 . . . a N 1 ] [ a 12 . . . a i 2 . . . a N 2 ] = ∑ i = 1 N a i 1 a i 2 A^TA(1,2) = \begin{bmatrix}a_{11} & ... & a_{i1} & ... & a_{N1}\end{bmatrix} \begin{bmatrix}a_{12} \\ ... \\ a_{i2} \\... \\ a_{N2} \end{bmatrix} = \sum\limits_{i=1}^Na_{i1}a_{i2} ATA(1,2)=[a11...ai1...aN1]⎣⎢⎢⎢⎢⎡a12...ai2...aN2⎦⎥⎥⎥⎥⎤=i=1∑Nai1ai2
A T A ( 1 , 4 ) = [ a 11 . . . a i 1 . . . a N 1 ] [ n 1 x . . . n i x . . . n N x ] = ∑ i = 1 N a i 1 n i x A^TA(1,4) = \begin{bmatrix}a_{11} & ... & a_{i1} & ... & a_{N1}\end{bmatrix} \begin{bmatrix}n_{1x} \\ ... \\ n_{ix} \\... \\ n_{Nx} \end{bmatrix} = \sum\limits_{i=1}^Na_{i1}n_{ix} ATA(1,4)=[a11...ai1...aN1]⎣⎢⎢⎢⎢⎡n1x...nix...nNx⎦⎥⎥⎥⎥⎤=i=1∑Nai1nix
A T A ( 5 , 6 ) = [ n 1 y . . . n i y . . . n N y ] [ n 1 z . . . n i z . . . n N z ] = ∑ i = 1 N n i y n i z A^TA(5,6) = \begin{bmatrix}n_{1y} & ... & n_{iy} & ... & n_{Ny}\end{bmatrix} \begin{bmatrix}n_{1z} \\ ... \\ n_{iz} \\... \\ n_{Nz} \end{bmatrix} = \sum\limits_{i=1}^Nn_{iy}n_{iz} ATA(5,6)=[n1y...niy...nNy]⎣⎢⎢⎢⎢⎡n1z...niz...nNz⎦⎥⎥⎥⎥⎤=i=1∑Nniyniz
所以:
A T A = [ ∑ i = 1 N a i 1 2 ∑ i = 1 N a i 1 a i 2 ∑ i = 1 N a i 1 a i 3 ∑ i = 1 N a i 1 n i x ∑ i = 1 N a i 1 n i y ∑ i = 1 N a i 1 n i z ∑ i = 1 N a i 2 a i 1 ∑ i = 1 N a i 2 2 ∑ i = 1 N a i 1 a i 3 ∑ i = 1 N a i 1 n i x ∑ i = 1 N a i 1 n i y ∑ i = 1 N a i 1 n i z ∑ i = 1 N a i 3 a i 1 ∑ i = 1 N a i 3 a i 2 ∑ i = 1 N a i 3 2 ∑ i = 1 N a i 3 n i x ∑ i = 1 N a i 3 n i y ∑ i = 1 N a i 3 n i z ∑ i = 1 N n i x a i 1 ∑ i = 1 N n i x a i 2 ∑ i = 1 N n i x a i 3 ∑ i = 1 N n i x 2 ∑ i = 1 N n i x n i y ∑ i = 1 N n i x n i z ∑ i = 1 N n i y a i 1 ∑ i = 1 N n i y a i 2 ∑ i = 1 N n i y a i 3 ∑ i = 1 N n i y n i x ∑ i = 1 N n i y 2 ∑ i = 1 N n i y n i z ∑ i = 1 N n i z a i 1 ∑ i = 1 N n i z a i 2 ∑ i = 1 N n i z a i 3 ∑ i = 1 N n i z n i x ∑ i = 1 N n i z n i y ∑ i = 1 N n i z 2 ] A^TA = \begin{bmatrix}\sum\limits_{i=1}^Na_{i1}^2 & \sum\limits_{i=1}^Na_{i1}a_{i2} & \sum\limits_{i=1}^Na_{i1}a_{i3} & \sum\limits_{i=1}^Na_{i1}n_{ix} & \sum\limits_{i=1}^Na_{i1}n_{iy} & \sum\limits_{i=1}^Na_{i1}n_{iz} \\ \sum\limits_{i=1}^Na_{i2}a_{i1} & \sum\limits_{i=1}^Na_{i2}^2 & \sum\limits_{i=1}^Na_{i1}a_{i3} & \sum\limits_{i=1}^Na_{i1}n_{ix} & \sum\limits_{i=1}^Na_{i1}n_{iy} & \sum\limits_{i=1}^Na_{i1}n_{iz} \\ \sum\limits_{i=1}^Na_{i3}a_{i1} & \sum\limits_{i=1}^Na_{i3}a_{i2} & \sum\limits_{i=1}^Na_{i3}^2 & \sum\limits_{i=1}^Na_{i3}n_{ix} & \sum\limits_{i=1}^Na_{i3}n_{iy} & \sum\limits_{i=1}^Na_{i3}n_{iz} \\ \sum\limits_{i=1}^Nn_{ix}a_{i1} & \sum\limits_{i=1}^Nn_{ix}a_{i2} & \sum\limits_{i=1}^Nn_{ix}a_{i3} & \sum\limits_{i=1}^Nn_{ix}^2 & \sum\limits_{i=1}^Nn_{ix}n_{iy} & \sum\limits_{i=1}^Nn_{ix}n_{iz} \\ \sum\limits_{i=1}^Nn_{iy}a_{i1} & \sum\limits_{i=1}^Nn_{iy}a_{i2} & \sum\limits_{i=1}^Nn_{iy}a_{i3} & \sum\limits_{i=1}^Nn_{iy}n_{ix} & \sum\limits_{i=1}^Nn_{iy}^2 & \sum\limits_{i=1}^Nn_{iy}n_{iz} \\ \sum\limits_{i=1}^Nn_{iz}a_{i1} & \sum\limits_{i=1}^Nn_{iz}a_{i2} & \sum\limits_{i=1}^Nn_{iz}a_{i3} & \sum\limits_{i=1}^Nn_{iz}n_{ix} & \sum\limits_{i=1}^Nn_{iz}n_{iy} & \sum\limits_{i=1}^Nn_{iz}^2 \end{bmatrix} ATA=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡i=1∑Nai12i=1∑Nai2ai1i=1∑Nai3ai1i=1∑Nnixai1i=1∑Nniyai1i=1∑Nnizai1i=1∑Nai1ai2i=1∑Nai22i=1∑Nai3ai2i=1∑Nnixai2i=1∑Nniyai2i=1∑Nnizai2i=1∑Nai1ai3i=1∑Nai1ai3i=1∑Nai32i=1∑Nnixai3i=1∑Nniyai3i=1∑Nnizai3i=1∑Nai1nixi=1∑Nai1nixi=1∑Nai3nixi=1∑Nnix2i=1∑Nniynixi=1∑Nniznixi=1∑Nai1niyi=1∑Nai1niyi=1∑Nai3niyi=1∑Nnixniyi=1∑Nniy2i=1∑Nnizniyi=1∑Nai1nizi=1∑Nai1nizi=1∑Nai3nizi=1∑Nnixnizi=1∑Nniynizi=1∑Nniz2⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
接著看 A T b A^Tb ATb:
A T b = [ a 11 . . . a i 1 . . . a N 1 a 12 . . . a i 2 . . . a N 2 a 13 . . . a i 3 . . . a N 3 n 1 x . . . n i x . . . n N x n 1 y . . . n i y . . . n N y n 1 z . . . n i z . . . n N z ] [ b 1 . . . b i . . . b N ] = [ ∑ i = 1 N a i 1 b i ∑ i = 1 N a i 2 b i ∑ i = 1 N a i 3 b i ∑ i = 1 N n i x b i ∑ i = 1 N n i y b i ∑ i = 1 N n i z b i ] \begin{aligned}A^Tb &= \begin{bmatrix}a_{11} & ... & a_{i1} & ... & a_{N1} \\ a_{12} & ... & a_{i2} & ... & a_{N2} \\ a_{13} & ... & a_{i3} & ... & a_{N3} \\ n_{1x} & ... & n_{ix} & ... & n_{Nx} \\ n_{1y} & ... & n_{iy} & ... & n_{Ny} \\ n_{1z} & ... & n_{iz} & ... & n_{Nz} \end{bmatrix}\begin{bmatrix}b_1 \\ ... \\ b_i \\ ... \\ b_N \end{bmatrix} \\&= \begin{bmatrix}\sum\limits_{i=1}^Na_{i1}b_i \\ \sum\limits_{i=1}^Na_{i2}b_i \\ \sum\limits_{i=1}^Na_{i3}b_i \\ \sum\limits_{i=1}^Nn_{ix}b_i \\ \sum\limits_{i=1}^Nn_{iy}b_i \\ \sum\limits_{i=1}^Nn_{iz}b_i \end{bmatrix}\end{aligned} ATb=⎣⎢⎢⎢⎢⎢⎢⎡a11a12a13n1xn1yn1z..................ai1ai2ai3nixniyniz..................aN1aN2aN3nNxnNynNz⎦⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡b1...bi...bN⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡i=1∑Nai1bii=1∑Nai2bii=1∑Nai3bii=1∑Nnixbii=1∑Nniybii=1∑Nnizbi⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
最後對 ( A T A ) (A^TA) (ATA)取逆,然後左乘 A T b A^Tb ATb,即可得到最小二乘解 x ^ = ( A T A ) − 1 A T b \hat{x} = (A^TA)^{-1}A^Tb x^=(ATA)−1ATb
SVD矩陣分解
假設矩陣 A A A的奇異值分解為 A = U Σ V ∗ A = U\Sigma V^* A=UΣV∗,那麼 A + = V Σ + U ∗ A^+=V\Sigma^+ U^* A+=VΣ+U∗。證明參考Pseudoinverse matrix and SVD。