主要内容
本章开始进入视觉里程计(VO)部分,VO按是否需要提取特征,分为特征点法的前端和不提特征的前端。这一章讲的是基于特征点法的前端,分为以下内容。
- 特征点法:找到两张2D图像上的匹配点。
- 对极几何:根据2D-2D特征点对求解R,t。
- 三角测量:根据2D-2D特征点求深度。
- PnP:根据3D点云和匹配的2D图像求R,t。
- ICP:求两个点云之间的R,t。
关系是:
- 特征点法找到2D图像的匹配点对,用于对极几何和pnp
- 对极几何求出2D-2D的位姿。
- 根据对极几何求出的位姿,三角测量求出2D-2D的深度。
- 根据三角测量求出的深度,可以初始化单目SLAM,得到三维点信息;或用RGBD相机获得三维信息。知道3D信息,对于下一张2D图像,可根据特征点法找到的匹配点对,使用PNP,求出位姿信息和深度信息。
- 根据pnp求出的深度信息;或直接用RGBD得到的两个点云,可以用ICP,求出两个点云之间的位姿变换。
图片引自leeyau的博客
一、特征点法
这部分内容,讲述了提取2D图像的特征点,并对不同图像之间的特征点进行匹配,得到匹配的特征点对。这些匹配点是后面用来估计相机位姿的基础。
特征点:在SLAM中被成为路标。分为关键点和描述子。
对于SLAM来说,SIFT太慢,FAST没有方向信息,使用改进FAST的ORB特征。
ORB特征
关键点:Oriented FAST
是改进的,具有方向性的FAST描述子。
FAST用于检测局部像素灰度明显变化的位置,思想是看邻域内有没有连续N个和它差T灰度的点。加上NMS和其他遍历的加速trick。
ORB的改进:
- 根据FAST关键点的Harris响应值,选取前N大的,以固定特征点数目。
- 构建图像金字塔,解决尺度问题。
- 使用灰度质心法,解决旋转问题。(加一个几何中心到质心的向量)
描述子:BRIEF
是一种二进制描述子,描述了关键点附近两个像素的大小关系。
特征匹配
局部特征会导致误匹配,难以解决。
BRIEF描述子使用汉明距离进行相似性度量,快速近似最近邻(FLANN)适合数目多的特征点匹配。
二、对极几何
- 已知:匹配点对 p 1 p_1 p1, p 2 p_2 p2的像素坐标。
- 给定:两张二维图像,二维图像上特征点的匹配关系。
- 未知:P的三维空间坐标, I 1 I_1 I1到 I 2 I_2 I2的变换矩阵( T 1 , 2 T_{1,2} T1,2,即 R , t R,t R,t)。
一般是用于__单目SLAM的初始化__,用对极几何可求出位姿,在用三角测量估计三维空间点的位置后,就能用其他更准确的方法继续求解了。
1. 对极约束
设P在图1的相机坐标系下,坐标为:
P = [ X , Y , Z ] T P=[X,Y,Z]^T P=[X,Y,Z]T
p 1 p_1 p1, p 2 p_2 p2的像素坐标(单位像素):
s 1 p 1 = K P , s 2 p 2 = K ( R P + t ) s_1p_1=KP, s_2p_2=K(RP+t) s1p1=KP,s2p2=K(RP+t)
其归一化平面坐标(单位米):
x 1 = K − 1 p 1 , x 2 = K − 1 p 2 x_1=K^{-1}p_1,x_2=K^{-1}p_2 x1=K−1p1,x2=K−1p2
得到:
x 2 = R x 1 + t x_2=Rx_1+t x2=Rx1+t
这里的 x x x是齐次坐标,等式表达了一个齐次关系。
两边同时左乘 t ‘ {t‘} t‘,这个东西相当于与它做外积,得到的结果和它、 x 2 x_2 x2都垂直。因此再左乘一个 x 2 T x_2^T x2T,就得到了0。
最终得到:
x 2 T t ’ R x 1 = 0 x_2^Tt’Rx_1=0 x2Tt’Rx1=0
中间部分写成 E E E矩阵,称为本质矩阵:
x 2 T E x 1 = 0 x_2^TEx_1=0 x2TEx1=0
带入 p 1 p_1 p