一步步带你看懂orbslam2源码--单目初始化(三)


ORB-SLAM2目录:

   一步步带你看懂orbslam2源码–总体框架(一)
   一步步带你看懂orbslam2源码–orb特征点提取(二)
   一步步带你看懂orbslam2源码–单目初始化(三)
   一步步带你看懂orbslam2源码–单应矩阵/基础矩阵,求解R,t(四)
   一步步带你看懂orbslam2源码–单目初始化(五)


回顾:
  好久没更新啦,耽搁了这么久,实在是最近事情有点多,一直抽不出时间来写,趁着空闲之际,赶紧更新一波.上一节我们主要讲解了关于ORB特征点的原理以及源码中的实现,想必读完上节,大家应该对什么是ORB,怎么提取Oriented FAST关键点,怎么计算despritor以及如何进行四叉树存储,筛选高质量特征点,保证特征点提取的均匀性.
  接下来,有了图片的特征点信息之后,我们将正式进入Track();函数进行前端追踪,估计相机的POSE,创建关键帧等等.本文将讲解orb-slam2中的单目初始化,由于单目初始化设计内容较多,故将分为几次叙述.同时为了控制每章的规模,不至于文章太长导致读者们失去了阅读的兴趣.


理论环节
本质矩阵E/基础矩阵F
(1)对极约束

  如上图所示,空间中一点 P P P 投影在 c a m e r a 1 camera1 camera1的成像平面 I 1 I_1 I1上的 p 1 p_1 p1 ,同时投影在 c a m e r a 2 camera2 camera2的成像平面 I 2 I_2 I2上的 p 2 p_2 p2 .其中, l 1 l_1 l1 l 2 l_2 l2 称为极线, O 1 O_1 O1- O 2 O_2 O2 连成的线称为基线,由 O 1 O_1 O1- O 2 O_2 O2- P P P组成的面称为极平面.由于投影在平面 I 1 I_1 I1 上的点 p 1 p_1 p1 拥有无穷多个可能的 P P P ,且位于 O 1 O_1 O1- P P P 的射线上.所以 p 1 p_1 p1经过旋转变换投影到平面 I 2 I_2 I2 上的点 p 2 p_2 p2 可能位于极线 l 2 l_2 l2 上的任意一点,这就是所谓的对极约束,即由一个点投影后约束到一条线之上,幸好由于前面正确的特征点匹配,我们已经知道了 p 2 p_2 p2点的确确位置,所以反过来通过三角测量以及最小化重投影误差来求解 P P P 点的位置以及两个 c a m e r a camera camera之间的 P O S E POSE POSE.

   注意:前提必须是正确的特征点匹配,错误的特征点匹配将导致错得离谱,到这里,读者们应该知道前端的特征点匹配对于系统的可靠性是有多么的重要了吧.

  接下来让我们来看看对极约束的数学表达,假设 x 1 x_1 x1, x 2 x_2 x2 是两个像素点的归一化平面坐标,从 c a m e r a 1 camera1 camera1 c a m e r a 2 camera2 camera2的旋转变换矩阵为: T = [ R ∣ t ] T=[R|t] T=[Rt],所以我们可以得到 x 2 = R x 1 + t x_2=Rx_1+t x2=Rx1+t将上式同时左乘t^,可得:

   补充: p 2 T F 21 p 1 = 0 p^T_2F_{21}p_1=0 p2TF21p1=0 ,可以写成 p 2 T l 2 = 0 p^T_2l_2=0 p2Tl2=0 ,表示 p 2 p_2 p2 在直线 l 2 l_2 l2上,表示 F 21 F_{21} F21 p 1 p_1 p1 投影到帧2图像中的直线 l 2 l_2 l2 上,这样子讲是不是可以更加准确的理解对极约束的物理意义呢?事实上,上面计算出来的基础矩阵 F 或者本质矩阵 E 都是表示了从帧1到帧2的变化,这在实际代码编程中将具有重要的意义.

(2)基础矩阵的计算

   参考"视觉SLAM十四讲"中的说明,根据定义矩阵 F F F是一个3×3的矩阵,内有9个未知数.那么,是不是任意一个3×3的矩阵都可以被当成基础矩阵呢?从F的构造方式上看,有以下值得注意的地方;

  • 本质矩阵是由对极约束定义的。由于对极约束是等式为零的约束,所以对 E 乘以任意非零常数后,对极约束依然满足.我们把这件事情称为 E 在不同尺度下是等价的.
  • 本质矩阵 E 的奇异值必定是 [ σ , σ , 0 ] T [σ, σ, 0]^T [σ,σ,0]T的形式,这称为基础矩阵的内在性质.
  • 另一方面,由于平移和旋转各有三个自由度,故 F F F共有六个自由度.但由于尺度等价性,故 F F F实际上有五个自由度.
       5个自由度矩阵的求解理论上最少可用五点对,但是实际操作中仍然采用八点法来进行求解,其本质上没有太大区别.假设一点对分别为: p 2 = ( u 2 , v 2 , 1 ) p_2=(u_2,v_2,1) p2=(u2,v2,1) p 1 = ( u 1 , v 1 , 1 ) p_1=(u_1,v_1,1) p1=(u1,v1,1),根据对极约束可得.
    [ u 2 v 2 1 ] [ f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 f 9 ] [ u 1 v 1 1 ] = 0 (1) \begin{bmatrix} u_2 &v_2 &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} \begin{bmatrix} u_1 \\ v_1 \\ 1 \end{bmatrix}\tag{1}=0 [u2v21]f1f4f7f2f5f8f3f6f9u1v11=0(1)

化简可得:
u 1 u 2 f 1 + u 1 v 2 f 2 + u 1 f 3 + v 1 u 2 f 4 + v 1 v 2 f 5 + v 1 f 6 + u 2 f 7 + v 2 f 8 + f 9 = 0 u_1u_2f_1+u_1v_2f_2+u_1f_3+v_1u_2f_4+v_1v_2f_5+v_1f_6+u_2f_7+v_2f_8+f_9=0 u1u2f

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值