SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵

在上篇相机模型中介绍了图像的成像过程,场景中的三维点通过“小孔”映射到二维的图像平面,可以使用下面公式描述:

x=MX
其中,c是图像中的像点,M是一个3×4的相机矩阵,X是场景中的三维点。
通过小孔相机模型,可知假如从像点x向相机的中心C反投影一条射线xC,则该射线必定经过对应像点的三维空间点X,但显然仅仅通过一个像点无法确定X的具体位置,因为在射线xC上的任意空间点都可以通过“小孔”映射为像点x。一个像点不行,那么如果两个相匹配的像点呢?
x是三维点X的另一个像点,其对应相机的中心为C,那么从像点也反投影一条射线xc,并且该射线也必定经过X,也就是说从一对相匹配的像点反投影两条射线,必定相交于空间三维点X,如下图
SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵
很显然,一对匹配的像点之间存在这某种约束关系,这种约束被称为两视图的对极约束

本文主要介绍了两视图的对极约束-基础矩阵,并用几何和代数两种形式推导基础矩阵的表达形式以及从基础矩阵可以分解出相机的位姿(旋转和平移)。

对极几何

对极几何描述的是两视图之间的内存射影关系,同一个三维点在两个不同的视角下的像点存在着约束关系,如下图三维点X在两幅图像的像点分分别为x,x
SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵
对极几何主要涉及以下几个元素:

  • 基线(Baseline),两个相机中心的连线CC称为基线
  • 对极点 epipolar ,e,e是对极点,是基线和两个成像平面的交点,也就是两个相机在另一个成像平面的像点;e是右边的相机中心C在左边相机的像点,同样e是左边相机中心C在右边相机的像点。
  • 对极平面 epipolar plane,任何过基线的平面都被才称为对极平面,两个相机的中心CC,三维点X,以及其在两个相机的像点x,x,这5点必定在同一个对极平面上。当三维点X变化时,对极平面绕着基线旋转,形成对极平面束。
  • 对极线 epipolar line ,对极平面和成像平面的交线,所有的对极线相交于极点。

从上面的几何元素可知,对极几何和相机的内参、外参没有关系,和场景的结构也没有关系,仅和场景的一对匹配的像点有关系

基础矩阵F

给定一对图像(同一场景不同视角得到的图像),从上面的图可知,对于第一幅图像上的任一像点x,在第二幅图像中都有一条与之对应的对极线l,该对极线是像点x与过第一个相机中心C射线在第二幅图像上的投影,并且第二幅图像中与x相匹配的像点x必定在该对极线上。因此,存在一个像点x到另一个图像上对极线l的映射:

xl

基础矩阵F表示的就是这种从点到直线的映射。

F的几何推导

该推导来自《计算机视觉中的多视图几何》。

要将一幅图像上的像点x映射到另一幅图像对应的对极线l可以分为两步:第一步,将像点x映射到另一幅图像上与之对应的对极线l上的某点x上,xx的匹配点;第二步,连接对极点e与点x得到的直线就是对极线l

  • 点通过平面转移 如下图,平面π不通过两相机中心,过第一个相机的中心C和像点x的射线与π相交于点X。该点X再投影到第二幅图像上得到像点x,这个过程称为点通过平面的转移。
    SLAM入门之视觉里程计(3):两视图对极约束 基础矩阵
    X位于像点x和相机中心确定的射线上,其在另一幅图像上的像点x必然位于该射线在另一幅图像的投影也就是对极线l上。点x和点x都是三维点X的像点,这样第一副图像上的像点集合xi和第二幅图像上的像点集合xi是射影等价的,它们都射影等价于共面的三维点集合Xi。因此,存在一个2D单应Hπ,把每一个点x映射到对应的点x上。

    2D单应Hπ指的是将射影平面上的点集xi映射到另一个射影平面的点集xi上的射影变换,在实际情况中xixi通常是两幅图像上的像点,每幅图像都被视为一个射影平面。

  • 构造对极线 给点点x,通过x和对极点e的对极线l可以表示为:

    l=e×x=[e]×x
    .
    又由于x=HπxHπ是将x变换为x的单应),带入上式可得:
    l=[e]×Hπx

    定义
    F=[e]×Hπ

    这样就得到了从点x到对极线l的变换
    l=Fx

    以上就是基础矩阵F的推导过程。

  • 基础矩阵F可以记为:F=[e]×Hπ,其中Hπ是一幅图像上像点到另一幅图像上的2D单应,[e]×是对极点e的反对称矩阵。由于[e]×秩为2,Hπ的秩为3,基础矩阵F的秩为2.

  • 对极约束
    由于l=Fx,而像点x在对极线l上,故可得到

    (x)Tl=(x)TFx=0

    上式被称为对极约束,仅通过匹配的点对就可以求出两视图的基础矩阵F

向量的叉积,反对称矩阵[e]× 在射影几何中,一条直线有两点确定,如上面对极线有像点x和对极点e确定,并且可以表示为这两个点的叉积形式,有l=e×x
设有两个向量a,b,则这两个向量的叉积仍然是一个向量,并且垂直于a,b所在的平面。其坐标表示如下:

a×b=0z1y1z10x1y1x10x2y2z2=(a×)b

其中a×称为向量a的反对称矩阵
a×=0z1y1z10x1y1x10

通过引入反对称矩阵,向量的叉积可以使用矩阵乘法的表示,形式非常简洁。

F的代数推导

该推导来自《视觉SLAM十四讲》

设以第一个相机作为坐标系三维空间的点P=[X,Y,Z],其在两个相机的像点分别为p1,p2。由于第一个相机的中心作为世界坐标系的原点,也就是说第一个相机没有旋转和平移,通过小孔相机模型可得:

p1=KPp2=K(RP+t)

其中,K是相机的内参,R,t是第二个相机相对于第一个相机的旋转和平移。
p1=KP可以得到P=K1p1,带入第二个式子可得到:
p2=K(RK1p1+t)

两边同时左乘K1,得到
K1p2=RK1p1+t

x1=K1p1,x2=K1p2,代入
x2=Rx1+t

两边同时左乘向量t的反对称矩阵t×,由于t×t=0,消除t
t×x2=t×Rx1

两边再同时左乘xT2
xT2t×x2=xT2t×Rx1

由于t×x2是向量t和向量x2的叉积,同时垂直于向量t和向量x2,所以左边xT2t×x2=0,得到
xT2t×Rx1=0

再将x1,x2换掉
pT2KTt×RK1p1=0

上式是对极约束的另一种表示,该式子中仅包含像点,相机的旋转和平移,中间的矩阵就是基础矩阵F

pT2Fp1=0,F=KTt×RK1

式子F=KTt×RK1,可知假如相机的内参数K是已知的,提取中间的矩阵可到

E=t×R

E被称为本质矩阵,其和基础矩阵相差相机的内参K

通过匹配的点对计算相机的位姿

通过上面的知道,对于匹配的像点p1,p2以及基础矩阵F有如下关系:

pT2Fp1=0,F=KTt×RK1

也就是说,仅通过匹配的点对(最少7对)可以计算出两视图的基础矩阵F,然后再从F中分解得到相机的位姿势。

相机的相对位姿可以通过特征点匹配估计出来:

  • 提取两幅图像的特征点,并进行匹配
  • 利用匹配得像点计算两视图的基础矩阵F
  • 基础矩阵F中分解得到相机的选择矩阵R和平移向量t