视觉里程计
- 关键词:对极约束、本质矩阵、八点法
前言
上一篇文章中,简单说了一下特征点法的理论依据和应用。现在,假设我们从两张图像中得到了一些配对好的特征点,通过若干匹配好的特征点对,就可以求解到这些二维图像点的对应关系,恢复出在两关键帧之间相机的运动,那么,需要多少对匹配好的特征点才能正确估计相机位姿变换?又该怎样得到相机之间的位姿变化呢?
基础概念
(一)以上的问题就称之为对极几何,其完整概念为:
对极几何(Epipolar Geometry)是Structure from Motion问题中,在两个相机位置产生的两幅图像的之间存在的一种特殊几何关系,是sfm问题中2D-2D求解两帧间相机姿态的基本模型。
其中c0、c1为两个相机中心,p为空间中一点,p在c0、c1对应像平面上的投影分别为x0、x1。c0、c1连线与像平面的交点e0、e1称为极点(Epipoles),l0、l1称为极线(Epipolar Lines),c0、c1、p三点组成的平面称为极平面(Epipolar Plane)。
通过这个模型,我们得到两关键帧之间相机的位姿关系的约束,即对极约束,推导如下:
对极几何中最重要的一条公式是对极约束(Epipolar Constraint),下面让我们来推导出这个约束条件。
根据针孔相机模型,相机成像平面一点的像素坐标p和该点在世界坐标系下的3D坐标P有p=KP的关系,如果用齐次坐标表示则有:
dp=KP
其中d是空间点深度(为了将p的齐次项变为1),K是相机内参数矩阵,p和P都是齐次坐标。
于是如果以第一个相机的坐标系为参照,对于两个相机则有:
d0p0=KP,d1p1=K(RP+t)
其中R为旋转矩阵(Rotation),t为平移向量(Translation)。令x=K−1p,去掉内参K归一化成:
d0x0=P,d1x1=RP+t
由这两式得:
d1x1=R(d0x0)+t
两边同时叉乘t消去加号后面单独的t项:
t*d1x1=t*Rd0x0+t*t
进而:
t*d1x1=t*Rd0x0
再在两遍同时左乘一个x1:
x(T1)(t*d1x1)=x(T1)t*Rd0x0 #此处括号(T1)分别代表x上标和下标,T表转置,下同
由于等号左边x1乘上了一个和自身垂直的向量,所以等于0,故:
x(T1)t*Rx0=0
该等式称为对极约束(Epipolar Constraint),它的几何意义是O1、O2、P三者共面,对极约束中同时包含了平移和旋转。
对极约束的几何意义:x1、t、Rx0三者混合积为0,表示这三个向量共面,即上图中三角形的三边共面。
令E=t×R,得到对极约束的新形式:
x(T1)Ex0=0
E称为本质矩阵(Esential Matrix),由外参数R和t决定。
本质矩阵的几何意义:x(T1)l1=0,即x1在直线 l1=Ex0上,表示E将x0投影到另一帧图像中的直线l1上。
有了对极几何的模型,2D-2D的相机姿态可以通过如下过程求解:
①通过多组对应点(Correspondence)进行帧间匹配,求出本质矩阵E。
②通过对E进行分解求出外参数R和t,即相机姿态。
(二)本质矩阵
本质矩阵即对极约束中的矩阵E,对极约束简介的给出了两个匹配点的空间位姿关系,于是,根据两关键帧估计相机位姿变化问题变成一下两个步骤:
1、根据配对点的像素位姿求出本质矩阵E;
2、根据本质矩阵E求出R和t;
根据定义,本质矩阵E=t^R,是一个3*3矩阵,有9个未知数。从本质矩阵的构造方式上看:
1、本质矩阵在不同尺度下是等价的;
2、本质矩阵的奇异值必定是[a,a,0]T的形式,这是本质矩阵的内在性质;
3、刚体运动有6DOF,但是由于尺度等价,E实际上是5DOF;
从上述第三点来说,我们最少可以使用五对匹配好的特侦点来求解E,但是,本质矩阵的内在性质是非线性的,也就是说,在实际估计中会有问题,只考虑性质1,使用8对点来估计本质矩阵,这就是经典的八点法。以下都是数学推论就不赘述(主要还是这文档编辑公式编辑做的太烂了吧,有这功夫,都手推两三遍了)。
以上对极几何,是单目相机SLAM的重要基础,由于单目无法估计深度,必须通过三角测量的方式才能反推相机的位姿变化,所以垂直于相机成像平面的单方向上的运动是无法得到位姿信息的,这也是为什那么VINS要加IMU的原因之一,同时也是VINS的局限性,无法一开始就得到自身的稳定位姿。