一. 经过对极约束并行计算F和H矩阵初始化安全
VO初始化目的是为了得到准确的帧间相对位姿,并经过三角化恢复出初始地图点。初始化方法要求适用于不一样的场景(特别是平面场景),而且不要进行人为的干涉,例如选取视差大(large parallax)的场景(视差大表明相机移动会带来明显的图像变化,一般距离相机距离越远,距离相机光轴越近,视差越小)。ORB-SLAM中并行计算了适用于平面场景的单应性矩阵H和通常场景下的基础矩阵F,而后经过打分选取合适的。ORB-SLAM的初始化要求是比较高的,只有在肯定初始化安全的状况下,才会去初始化。spa
首先复习一下对极约束blog
F矩阵适用于3D点不共面的状况,咱们以左侧相机为参考系,约定基础
相机内参K,并行
空间点坐标P = [X, Y, Z]T; 齐次坐标为[X, Y, Z, 1]T方法
在Z=1归一化平面上的坐标为xi = [X/Z, Y/Z, 1]T,i=1, 2im
图像平面坐标为pi = [u, v],i=1, 2; 齐次坐标为[u, v, 1]地图
能够推出pi = Kximargin
对极约束就是知足:img
p2T K-T t^R K-1 p1=0
x2T t^R x1 = 0
其中 E = t^R 称为本质矩阵(Essential Matrix),F = K-T t^R K-1基础矩阵(Fundamental Matrix),根据匹配点的坐标p1, p2能够计算出F矩阵和E矩阵,E矩阵能够经过8点法求解线性方程组获得,而后经过对E矩阵奇异值分解E = UΣVT,注意其中奇异值应该是[σ, σ, 0]的形式,表示图像仅在2维空间中通过了缩放。若是发现得到奇异值不知足,须要将矩阵投影到E所知足的流形上。最后经过U, Σ, V计算出t和R
H矩阵适用于3D点共面的状况
设P点所在平面知足 nTP+d=0
将其结合对极约束p2 = K(RP+t)
能够获得H矩阵与匹配点坐标p1,p2之间的关系,一样能够经过求解线性方程而后分解矩阵的方法来获取t和R
二. 步骤
1. 在金字塔0层上提取特征点,匹配先后两帧,获得像素坐标下的匹配点。
2. 并行计算H矩阵和F矩阵,其中H矩阵使用归一化的DLT(直接线性变换)方法,F矩阵使用8-点法,具体能够参考[1], H矩阵使用8个点,F矩阵使用4个点,迭代次数设定为相同,打分机制也设定平衡。
3. 若是场景接近平面,或者视差较小,可使用单应性矩阵来解释。经过打分机制选择模型。
4. 利用选择的模型,恢复运动和地图点。分解H矩阵能够恢复出8种姿态,SVD分解E矩阵也能够恢复出4种姿态,经过深度值以及场景的先验信息,通常能够获得惟一知足要求的。可是小视角状况下会出现判断错误的状况出现,所以ORB-SLAM中选择使用这些备选姿态直接三角化出地图点,再经过视角,深度以及重投影偏差来断定是否有惟一解,若没有,则放弃,从新回到第一步去初始化。
5. 若初始化成功,则进行GlobalBundleAdjustment
相比于PTAM和LSD-SLAM,ORB在NewCollege的室外平面场景中初始化鲁棒性是比较出色的。
[1] 高翔,视觉SLAM十四讲