通常slam中,会用到一些直接线性方程(DLT)求解的方法,现在来探索一下传统线性方程的求解过程。

对于线性方程组,解的判定条件如下:
1. Ax = 0 总有解,至少有零解

  1. Amn x = 0

    • r(A) = n 只有零解
    • r(A) < n 有无穷多解
  2. Amn x = b

    • r(A) != r(A|b) 无解
    • r(A) = r(A|b) = n 有唯一解
    • r(A) = r(A|b) = r < n 有无穷多解

通常情况我们总是遇到 Amn x = b 的方程,参数数量和未知数个数有如下关系:
* m < n , 未知数大于方程数, 有无穷多解, 存在一个高维的解空间
* m = n , 如果A可逆,则有唯一解, 解为 $ x = A^{-1}b$
* m > n , 方程数大于未知数, 方程一般没有解, 除非 b 属于 A的列向量组成的子空间

对m>=n 且 r(A) =n 的情况,这种超定方程考虑最小二乘解, 通过广义逆的方式,可以进行求解, 具体可以使用SVD、QR分解等方法。
在x normalize到1的情况下,方程的最小二乘解就是矩阵 A‘A的最小特征值所对应的特征向量,具体证明参考相关教科书。

DLT Method

已知3D点,和对应的图像平面观测,可以通过直接线性变换求解 相机的位姿。 考虑p 为归一化平面表达,P为对应3D点,则满足: $$ sp = [R|t]P $$
待估计参数为增光矩阵 [R|t],有12个未知数, 每个特征点提供了2个线性方程, 则有6对匹配即可进行求解。 当点数超过6个的时候,求最小二乘解。

DLT不仅仅是用于SLAM中的pnp求相机位姿,更多的用途是求解相机属性参数和成像模型。