前几节介绍了运动方程和观测方程的具体形式,并讲解了以非线性优化为 主的求解方法。本讲,我们将介绍什么是特征点,如何提取和匹配特征点,以及如何根据配对的特征点估计相机运动。
特征点法:长久以来(直到现在)被认为是视觉里程计的主流方法。 它运行稳定,对光照、动态物体不敏感,是目前比较成熟的解决方案。
视觉里程计的核心问题:如何根据图像估计相机运动,然而图像本身是个亮度和色彩组成的矩阵,很难从矩阵层面考虑运动估计,我们通常的做法是:
1、从图像中选取比较有代表性的点(比如角点,边缘,区块)(这些点在相加视角发生少量变化后,会保持不变,于是我们就可以在前后两张变化不太明显的图片里找到相同的点)
注:角点=>角点就是极值点,即在某方面属性特别突出的点,可分为以下几种:
1)、一阶导数(即灰度的梯度)的局部最大所对应的像素点;
2)、两条及两条以上边缘的交点;
3)、图像中梯度值和梯度方向的变化速率都很高的点;
4)、角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向
2、找到这些点后,在此基础讨论相机位姿估计问题(这些点被称为路标,即图像特征)
注:这些具有代表性的点,角点是辨识度最强的,边缘在随着图像运动的过程中,也在变化,所以很难找到两幅图边缘相似的地方,区块更难寻找,所以具有代表性点的选取就变成了角点的选取,但是单纯的角点很难满足我们的需求,举个栗子:从远处看上去是角点的地方,相机离近后,可能就不显示为角点了,或者旋转相机,角点的外观发生变化,我们不容易辨认出那是同一个角点。
下面介绍一些人工设计的特征点
特征点由关键点(该特征点在图像里面的位置)和描述子(向量)(有些特征点还有朝向的和大小,描述了该关键点周围像素信息)(外观相似的特征应该有相似的描述子)组成有。
SIFT算法(尺度不变特征变换):优点:充分考虑图像变换过程中出现的光照,尺度,旋转等变化。
缺点:超级大的计算量=>无法实时计算。
ORB算法:优点:实时计算,下面详细介绍ORB算法
ORB 特征亦由关键点和描述子两部分组成。它的关键点称为“Oriented FAST”,是 一种改进的 FAST 角点
FAST 是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与它邻域的像素差别较大(过亮或过暗), 那它更可能是角点。相比于 其他角点检测算法,FAST 只需比较像素亮度的大小,十分快捷。
FAST 特征点的计算仅仅是比较像素间亮度的差异,速度非常快,但它也有一些问题。 首先,FAST 特征点数量很大且不确定,而我们往往希望对图像提取固定数量的特征。因此,在 ORB 中,对原始的 FAST 算法进行了改进。我们可以指定最终要提取的角点数量 N,对原始 FAST 角点分别计算 Harris 响应值,然后选取前 N 个具有最大响应值的角点, 作为最终的角点集合。 其次,FAST 角点不具有方向信息。而且,由于它固定取半径为 3 的圆,存在尺度问题: 远处看着像是角点的地方,接近后看可能就不是角点了。针对 FAST 角点不具有方向性和尺度的弱点,ORB 添加了尺度和旋转的描述。尺度不变性由构建图像金字塔①,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现 的。我们稍微介绍一下。
求图像的质心涉及到“矩”的概念,不知道的朋友,可以看一下我这个链接:图像的矩
特征匹配是视觉 SLAM 中极为关键的一步,宽泛地说,特征匹配解决了 SLAM 中的数据关联问题(data association),即确定当前看到的路标与之前看到的路标之间的对应关系。通过对图像与图像,或者图像与地图之间的描述子进行准确的匹配,我们可以为后续的姿态估计,优化等操作减轻大量负担。
遇到的问题:误匹配情况广泛存在(两幅图像中同样的特征点匹配不到一起,即匹配错误)
最简单的匹配方法:暴力匹配(对两幅图像中所有特征点的描述子的距离进行测量并排序,将两幅图像中距离相近的特征点作为一个匹配)=>缺点:特征点数量很大时,运算量巨大。
(1)从前面我们知道视觉里程计的核心问题是:如何根据图像估计相机的运动?,我们知道如果要根据相邻图像估计运动,就需要知道相邻图像之间的关系,即上文引出的特征匹配!
(2)下面我们需要根据相邻图像之间的关系(特征匹配好的点)估计相机的运动。
(3)由于相机的原理不同,我们需要对其分类讨论,举个栗子!
1. 当相机为单目时,我们只知道 2D 的像素坐标,因而问题是根据两组 2D 点估计运 动。该问题用对极几何来解决。
2. 当相机为双目、RGB-D 时,或者我们通过某种方法得到了距离信息,那问题就是根 据两组 3D 点估计运动。该问题通常用 ICP 来解决。
3. 如果我们有 3D 点和它们在相机的投影位置,也能估计相机的运动。该问题通过 PnP 求解。
现在,假设我们从两张图像中,得到了一对配对好的特征点, 如果我们有若干对这样的匹配点,就可以通过这些二维图像点的对应关系,恢复出在两帧之间摄像机的运动。
那么两个图像当中的匹配点有什么几何关系么?
现给出以下条件:
(1)两帧图像名为 (2)第一帧到第二帧运动为 R,t(前面所讲的坐标变换)
(3)两个相机的中心为 (4)中有一个特征点,在中有个特征点和他匹配.(如果匹配正确,说明它们确实是同一个空间点在两个成像平面上的投影。)
首 先,连线和连线在三维空间中会相交于点 P。这时候点 三个点可以 确定一个平面,称为极平面。连线与像平面的交点分别 为。称为极点,被称为基线。称极平面与 两个像平面之间的相交线为极线。
由图中可以看出:从第一帧()的角度上看,射线是某个像素可能出现的空间位置——因 为该射线上的所有点都会投影到同一个像素点。同时,如果不知道 P 的位置,那么当我们在第二个图像()上看时,连线(也就是第二个图像中的极线)就是 P 可能出现的投影 的位置,也就是射线在第二个相机中的投影。
现在,由于我们通过特征点匹配,确定了 的像素位置,所以能够推断 P 的空间位置,以及相机的运动。要提醒读者的是,这 都是多亏了正确的特征匹配。如果没有特征匹配,我们就没法确定 p2 到底在极线的哪个 位置了。
下面我们还是希望用数学的形式来描述它
注:若大家对上述变换公式不熟悉,可以回顾我写的第五讲=>>>>>>>第五讲<<<<<<<=
注:通常我们会使用齐次坐标表示像素点。在使用齐次坐标时,一个向量等于它自身乘上任意的非零常数。通常用于描述一个投影关系。举个栗子!和 成投影关系 ===>>>在齐次坐标下意义相等,称为尺度意义下相等
则上式的齐次坐标可写为:
式7.8即称为对极约束
几何意义:三者共面
1. 根据配对点的像素位置,求出 E 或者 F;
2. 根据 E 或者 F,求出 R, t。
由于 E 和 F 只相差了相机内参,而内参在 SLAM 中通常是已知的①,所以实践当中 往往使用形式更简单的 E。我们以 E 为例,介绍上面两个问题如何求解。
注:有些读者看到这里可能还是一头雾水,不明白这个对极几何约束有什么作用,我在这里帮大家理一下思路:
(1)视觉里程计的核心是通过相邻两幅图像估计相机运动===>>>(2)若要估计相机运动便要知道相邻两幅图像之间的关系.===>>>(3)若要只要相邻两幅图像之间的关系,则需引入特征点、特征匹配,通过特征点来确定两幅图像之间的关系===>>>(4)有了匹配的特征点之后,就可以估计相机的运动===>>>(5)估计相机的运动,其实就是相机从第一张图片运动到第二张图片的关系,其实就是第一张图片经过旋转和平移得到第二张图片===>>>(6)即估计相机的运动就是求这个旋转R和平移t,从对极几何约束可以知道,我们知道两张图像中的像素点p1,p2,那么可以求出本质矩阵===>>>通过本质矩阵便可以求出R和t,便得到了相机在两幅图像之间的运动!