1. 首先什么是自由度
自由度,英语名Degrees of freedom,简写DOF。在学习SLAM的过程中多次看到自由度的概念,网上看有关于自由度的解释都过于抽象难以理解。先给出自由度比较好理解的定义:
- 自由度是n个变量在某个(些)约束下,能够自由变化的最多变量个数m为该约束下的自由度
- 自由度是用约束式求解矩阵所需要的最少个数。
记住这句话,再去理解各种矩阵自由度计算的例子。
先看看维基百科的解释:数学上,自由度是一个随机向量的维度数,也就是一个向量能被完整描述所需的最少单位向量数。举例来说,从电脑屏幕到厨房的位移能够用三维向量
a
i
^
+
b
j
^
+
c
k
^
a\hat{i} + b\hat{j} + c\hat{k}
ai^+bj^+ck^来描述,因此这个位移向量的自由度是3。自由度也通常与这些向量的坐标平方和,以及卡方分布中的参数有所关联。
这样的语言看着有些抽象。那为什么不用
a
o
1
o
2
⟶
a\overset{\longrightarrow}{o_1o_2}
ao1o2⟶(假设
o
1
o
2
⟶
\overset{\longrightarrow}{o_1o_2}
o1o2⟶为电脑屏幕到厨房方向的单位向量)来表示呢? 在这个例子里,位移是三维空间的位移,在三维空间位移这个约束下,最少需要三个方向向量(非线性相关的一组基)的多项式和才能表示三维空间中所有的位移,而电脑屏幕到厨房是特例,只用
o
1
o
2
⟶
\overset{\longrightarrow}{o_1o_2}
o1o2⟶不能表示三维空间中的其他位移。
再看例子:
- 若存在2个变量a和b,而a+b=6,那么他的自由度为1。因为其实只有a才能真正的自由变化,b会被a选值的不同所限制。在这个例子中a+b=6就是约束,可以自由变化的变量最多个数为1。所以自由度为1;
- 对于一个二维旋转矩阵, M r o t 2 d = [ c o s θ − s i n θ s i n θ c o s θ ] M_{rot2d} = \begin{bmatrix}cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} Mrot2d=[cosθsinθ−sinθcosθ],虽然这个 2 × 2 2\times 2 2×2的矩阵有四个变量,但是一旦其中的一个值确定了,其他三个值就确定了。比如说当知道 ( 0 , 0 ) (0,0) (0,0)位置下的 c o s θ = 1 cos\theta=1 cosθ=1,那么 s i n θ 肯定 = 0 sin\theta肯定=0 sinθ肯定=0,不会等于其他数字。所以在二维旋转矩阵这个约束下,可以自由变化的最多变量个数为1,矩阵自由度为1。用几何的方式来思考也很好理解,在一个二维平面下的旋转,只有一个变量就是旋转角度 θ \theta θ值。
关键词:约束、自由变化
2. 什么是矩阵的自由度
可以依据上文对自由度的解释应用到矩阵中。比如一个3*3的矩阵,具有9个元素,那么它的自由度最高就是9。但是9个元素可能由几个变量通过一定方式组合而成,比如旋转矩阵,只有 α , β , γ \alpha,\beta,\gamma α,β,γ三个旋转变量,通过三角函数组成了旋转矩阵,自由度只有3而不是9。再比如本质矩阵自由度为5、基础矩阵自由度为7、单应矩阵自由度为8
另外,以下是一个Stack Overflow
上的回答,以下是翻译,也可以增加对矩阵自由度的理解:(英文原文)
有几种方式来思考矩阵的自由度:
- 考虑一个m*n的矩阵。这个矩阵有mn个元素/变量。我们可以改变mn个数值来构造处mn个互相不同的矩阵,所以它有mn个自由度。
- 如果我们有一个上三角矩阵,维度是m*m,自由度等于多少?我们知道在这个矩阵里很多值都是0,实际上只有 m + ( m − 1 ) + . . . + 2 + 1 m + (m-1)+...+2+1 m+(m−1)+...+2+1个非0元素/变量,所以这个值就是上三角矩阵的自由度。
- 如果我们有一个2 * 2的旋转矩阵,自由度等于多少?这对矩阵中可能的值施加了巨大的限制。确实,一旦其中一个值确定了之后,其他的所有值都被确定了。这个旋转矩阵只有一个自由度。从几何的角度很容易看出来:一个2 * 2的旋转矩阵只能旋转一个角度,所以1就是它的自由度。
- 如果我们“equivalence classes”即“等价类”呢?如果我们知道任意矩阵的所有缩放都是相等的呢?我们还剩多少个自由度?对于任意矩阵,当位置 ( 1 , 1 ) (1,1) (1,1)上的元素非0,我们就可以对矩阵的所有元素除以这个元素,这时 ( 1 , 1 ) (1,1) (1,1)上的元素就等于1。现在考虑有两个矩阵 A A A和 B = 2 A B=2A B=2A,当我们缩放这两个矩阵使得它们的第一个元素为1,我们会发现这两个矩阵是等价的。因此,我们消除了一个自由度。这就是单应(矩阵)的例子。所以,对于一个 3 × 3 3\times 3 3×3的单应矩阵,只有8个自由度。这些自由度也可以用几何的方式来解释。
最后再回到我对自由度的理解:
自由度是n个变量在某个(些)约束下,能够自由变化的最多变量个数m为该约束下的自由度