视觉里程计1--特征点法(下)
这篇博文是上一篇的后半篇。上半篇谈到如何确定特征点,以及如何根据2D-2D信息实现SLAM。这一篇继续3D-2D问题和3D-3D问题。
三、3D-2D:n点透视定位法(Perspective-n-Point,PnP)
这是基于三维空间n个点坐标及其在像素平面对应的二维坐标,确定相机位置的办法。这种定位所需的点数要比2D-2D问题少很多,理论上只要三个点。此外,它具有丰富的工程应用背景。例如双目相机可直接获得3D数据,因此可采用此方法。又如在SLAM过程中,如果部分地图或路标已经构建或定位,则其3D坐标是已知的,这时要根据观测的2D信息来确定相机位姿就可以用这种方法。3D-2D问题的求解方法很多,这里主要讲解三种:DLT,P3P和BA。这三种方法虽然都是用于解决3D-2D问题,但应用的场合不同。为了明确起见,我们在每一小节的开头就对问题进行明确描述。
1.直接线性变换法DLT
问题描述:已知空间点在世界坐标系中的三维坐标以及这些点在相机像素坐标系中的坐标,要确定描述相机位姿的矩阵。
合并ch5中的式(4)和(5)可得,消去矩阵并定义增广矩阵可得。其中是的齐次坐标,展开得
(1)
根据ch5中的公式(4)可知,由此容易根据内参和像素坐标求得归一化坐标。这样方程(1)中的未知数为,,和。上式矩阵可改写为三个矩阵方程,和。利用第三个方程消去前两个方程中的可得
(2)
一对3D-2D特征点可以提供如上两个方程,如果有6对3D-2D特征点可构建12个这样的线性方程。这样方程组封闭可求解其中的并得到。
这种方法直接将中元素作为未知数来求解,忽略了其为正交阵对元素的约束关系,因此这样求解得到的不一定是正交阵。为了得到正交阵,可采用QR分解法或这样的投影方法。
2.P3P法
问题描述:已知空间三点在世界坐标系中的三维坐标以及这些点在相机位姿下的坐标,要确定这三个点在相机坐标系下的坐标。
P3P法根据三个特征点在世界坐标系中的坐标来获取它们在相机坐标系下的坐标。有了这种对应关系,就把3D-2D的相机位姿定位问题,即位姿矩阵的求解转化为3D-3D问题。后者使用下一节要讨论的ICP方法可容易解决。
P3P方法的原理可根据图5来阐述。其中A,B,C为空间中的三个点,a,b,c为像素平面上的三个点。
图5:P3P方法原理示意图
根据相似关系,可记
(3)
利用余弦定理有
(4)
记,将以上三式两边都除以并利用式(3)整理可得
(5)
上式已利用一个方程消去,因此方程个数少了一个。上式中的可根据A,B,C点的世界坐标系计算,可根据像素坐标计算得到,因此只有是未知的。这是一个二元二次方程组,通过消元法可转化为一元四次方程并解析求解。计算得到的结果有四个根如图4所示。通过增加一个验证点可以确定哪一组数据是正确的。在获得后事实上就确定了目标距离光心的距离,进一步结合像素坐标系中的二维坐标即可确定相机坐标系中的三维坐标。
P3P方法的缺点是只能利用3组特征点数据,不利于提高计算精度。目前也有改进算法以采用更多数据。但作为后面优化问题的初始值,它是有意义的。
3.优化方法BA(Bundle Adjustment)
(1)优化模型及方法
问题描述:假设个空间点的世界坐标系坐标为,它们在像素平面上的二维坐标为已知。要求确定相机的位姿并适当调整路标点的坐标。
将写成齐次坐标,再记,根据上ch5中的式(4)和(5)可知。由于相机位姿未知以及观测噪声的存在,这个等式存在一个误差。考虑到齐次坐标的特性,的第三维并不存在误差,因此对于每一个点均提供两个标量方程或误差。为了寻找最佳的相机位姿,应当求解优化问题
(6)
其中二范数是指列阵各分量的平方和求根。这个问题利用李代数可以转换成无约束优化问题。非线性问题的优化已有现成软件如ceres或g2o。在使用这些软件时如果能输入雅可比矩阵的解析表达式,则有助于提高计算速度。因此优化问题分析的重点在于计算雅可比矩阵。
(2)雅可比矩阵的计算
雅可比矩阵是误差函数对优化变量求导得到的矩阵,即
(7)
如前所述,误差函数是二维的;如果取6个未知数来表示的位姿,则应当为矩阵。秉承计算机视觉中的规定,下面的阐述中不再区分齐次坐标和普通坐标的符号差异,即遇到矩阵运算不兼容时默认切换。由于相机坐标,因此。利用链式求导法则可知
(8)
(a)计算第一个偏导数
根据ch5中的公式(3)可知,展开得
(9)
利用第三行消去前两行中的可得两个标量方程
(10)
于是
(11)
(b)计算第二个偏导数
根据ch4中的讨论的计算有两种方法。第一种就是李导数方法,记为。其含义是发生微小变化后会变化多少。第二种是所谓的扰动模型法,记为。其含义是发生微小变化后会变化多少。这两个计算结果会差一个书中式(4.31)所示的,它是一个取决于中值的量。当在某个给定值附近微小变化时,本身几乎保持不变,因此可视为恒定值。如此一来,采用两种不同导数计算方法的差别,相当于给目标函数乘上一个常数矩阵。这好比书上都会给目标函数乘以1/2而本博客并没有乘1/2一样,这种差异并不会影响优化结果。根据ch4中的讨论
(12)
这样将式(11)和(12)代入式(8),最终可得雅可比矩阵为
(13)
(c)路标雅可比矩阵的计算
上面计算的是位姿雅可比矩阵。如果希望对路标同时进行优化,则需要计算误差对路标点的雅可比矩阵。类似地使用链式法则
(14)
已在式(11)计算好了。注意到有。这样
(15)
四、3D-3D问题:迭代最近点(Iterative Closest Point,ICP)
问题描述:在相机的a,b两帧中,其特征点在各自相机坐标系下的坐标为已知,找一个变换使得。一般情况下上标是用来表征投影坐标系的,这里将区别两帧的标记a,b也写成上标是为了方便起见,并不会引起混淆。
首先对第对点定义误差,然后构建最小二乘问题,求使误差平方和达到最小值的:
(16)
要同时优化两个变量比较困难,下面分析一种逐步求解的方法。令空间点的质心坐标
(17)
利用这两个变量,目标函数可改写为
(18)
注意到范数是大于零的,因此上面最小值问题可以分步求解。具体说就是先按下面最优问题求解
(19)
然后解方程确定的值。
问题(19)的求解步骤为:
(1)先定义矩阵
(2)对矩阵进行奇异值分解得,其中为奇异值组成的对角阵,对角元素从大到小排列。为对角矩阵。
(3)按来确定。若所得结构行列式为负,则取作为的最优值。
五、小结
这一章讨论了基于特征点的视觉里程计,内容比较丰富所以分为上下两个半篇。其内容包括特征点的概念、构建和匹配方法,讨论了不同情况下相机位姿的估计方法。其中包括基于2D-2D数据的对极几何理论;基于2D-3D数据的直接线性变换法(DLT),转为ICP的P3P方法,参数优化的BA方法;基于3D-3D数据的ICP方法。BA方法非常重要,后面还会用到。本篇融入了作者对李导数的一些理解,希望能对读者有帮助。如有不妥之处请指正。