[3DV]视觉里程计教程 VO tutorial part ii

274 阅读4分钟

前言 该教程是比较经典的系统介绍VO的文章,有两个部分。part i 主要介绍VO在30年(2011年前)VO发展历史,关注相机模型和校正、单目或双目运动估计过程的表述及其优劣势。part ii主要关注特征匹配及其鲁棒性的保证,包括点特征检测以及相应的异常检测机制,以及RANSAC和加速机制、误差建模、回环检测及BA。

什么是视觉里程计?

视觉里程计是通过一个或多个相机(视角)来估计主体(相机所在)运动的过程,而无需依赖GPS或IMU等外定位手段。

特征提取和匹配

特征点法主要有两种:

  • 特征跟踪:在一个视角中检测特征后,在之后的视角使用局部搜索来对特征进行追踪。
  • 特征匹配:在所有视角中独立地提取特征,然后利用特征描述子进行匹配。

特征跟踪法适用于视角变换不大的场景,而后者适用于视角变换较大的情况。

什么是特征?

特征是一幅图像中区别于其邻域的强度、颜色或纹理的区域,比如角点、区块等。
A local Feature is an image pattern that differs from its immediate neighborhood in terms of intensity,color or texture.

角点(Corner)是图像中两条边的交点,而区块(Blob)则是不同于边缘(edges)和角点的特殊区域。

特征提取

特征提取是找出图像中显著的关键点以便进行匹配/跟踪。

  • 常见的角点检测器有:Harris、FAST

  • 常见的区块检测器由:SIFT、SURF

角点检测器的优势是运算速度快,但受尺度影响大、辨别能力较差。区块检测器辨识能力强、对尺度、旋转以及仿射具有较好的鲁棒性但运算速度慢。当然,也可以通过一些技巧使检测器具备尺度不变性和旋转不变性。

特征检测包含两个步骤:

  • 在整幅图片中使用特征滤波器或相应函数(比如SIFT中的DoG,Harris中的response function)
  • 使用NMS找出局部最大值作为特征

特征描述

特征描述的目的是将检测到的特征转换为紧凑的描述子以便进行匹配,如SSD或NCC来进行匹配。

SIFT中使用梯度直方图来构成128维的描述子,但对角点无法描述。

BRIEF比较特征点附近的像素对大小关系来构成二进制描述子,使用Hamming距离计算相似度。

特征匹配

在另一幅图中搜索对应的同一个特征点。最简单的方法就是暴力匹配。

相互一致性检测(Mutual Consistency Check):应对两幅图中特征点数量不同,只有在双方都认为对方是最优匹配时才正确。

有约束匹配(Constrained Matching):如极线搜索

特征跟踪

在第一张图像中提取特征,然后在后续帧中进行搜索。如光流法KLT。

异常检测和优化

为什么要进行异常排除?

由于模型的强假设(光照变换、相机纯旋转、以及仿射变换),匹配好的特征点中往往有很多外点(outliers)。

异常检测将会是VO中最精妙的部分。

RANSAC

随机采样一致性的基本思想是利用随机采样的点来计算模型参数,同时用其他点来验证,一致性最高(获得内点最多)的模型(参数)被认为是正确结果。

位姿图优化

位姿图是以相机位姿作为节点,相机变换作为边的图。其优化目标是最小化边约束(Edge Constraint)

CiTijCj2\sum ||C_i - T_{ij}C_j||^2

如果能使用回环检测,将会很好提高其效果。

Bundle Adjustment

BA优化是一种在多帧中同时优化相机参数和三维特征点位置的方法。其优化目标是最小化重投影误差(Reprojection error),即在第kk帧的相机位姿XkX_k下,以及第ii个3D路标点YiY_i重投影回相机内的坐标和像素坐标进行作差

argminYi,Xkpkif(Xk,Yi)2\mathop{argmin}\limits_{Y^i,X_k} \sum||{p^i_k - f(X_k,Y^i)}||^2

滑动窗口BA是利用动态选取的n帧进行优化,从而利用历史帧减少漂移。

M个路标点,N个相机位姿下,BA的时间复杂度是O(M+N)3O(M+N)^3的。