• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

从零手写VIO——(五)视觉前端 Frontend

人工智能 芝士奶盖 1811次浏览 0个评论

补充 深蓝学院-手写VIO 第六章 与《十四讲》前端知识不重合的部分。内容较少,没有前几章丰富。  

从零手写VIO——(五)视觉前端 Frontend

 

从零手写VIO——(五)视觉前端 Frontend
前端 Frontend 非常能体现一个 SLAM 的追踪效果
  • ORB-SLAM2 使用 Covisibility-Graph,具有较好的全局精度
  • DSO 使用带边缘化的滑动窗口,无回环时漂移较少

  从零手写VIO——(五)视觉前端 Frontend  

从零手写VIO——(五)视觉前端 Frontend
纵坐标为运行次数,横坐标为误差。越偏↖角效果越好。说明误差小的运行轮数多,也就是更多次迭代的结果呈现出来的好
  • Tango 使用 MSCKF,计算量明显少于其他算法

算法的结果和数据集关系很大:

  • Kitti 属于比较简单的(视野开阔,动态物体少,标定准确)
  • EUROC 一般(人工设定场景,纹理丰富,但曝光有变化)
  • TUM-Mono 比较难(场景多样,主要为真实场景)

 

从零手写VIO——(五)视觉前端 Frontend
直接法(↘)台阶、墙壁的线特征都可以使用,但特征点很难在这些纹理上提取到。光流法最早、最成熟,但容易受关照影响。FAST+光流/GFTT+光流是使用的快速算法。特征匹配需要特征具有旋转平移缩放不变性,SIFT/SURF最好,BRISK次之,ORB最差

特征点提取、匹配和光流

从零手写VIO——(五)视觉前端 Frontend
传统双目光流前端流程

使用角点的原因:

  1. 焦点可以避免如下图中对纹理不强的部分提取图像块,难以找到匹配的对象;
  2. 对边缘特征而言,整个线特征上的像素梯度没有较大改变;
  3. 可以用同一变换求得的 R, t 通过重投影误差求算其他图像块。
从零手写VIO——(五)视觉前端 Frontend
光流的局限性:①容易受光照变化影响;②只适合连续图像短距离追踪;③图像外观发生明显变换不适用;④对角点强依赖,对 Edge 类型点表现差;⑤稀疏光流不约束各点光流的方向统一,可能出现 outlier。

角点的梯度分布:

从零手写VIO——(五)视觉前端 Frontend
↗:无明显梯度特征,纹理特征少;↙:角点特征,x y方向有明显梯度特征;↘:边缘特征,仅有一个方向的梯度特征
  • Harris:
从零手写VIO——(五)视觉前端 Frontend
(1)
从零手写VIO——(五)视觉前端 Frontend
(2)
  • FAST:仅含像素亮度、不含计算的快速角点提取方式,也是《十四讲》中讲到的;
  • GFTT:在 Harris 基础上改进:Shi-tomasi 分数,增加固定选点数等。
从零手写VIO——(五)视觉前端 Frontend
(3)

光流的灰度不变假设:

从零手写VIO——(五)视觉前端 Frontend
(4)

一阶泰勒展开:

从零手写VIO——(五)视觉前端 Frontend
(5)
从零手写VIO——(五)视觉前端 Frontend
(6)

带 Warp function 的光流:

从零手写VIO——(五)视觉前端 Frontend
从零手写VIO——(五)视觉前端 Frontend
(7)

其中 W 为 Warp Function,通常取仿射变换:

从零手写VIO——(五)视觉前端 Frontend
(8)

其中 
[公式] 为 W 的参数,需要在线估计。   可以参考这篇论文: Baker S , Matthews I . Lucas-Kanade 20 Years On: A Unifying Framework[J]. International Journal of Computer Vision, 2004, 56(3):221-255.    

关键帧与三角化

如何选择关键帧:

  1. 关键帧之间不必太近(退化或三角化问题)
  2. 关键帧之间不能太远(共视点太少)
  3. VIO 中,定期选择关键帧(假设 [公式] 在关键帧期间不变,意思是在相机静止时,默认 [公式] 不变,但实际上是游走的)

 

从零手写VIO——(五)视觉前端 Frontend
如果相机静止,可能给后端留下没有用的优化,如图,会出现逆深度无法估计,不能三角化
  • 对于非关键帧,只执行前端算法,不参与后端优化
  • 对于非关键帧,误差会逐渐累积。直接该帧被作为关键帧插入后端,BA 才会保证窗口内的一致性

 

从零手写VIO——(五)视觉前端 Frontend
在计算量允许的范围内,且不引起退化,应尽可能多地插入关键帧

  ORB-SLAM2:使用非常宽松的关键帧策略(大多数只要后端线程 ldle 就会插入关键帧),然后在后端剔除冗余的关键帧。

从零手写VIO——(五)视觉前端 Frontend
DSO

  DSO:利用光度误差插入关键帧。然后在后端计算每个关键帧的 Active Landmarks,Marg 对窗口贡献是最低的。DSO的关键帧窗口通常有一个很远的和两三个很近的,其他几个分布在中间。   在单目 SLAM 中,通常在插入关键帧时计算新路标点的三角化。

三角化的数学描述

  • 某路标点 [公式] 在若干个关键帧 [公式] 中看到。
  • [公式] ,用齐次坐标表示。每次观测为 [公式] ,取归一化平面坐标(这样可以忽略掉内参)。
  • 记投影矩阵 [公式] ,为 World 系到 Camera 系。
  • 投影关系: [公式] ,其中 [公式] 为观测点的深度值(未知)。
  • 上式可以剔出 [公式] 的第三行,也就是对深度处理的一行:
从零手写VIO——(五)视觉前端 Frontend
(9)
  • 把 [公式] 带入到前两行,有:
从零手写VIO——(五)视觉前端 Frontend
(10)
  • 多次观测提供的方程,视 [公式] 为未知量,并移到等式一侧:
从零手写VIO——(五)视觉前端 Frontend
(11)
  • [公式] 是 [公式] 零空间中的一个非零元素。

  解法:

  • 由于 [公式] ,在观测值大于等于两次时,很可能满秩,无零空间。
  • 求最小二乘解:
从零手写VIO——(五)视觉前端 Frontend
(12)
  • 对 [公式] 进行 SVD:
从零手写VIO——(五)视觉前端 Frontend
(13)
  • [公式] 为奇异值,由大到小排列, [公式] 正交。取 [公式] 。
  • 判断解有效性的条件: [公式] 。
  • Rescale:在某场合(比如用 UTM 坐标的平移), [公式] 的数值大小差异明显,导致解不稳定,做一个缩放,很像归一化:
从零手写VIO——(五)视觉前端 Frontend
(14)
  • [公式] 为一个对角阵,取 [公式] 最大元素之逆即可。
  • 实用中,还需要加上 [公式] 投影的正负号的判定作为依据。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明从零手写VIO——(五)视觉前端 Frontend
喜欢 (0)

您必须 登录 才能发表评论!

加载中……