本博客主要记录学习高翔老师视觉SLAM14讲的总结笔记,若有总结不对的地方,欢迎大家与我讨论。
一、特征提取
- 特征点大多为图像中的角点,用于高效地表示图像中的特征,在SLAM中也称为路标。
- 特征点是由关键点和描述子所组成的,外观相近的特征点应该具有相似的描述子。
- ORB特征提取是由FAST关键点和BRIEF描述子组成的。
1.1 FAST关键点
- FAST关键点定义:如果一个像素与领域的像素差别较大,则可称为角点。一般这个领域选择为周围16个像素点,因此也成为FAST-16。
- 首先,进行预测试操作,位于1、5、9、13的像素值中存在3以上同时大于Ip+T或Ip-T才有可能是角点。
- 非极大值抑制,仅保留一定区域内极大值的角点。
- 尺度不变性由构建图像金字塔解决
- 旋转不变性由灰度质心法解决,质心表达为
其中, ,特征点方向可以定义为
1.2 BRIEF描述子
二进制描述子,在关键点附件随机选取128对像素点比较大小,若p>q,则为1,否则为0。结合FAST关键点中提取的方向,可得旋转不变性。
二、特征匹配
- 对两幅图像之间进行特征匹配,即对每个特征点之间进行描述子距离的计算,对于BRIEF描述子,通常采用汉明距离。
- 匹配算法通常采用暴力匹配和快速近似最近邻两种方法。
三、2D-2D对极几何
上图为对极几何示意图,通过推导可得对极约束为:
其中,和 表示像素坐标,K表示相机内参,t和R表示相机运动。该等式的几何意义为三角形共面。可以将上式中间的参数合并为一个矩阵,即本质矩阵:
其中,和 表示归一化平面坐标,当然可以将内参与本质矩阵合并得到基础矩阵:
3.1 本质矩阵
一般采用八点法求解E矩阵:
通过本质矩阵求解相机运动R,t的过程是由奇异值分解SVD得到的:
分解结果存在4个解,仅有两个相机中P点都是正深度才是正确的解。而一般情况下,得到的匹配特征点是远远多于8对匹配点的,所以可以采用最小二乘法或随机采样一致性求解E。
3.2 单应矩阵
描述了两个平面之间的映射关系,自由度为8的单应矩阵可以通过4对匹配特征点算出。
3.3 尺度不确定性
单目视觉的尺度具有不确定性,所以单目SLAM常常需要初始化,初始化之后,就可以用3D-2D计算相机运动,初始化时需要一定程度上的平移,不能只有旋转。
四、三角测量
单目SLAM在得到相机间相对运动后,需要根据变换矩阵估计特征点的空间位置。可根据下式计算空间点深度:
其中,s1和s2为x1和x2的深度值。三角测量的矛盾在于,增大平移会导致匹配失效,减小平移而又会导致三角化精度不够。
五、3D-2D PnP
5.1 DLT
已知世界坐标系下P点坐标和在相机中投影点,则可根据下式进行求解相机运动:
转换为线性方程为:
t有12个未知量,可通过6对匹配点,即可线性求解,超过6对时,可通过最小二乘求解。但由于t中未考虑的约束,所以t举证左边3X3的矩阵块需要进行近似化,即
5.2 P3P
仅使用3对匹配点,可求得匹配点在该相机时刻下的坐标,接下来再使用ICP即可求出相机的相对运动。
5.3 最小重投影误差 BA
非线性优化方法,将相机位姿和路标坐标放在一起进行优化,像素坐标与空间点的位置关系如下:
在pnp问题中,空间点位置已知,仅为优化相机位姿T的问题。构建最小二乘问题,寻找最好的相机位姿:
上式二范数中可记为误差项,误差项表示3D的投影位置与观测位置做差,即重投影误差。此处,将会用到李代数进行优化,用到的知识点主要有ch4和ch6。由于优化的为相机位姿,所以误差项中的x为李代数,对误差项线性化为:
接下来,需要推导出雅可比矩阵J的具体表达形式。
空间点坐标在相机坐标系下的坐标为:
的像素坐标为:
对T左乘扰动量,则e关于的求导如下:
其中,左边部分表示为误差项关于相机坐标系下坐标求偏微分,右边部分可转换为李代数求导。左边部分可表示为如下所示:
右边部分可表示为如下所示:
由此,可推到出为(非常重要):
若se(3)旋转在前,平移在后,则需要将该矩阵前3列和后3列对调即可。
上面皆为对相机姿态T进行雅克比矩阵推导,同样也可用对路标点进行雅可比矩阵推导:
由此可推导出误差项关于路标点的雅克比矩阵 (非常重要):
六、3D-3D ICP
- 假设有一组匹配好的3D点和,即可表示为:
- 3D-3D位姿估计问题中无需相机模型
- ICP求解分为线性代数SVD和非线性优化方法BA
6.1 SVD
误差项可表示为:
对很多匹配点可进行最小二乘法求解位姿:
其中,,,所以ICP在SVD方法下分为以下三个步骤:
- 计算每个点的去质心坐标:
- 在最小二乘表达式中,左边部分仅与R有关,所以可以先根据下式对R进行优化求解:
经过一系列推导可得:
设,对其进行SVD分解即可求出,若R求得的行列式为负数,则取-R为最优值。
- 根据计算得到了R,即可求出t:
6.2 非线性优化方法
非线性优化不断迭代求解最优值,ICP对初值的要求比较宽松,其实就是扰动模型: