第六期:视觉前端
第六期主要介绍前端的结构,关键帧方面的提取,如何选择等工程方面的知识。
前端的工作
分为front-end和back-end,front-end主要的工作是关键帧的选择和特征点的提取、选择、匹配以及路标点的提取,这些初始值可能不是很精确,后续传递到后端,以某种方式对其进行优化。
前端一般会有一个初始化的过程,不管是单目还是双目,对VIO还有IMU的初始化估计,在运动起来过后会涉及到特征点、路标点的追踪问题,当追踪失败还会有丢失处理等操作。对于相机和路标的建模,相机建模主要涉及到的是其$\bf{R}$和$\bf{t}$,路标点可能的选取有绝对坐标xyz,逆深度$\rho$,灰度值等等。还有一个现实的问题在于是否需要关键帧、如何选取、怎么控制其数量、何时进行三角化等等。
理论上后端理论的不同应该会影响结果,但在实现的效果中,发现这些差异很难在最终精度上体现出来,相反前端能体现一个SLAM的追踪效果。
某些理想情况下,仿真数据可以模拟较好的结果,我拿到的模型在某种特殊环境下可以比其他模型更好的接近理想值,但是这个模型不见得跟真实情况符合,这个跟深度学习里的overfitting类似。我们可以假设相机的重投影误差是符合高斯分布的,但是不能保证前端选出来的路标点关于关键帧的重投影误差实际符合这个分布,这个问题在实际操作的环境中是很难说清楚的。
前端的每套做法都不一样,不能直接说优劣,只能说从整体效果来看,哪个方法对于某一方面方面鲁棒性更好,效果更优。
光流法是早期07-08年提出的方法了,PTAM、Tango都是最早用在硬件上的光流法,它的缺点也是明显的,受光照影响严重。
特征点提取、匹配和光流
图为传统的光流前端框架。
角点提取
第一种情况,很明显能能通过小柱子的顶端看到红框能和第2个绿框相对应,但是第二种情况中,图像框对应的图片没有明显梯度的变化,都相似,就不能找到对应了。
单纯的角点提取算法早在上世纪70年代就应该解决了。
FAST和GFTT角点的特点,GFTT是对Harris评分做了个改进
光流
对光流的简单介绍
先从模糊的图像出发,计算光流,再慢慢追到高分辨率的图像光流中,这些都是经典的算法了。
关键帧与三角化
关键帧
Tracking需要实时,一般来说mapping不需要实时,后端要是处理所有帧,会影响tracking实时性,另外如果相机停止或者两帧之间很接近几乎一样,就会影响逆深度的求取,导致后端问题退化。
三角化
lankmark数量不够可能会导致相机tracking已有的特征点出问题,导致定位失败。
通用的三角化数学描述。其实三角化是为了解决通过几帧对某一相同路标点的观测,来确定这一路标点的三维位置这一问题。感兴趣可以取关键帧数量为2来推导理解一下,最终的结论就是因为目标函数的最小值为当$D^TD$的奇异值取最小值时得到,那么$\bf{y}$应该取$D^TD$分解后对应特征向量矩阵的最后一维向量,即$\bf{y}=\bf{u}_4$。