自由度的理解
自由度
在 SLAM 算法里,我们会经常看到自由度
这个概念,例如单应矩阵的自由度是8
,基础矩阵的自由度是7
,但是用旋转矩阵表达的旋转的自由度却是3
。我一开始也很迷茫,什么是自由度啊?后面就慢慢理解了一点。
自由度,可以理解为独立信息的维度。下面是一个例子:
小明考了三门课程,语文、数学和英语,三门课程( n = 3 n = 3 n=3)的平均分是60分( x ˉ = 60 \bar{x} = 60 xˉ=60)。我们需要求三门课程的分数分别是多少。
在这个问题下,自由度 F
是多少?
是 3
吗?不是,是 2
。为什么?
由于存在条件 x ˉ \bar{x} xˉ 的限制,在我们猜三门分数的时候,只能猜两门课程的分数。为什么?
因为有条件 x ˉ = 60 \bar{x} = 60 xˉ=60 的约束,我们固定两门分数时,第三门一定是也固定下来的。因此自由度 F = 2 F=2 F=2 。
一般的情况下,自由度等于变量个数减1, F = n − 1 F = n -1 F=n−1。
例如计算方差的公式:
S 2 = ∑ ( x i − x ˉ ) 2 n − 1 S^2 = \frac{\sum(x_i - \bar{x})^2}{n-1} S2=n−1∑(xi−xˉ)2
右式的分母是自由度, F = n − 1 F = n - 1 F=n−1
为什么是 n − 1 n - 1 n−1 而不是 n n n?
因为分子存在平均值 x ˉ \bar{x} xˉ,已经用掉了一个自由度。因此,剩下的有用信息是n-1维,而不是n维。
单应矩阵
单应矩阵的推导以后写吧,这里直接给出矩阵形式的求解公式:
[ 0 0 0 − u 1 − v 1 − 1 u 1 v 2 v 1 v 2 v 2 u 1 v 1 1 0 0 0 − u 1 u 2 − v 1 u 2 − u 2 ] [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ] = 0 \begin{bmatrix}0 & 0 & 0 & -u_1 & -v_1 & -1 & u_1v_2 & v_1v_2 & v_2 \\ u_1 & v_1 & 1 & 0 & 0 & 0 & -u_1u_2 & -v_1u_2 & -u_2 \end{bmatrix} \begin{bmatrix}h_1 \\ h_2 \\ h_3 \\ h_4 \\ h_5 \\ h_6 \\ h_7 \\ h_8 \\h_9 \end{bmatrix} = 0 [0u10v101−u10−v10−10u1v2−u1u2v1v2−v1u2v2−u2] h1h2h3h4h5h6h7h8h9 =0
单应矩阵
H
3
x
3
H_{3x3}
H3x3 一共有 9
个元素,那么它的自由度是多少呢?
公式左右两边同时乘以一个不为 0
的数,公式都恒成立。这叫尺度等价性,这里固定了一个自由度,因此单应矩阵的自由度
F
=
9
−
1
=
8
F = 9 - 1 = 8
F=9−1=8
自由度是 8
,因此需要提供 8
个值进行解算,然后一对匹配点可以通过 2
个值,因此只需要 4
对匹配点就可以解算单应矩阵。见单应矩阵应用,就是用了 4
对点进行计算。
基础矩阵
基础矩阵的矩阵形式求解公式如下:
[ u 1 u 2 v 1 u 2 u 2 u 1 v 2 v 1 v 2 v 2 u 1 v 1 1 ] [ f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 f 9 ] = 0 \begin{bmatrix} u_1u_2 & v_1u_2 & u_2 & u_1v_2 & v_1v_2 & v_2 & u_1 & v_1 & 1 \end{bmatrix} \begin{bmatrix} f_1 \\ f_2 \\ f_3 \\ f_4 \\ f_5 \\ f_6 \\ f_7 \\ f_8 \\f_9 \end{bmatrix} = 0 [u1u2v1u2u2u1v2v1v2v2u1v11] f1f2f3f4f5f6f7f8f9 =0
基础矩阵
F
3
x
3
F_{3x3}
F3x3 一共有 9
个元素,但是它有两个约束:
- 尺度等价性
- 基础矩阵的秩为2
因此,基础矩阵的自由度为 9 − 2 = 7 9 - 2 = 7 9−2=7。
因此,最少7
对匹配点就可以算出基础矩阵,但是在ORB_SLAM里用了 8
对点。计算方法可见:基础矩阵计算
其他碎碎念
旋转矩阵表示的旋转,自由度是 3
,但是旋转矩阵有 9
个元素,因此旋转矩阵是冗余的。
但是如果只用 3
个元素表达旋转,例如旋转向量和欧拉角,存在奇异性,有些时候会丢失一个自由度。
因此表达 3
个自由度的旋转,最少需要 4
个元素,SLAM里用的就是大名鼎鼎的 四元数
本质矩阵
E
3
x
3
E_{3x3}
E3x3也有9
个元素,但是它的自由度为5
。为什么?
E
=
t
×
R
E = t \times R
E=t×R,其中平移有3
个自由度,而旋转也有3
个自由度,因此6
个值便可以固定一个本质矩阵。
但是由于
P
~
c
1
T
E
P
~
c
2
=
0
\tilde{P}_{c1}^T E \tilde{P}_{c2} = 0
P~c1TEP~c2=0对极几何的约束,基础矩阵也存在尺度等价性,因此自由度等于3 + 3 - 1 = 5
。
大佬的笔记
大佬的网易云笔记
b站视频:自由度的解释