特征点法前端
特征点法前端
前端又称为视觉里程计 (VO),它根据相邻图像间的信息来估计出相机的运动。估计值既可作为结果输出,也可以作为初始值提供给后端来进行优化。VO 的实现,按照是否提取图像特征,分为特征点法前端和直接法前端。
1.0 特征点与特征点匹配
如前所述,VO 的主要问题是根据图像信息来估计相机的运动。一般来说,我们首先从图像中选取出比较有代表性的点,然后根据这些点来估计相机的位姿(和点的定位)。在SLAM 中,这些点也称为路标。
1.1 特征点
影像在计算机中是以数值矩阵的方式来进行存储的。因此,单个像素也是一种特征。但我们希望所提取的特征能够在相机运动后保持稳定,即有一定程度的不变性。而单个像素往往收到光照、视角、形变等等因素的影响而变得不稳定。因此,在计算机视觉中,常常通过人工设计的特征提取器来获取具有鲁棒性的图像特征。
常见的图像特征就是角点。角点有易辨认,易提取的特点。但它也存在一些问题。比如距离的影响:从远处看是角点的地方,相机移近之后却不是了。还有旋转的影响:相机旋转后,不同影像上的同一角点可能就具有不同的外观。
为此,研究者们设计了许多能够提取具有足够鲁棒性特征提取算法,如 SIFT, SURE, ORB 等等。这些人工设计的特征点一般都具备如下性质:
- 可重复性:相同的特征点可以在不同的影像上找到;
- 可区别性:不同的特征点具有不同的表达;
- 高效率:同一图像中,特征点的数量远小于像素的数量;
- 本地性:提取的特征点仅仅和一小片图像区域相关。
一个特征点由关键点 (key-point) 和描述子 (descriptor) 两部分组成。关键点指的是该特征点在图像上的位置信息,有些还具有方向、大小等其他信息。描述子通常是一个向量,它按照某种人为设计的方式,描述了特征点周围像素点信息。描述子一个重要设计原则就是外观相似的特征具有相似的描述子。
由于SLAM 是一种实时应用,因此除了鲁棒性之外,算法的实时性也应该被考虑。实际上,特征点提取和匹配占据了SLAM 主要的时间消耗。因此选用合适的特征提取算法至关重要。如 SIFT 算子虽好,但计算量太大,时间消耗过多。虽然大部分的特征提取都具有良好的并行性,可以使用 GPU 来加速运算,但由此带来的成本提升也要纳入考量。而ORB算子是质量和效率之间比较好的折中方案,常被用在目前的视觉 SLAM 方案中。
1.2 ORB
网上关于 ORB 算子的资料很多,相关论文也可以直接获取。这里仅仅进行一个简要的叙述。
ORB 特征一样由关键点和描述子两部分组成。它的关键点为 Oriented FAST,是 FAST 算子的一种改进;描述子则是BRIEF。
FAST 算子很高效,但不具备尺度和旋转不变性。通过构建影像金字塔,在不同尺度的影像上提取特征来增加尺度不变性。然后引入像素重心来确定特征点的方向,引入旋转不变性。中间还可以使用Harris 角点滤波来提取出N 个最有可能的角点。
传统的BRIEF 描述子一样不具备旋转不变性,同样通过像素重心所确定的特征点方向来作为描述子点方向,得到steer BRIEF。最后,为了得到更好的两两比较模式,利用一个角点数据集和贪心算法得到一个具有高方差、低相关的模式,用以构建合适的描述子,称为 rBRIEF。
原论文ORB 在此。
1.3 特征匹配
完成特征提取后,就可以进行特征匹配了。特征匹配解决了SLAM 中的数据关联问题,即确定了当前看到的路标和之前看到的路标之间的对应关系。
最简单的特征匹配方法就是暴力匹配 (brute-force matching):计算待匹配特征点与其他特征点之间的距离,然后按距离排序,选取距离最近的特征点作为匹配点。在这里,描述子间的距离表示了两个特征点之间的相似程度,有欧式距离,汉明距离等等。对于特征点数量巨大的情况,快速近似最邻近 (FLANN) 算法会更为高效。
接下来,我们希望根据匹配的特征点对来估计相机的运动。根据相机原理或所有的数据等不同,有三种情况:
- 当使用单目相机时,我们只知道二维的像素坐标,因此问题是根据两组匹配的
点来估计相机运动。该问题用对极几何来解决。 - 当相机为双目或为RGB-D 相机时,由于我们可以获得深度信息,问题就是估计两组
点间的运动。该问题用 来解决。 - 如果有
点云及其对应像素点的 坐标,也能顾及相机运动。该问题通过 求解。
2.0 对极几何
2.1 对极约束
上图展示了一对匹配好的特征点。我们希望求取这两帧之间的运动。设两个相机关心分别为
从几何上来看,射线
现在我们从代数的角度上看,在第一帧的相机坐标系下,点
根据针孔相机模型,不考虑畸变,两个像素点
这里,
这里,
将上式两边同时左乘
再将两侧同时左乘
注意到
如果我们代入
这两个式子称为对极约束。它的几何意义为
对极约束给出了两个匹配点的空间位置关系。
- 通过匹配点求出
; - 根据E 求取
, 。
实际情况自然会比这个复杂。下面我们就来了解下这个求解过程。
2.2 本质矩阵
关于本大节(对极几何)的更详细的讲解和推导推荐看书 An Invitation to 3-D vision 的第五章。这章也正好是sample chapters 之一,可以免费阅读。地址在此Reconstruction from Two Calibrated Views .
本质矩阵
- 本质矩阵是由对极约束定义的。由上可知对极约束是一个等式为零的约束,所以对
乘以任意非零常数后,对极约束仍然满足。说明 在不同尺度下是等价的。 - 根据
,本质矩阵 的奇异值必定是 的形式。这称为本质矩阵的内在性质。想要详细的证明还请看上面的章样。 - 平易和旋转各自有
个自由度,所以 一共只有 个自由度。考虑到尺度等价性,本质矩阵 实际上只有 个自由度。
既然
考虑一对匹配点,它们的归一化坐标为
把矩阵
对极约束就可以写成与
求解出
其中,
其中,
同时,由于
我们可以将任意一对特征点代入所取得的
最后,使用带有噪声的数据利用线形方程组求解得到的E 可能并不是一个”正确“的解,即奇异值矩阵并不满足
2.3 单应矩阵
前面我们提到,利用八点法来求解本质矩阵的一个前提是系数矩阵满秩,这也意味着八组特征点不能(近似)落在同一个平面上。但在一些情况中,如无人机俯拍影像,这个假设就不成立了。此时,可以利用单应矩阵 (Homography)
考虑图像
整理得:
影像
这样,我们就得到了描述两个相机坐标系下同一物方点的转换关系,把中间括号内的部分抽取出来就得到了单应矩阵
单应矩阵包含了相机运动信息
由上可得:
需要注意的是这里的等号是在一个非零因子下成立的(齐次坐标)。实际处理中常常乘以一个非零因子使得
整理得:
如此,一组匹配点可以构造出两个约束(三组约束中只有两组线性独立)。于是,自由度为
和本质矩阵的分解类似,分解单应矩阵H 也会得到4组解(如下所示)。这里的推导比较复杂(我也没看得很明白),还请参看前面的书籍章样。利用物方点的深度值为正(位于相机前方)的特性,可以排除两组解,剩下的两组解则需通过其他先验信息进行验证。
3.0 补充
3.1 尺度不确定性
前面提到,
对 3D - 2D
来计算相机运动了。进行初始化的两张图像必须有一定程度的平移,而后都将以此步的平移为单位。
3.2 纯旋转
在只有纯旋转的情况下,我们可以通过
3.3 多余匹配
求解 RANSAC
) 更受青睐。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结