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

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

  • 视觉前端算法
  • 特征+光流跟踪算法
  • 关键帧与三角化

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

视觉前端算法

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

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

特征+光流跟踪算法

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

对于图像中存在视角变化的目标区域,需要添加warp function计算光流:
I ( x , y , t ) = I ( W ( x + d x , y + d y ) , t + d t ) \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 + d x , y + d y ) = [ 1 + p 1 p 3 p 5 p 2 1 + p 4 p 6 ] [ x + d x y + d y 1 ] \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+p1p2p31+p4p5p6]x+dxy+dy1

式中 p 1 − p 6 p_1-p_6 p1p6为仿射变换参数。

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

关键帧与三角化

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

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

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

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

你可能感兴趣的:(从零开始手写VIO)