深蓝学院从零开始手写VIO(五)——视觉前端

深蓝学院从零开始手写VIO(五)——视觉前端


声明:本专栏文章为深蓝学院《从零开始手写VIO》课程个人学习笔记,更多学习资源请咨询深蓝学院相关课程。

视觉前端算法

从大类上可以分为特征法和直接法两类,具体可参见《视觉SLAM十四讲》,课程这里给句几个简单的结论:

  • 光流法最成熟,但缺点明显(受光照干扰,依赖角点)。
  • Fast+光流是目前比较实用的快速算法,或者GFTT(Shi-Tomasi)+光流。
  • 特征法性能从好到坏:SIFT/SURF、BRISK、ORB。
  • 特征和光流都依赖于角点,但实际场景中角点并不明显。
  • 直接法不依赖角点,但实现效果依赖于所选取的场景点数目。

特征+光流跟踪算法

特征提取常使用角点,因为角点附近图像的梯度变换具有较高的可辨别性,包括Harris、FAST、GTFF等。在提取出一帧图像中的特征点后,通过光流跟踪,可以进一步确定对应特征点在下一帧图像中的位置。

对于图像中存在视角变化的目标区域,需要添加warp function计算光流:
I(x,y,t)=I(W(x+dx,y+dy),t+dt) \bm{I}(x,y,t)=\bm{I}(\bm{W}(x+dx,y+dy),t+dt) I(x,y,t)=I(W(x+dx,y+dy),t+dt)

其中W\bm{W}W为仿射变换函数:
W(x+dx,y+dy)=[1+p1p3p5p21+p4p6][x+dxy+dy1] \bm{W}(x+dx,y+dy)=\begin{bmatrix} 1+p_1 & p_3 & p_5\\ p_2 & 1+p_4 & p_6 \end{bmatrix}\left[\begin{array}{c}x+dx \\ y+dy \\ 1\end{array}\right] W(x+dx,y+dy)=[1+p1​p2​​p3​1+p4​​p5​p6​​]⎣⎡​x+dxy+dy1​⎦⎤​

式中p1p6p_1-p_6p1​−p6​为仿射变换参数。

而对于快速变化的图像,则可以采用金字塔光流提高光流的追踪距离。

关键帧与三角化

关键帧选取的由于主要有:1)为了后端的实时性考虑;2)避免相机出现停止,导致后端估计出现退化。关键帧的选择准则如下:

  • 关键帧不能太近(避免退化)
  • 关键帧不能太远(需要有足够的共视点)
  • 在VIO中,为了保证ba\bm{b}_aba​和bg\bm{b}_gbg​的不变,需要定期选取关键帧。

因此在不引起问题退化和计算量过度增加的情况下,应尽可能多的插入关键帧

在关键帧之间,或者关键帧和普通帧之间,可以通过三角化构建新特征的空间坐标。

上一篇:第17届科大讯飞杯 J-斐波那契和 (玄学 BM)


下一篇:ArcGIS紧凑型切片读取与应用3-紧凑型批量转分散型(附源码)