SLAM中的SVD分解
1.SVD分解的作用
SVD分解在SLAM中主要有以下两个方面的作用
1.用于求解齐次线性方程的最小二乘解
2.对基础矩阵或者本质进行分解,将其第三个奇异值强制置为0,使其秩为2
2 求解齐次线性方程的最小二乘解
2.1求解单应性矩阵
方程
A
h
=
0
;
Ah = 0;
Ah=0;
该方程严格等于0可能无解,一般求解其最小二乘解,其对应的代价函数为
f
(
h
)
=
1
2
(
A
h
)
T
(
A
h
)
=
1
2
h
T
A
T
A
h
f(h)=\frac{1}{2}(Ah)^T(Ah)=\frac{1}{2}h^TA^TAh
f(h)=21(Ah)T(Ah)=21hTATAh
问题转换为求解该代价函数的极值,令其导数为0有
d
f
d
h
=
0
\frac{df}{dh} = 0
dhdf=0
A
T
A
h
=
0
A^TAh = 0
ATAh=0
由于单应性矩阵尺度不确定性的特性会限制
∣
∣
h
∣
∣
=
1
||h|| = 1
∣∣h∣∣=1,该问题就转换为求解
A
T
A
A^TA
ATA所对应的最小的特征值对应的特征向量,又
A
T
A
=
(
U
D
V
T
)
T
(
U
D
V
T
)
=
V
D
T
U
T
U
D
V
T
=
V
D
T
D
V
T
=
(
V
−
1
)
−
1
D
T
D
V
−
1
A^TA = (UDV^T)^T(UDV^T) = VD^TU^TUDV^T = VD^TDV^T = (V^{-1})^{-1}D^TDV^{-1}
ATA=(UDVT)T(UDVT)=VDTUTUDVT=VDTDVT=(V−1)−1DTDV−1
所以
A
T
A
A^TA
ATA对应的特征值为
D
T
D
D^TD
DTD对角线上的元素,即为矩阵奇异值的平方,对应的特征向量则为
V
T
V^T
VT的列向量,而矩阵奇异值默认是按照从大到小的顺序进行排列的,所以矩阵
V
T
V^T
VT的最后一列的所对应列向量就是最小的特征值所对应的向量,就是该方程的最小二乘解