Visual Odometry: Part II - Matching, Robustness, and Applications ---- paper notes

https://www.zora.uzh.ch/id/eprint/71030/1/Fraundorfer_Scaramuzza_Visual_odometry.pdf

特征点的选择与匹配

特征点匹配的两类方法

  • 在一张图中提取特征点,在另一张图中用局部搜索的方法跟踪上一张图的特征点

  • 两张图各自提取特征点,比较这些特征点的描述子的相似性

  • 第一个方法适用于相机移动比较小,视角变化较少时;第二个方法适用于相机大幅度运动时。最近比较常用的是第二个方法,因为第一个方法认为相机是在小范围的环境中(small-scale environment)拍摄;而当前的应用大多是在大范围的环境中(large-scale environment)

检测特征点

大致分为角点检测器Corner Detectors 、斑点检测器Blob Detectors ,corner detectors (e.g., Moravec , Forstner, Harris, Shi-Tomasi, and FAST) and blob detectors (SIFT , SURF , and CENSUR )

  • 角点容易被检测到但辨识度较差 less distinctive,斑点辨识度高但检测速度比较慢
  • 角点比斑点更容易在图片中定位,但角点难以应对尺度的变化(比如缩小图片则可能很难准确定位到角点)

检测特征点一般分为两个阶段

  • 首先将特征响应函数应用到整幅图

  • 其次使用非最大值抑制来过滤输出

如何使特征点具有尺度不变性? 一般是将一幅图的大尺度版本和小尺度版本都分别输入到检测器中

如何使特征点能应对视角的变换?一般是将视角畸变为affine 的程度

The trick to make a detector invariant to scale changes consits in applying the detector at lower-scale and upper-scale versions of the same image. Invariance to perspective changes is instead attained by approximating the perspective distortion as an affine one

特征描述子

最简单的特征描述子是外观,也就是特征点周围像素的密度,然而它无法应对方向、尺度、视角的变换。最常用的描述子之一是SIFT,也就是特征点周围区域的梯度方向的直方图。

发展历史 SIFT->SURF->BRIEF->ORB

特征(描述子)匹配

在两张图中分别检测特征 计算描述子,然后比较两幅图的各自描述子的相似性

  • 可能会使得第二张图中的一个特征对应于第一张图的多个,可以使用互相一致性检查来避免
  • 这种穷尽的匹配方式代价比较高,可以使用索引类型的数据结构改善,更快的方法是直接搜索第二张图中可能的对应区域,比如使用某种运动模型来预测可能的对应区域

移除局外点

匹配点中可能存在局外点,也就是错误的匹配。可能造成的原因比如图像噪声,遮挡,模糊,视角变换、光照的影响等等。因此需要利用运动模型的几何约束来移除局外点。RANSAC已经成为这方面的标准算法。

RANSAC的思想在于从数据点中随机采样子集,估计出一个假设的模型,然后用其它的点来验证这个模型,能够与其它数据达成最大一致的模型则认为是最终模型。

对于两帧VO的运动估计来说,需要估计的模型是两帧之间相机的变换矩阵(R, t),数据点则是候选的匹配特征点对

相机姿态优化

姿态图优化 Pose-Graph Optimization

将VO中计算得到的相机姿态,表示为姿态图:

  • 图节点为相机姿态

  • 图的边为相机之间的姿态变换(不同帧之间的)

边约束为

\[
\sum_{e_{ij}} ||C_i-T_{e_{ij}}C_j||^2
\]

其中,\(T_{e_{ij}}\) 是姿态之间的变换矩阵

  • 变换矩阵中的旋转矩阵部分,使得损失函数是非线性的

  • 因此需要用非线性优化算法来求解。

回环,为距离较远的帧(的相机姿态)之间建立了边约束。

回环检测通常是用视觉词袋来计算图片之间的相似性,判断是否存在回环。

  • 若找到相似较高的图片 则用几何约束来验证(比如是否符合对极约束)是否匹配

    • 若符合,则基于两张图之间的匹配点 (此时匹配的阈值可以稍微放宽限制 因为距离较长可能带来很多误差累计),估计二者的刚体变换,将其添加到姿态图中继续优化。
       
       

局部(窗口Windowed)BA

 
与姿态图优化类似,但是BA还考虑了3D路标点的优化。称为局部或窗口是因为一次性考虑n帧图像,然后对相机姿态和路标点进行参数优化。优化目的是找到最优的相机姿态和路标点,使得重投影误差最小化:

\[
\arg \min _{X^i, C_k} \sum_{i, k} ||p_k^i - g(X^i, C_k) ||^2
\]
 
其中 \(p_k^i\) 是3D路标点 \(X^i\) 在第 \(k\) 张图像中的第 \(i\) 个观测点,\(g(X^i, C_k)\) 是路标点 \(X^i\) 在相机姿态\(C_k\)下的重投影

观测点是怎么得到的?路标点是怎么优化的?

  • 对于2D 的情况,即没有深度信息。首先做帧间特征点匹配,计算出初始的帧间变换矩阵T;其次使用三角化估计出2D图像对应的3D点,作为路标点,将路标点投影到第三帧的图像,计算重投影误差,来优化姿态和路标点。

    • 为什么需要优化路标点?因为如果不优化,则认为三角化是完全准确的,但由于姿态也是估计的 不一定准。。因此会影响三角化的结果,使得路标点未必准确

好处?

  • 相比2帧的VO来说减少了很多运动飘移drift,相机姿态和路标点之间也会有边连接(也就是存在变换关系),而图像的特征跟踪不只是来自之前的相机姿态,也有来自将来的相机姿态回来(是因为回环的关系吗?)

 
 

Bundle Adjustment https://blog.csdn.net/OptSolution/article/details/64442962

本质上是个优化模型,目的是最小化重投影误差(通过优化相机姿态等一些变量的计算来达到)

[Tutorial]综述阅读笔记 <Visual Odometry PartII_Introduce about BA>的更多相关文章

  1. 《The Cg Tutorial》阅读笔记——动画 Animation

    这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...

  2. 个性探测综述阅读笔记——Recent trends in deep learning based personality detection

    目录 abstract 1. introduction 1.1 个性衡量方法 1.2 应用前景 1.3 伦理道德 2. Related works 3. Baseline methods 3.1 文本 ...

  3. Multimodal Machine Learning:A Survey and Taxonomy 综述阅读笔记

    该笔记基于:Multimodal Machine Learning:A Survey and Taxonomy 该论文是一篇对多模态机器学习领域的总结和分类,且发表于2017年,算是相当新的综述了.老 ...

  4. 《The Cg Tutorial》阅读笔记——光照 Lighting

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4796306.html 光照 Lighting 一.常见的几种光照模型 二.基本的光照 ...

  5. 《The Cg Tutorial》阅读笔记——凹凸贴图 Bump Mapping

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/5018103.html 凹凸贴图 Bump Mapping 一.简介 凹凸贴图用于在不 ...

  6. 《The Cg Tutorial》阅读笔记——环境贴图 Environment Mapping

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4969956.html 环境贴图 Environment Mapping 一.简介 环 ...

  7. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  8. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  9. SLAM论文阅读笔记

    [1]陈卫东, 张飞. 移动机器人的同步自定位与地图创建研究进展[J]. 控制理论与应用, 2005, 22(3):455-460. [2]Cadena C, Carlone L, Carrillo ...

随机推荐

  1. C++学习03_对象

    1.类 类决定了一个对象具有什么样的属性功能. class MyFirstClass { }; //跟C++结构情况相似 //类的第一个字母采用大写是一种习惯的上的标准. //与C++结构情况类似 类 ...

  2. IOS HTML点击时有背景阴影

    在写H5时, IOS上的div点击会出现阴影, 如何去掉阴影呢? 在div的css属性中添加下面一条: -webkit-tap-highlight-color: rgba(0, 0, 0, 0);

  3. 解决N个人过桥时间最短问题(Java版本)

    [问题描述] n个人要晚上过桥,在任何时候最多两个人一组过桥,每组要有一只手电筒.在这n个人中只有一个手电筒能用,因此要安排以某种往返的方式来返还手电筒,使更多的人可以过桥.   注意:每个人的过桥速 ...

  4. 【cf1046】A. AI robots(动态开点线段树)

    传送门 题意: 坐标轴上有\(n\)个机器人,每个机器人带有属性\(x,r,q\),分别表示位置.可视半径以及智商. 现在定义智商相近为两个机器人的智商差的绝对值不超过$K. 现在问有多少对机器人,他 ...

  5. CentOs篇

    Advanced-高级配置.Security-安全.Boot-启动引导: 1.Removable Devices-移动设备 2.Hard Drive-本地硬盘 3.CD-ROM- Drive-光盘 4 ...

  6. Python网络编程基础 ❷ 基于upd的socket服务 TCP黏包现象

    TCP的长连接 基于upd的socket服务 TCP黏包现象

  7. 安装Ubuntu时出现Intel VT-X没有开启

    试了很多种方法,最后原来是只需要进入bosi系统,然后进入Intel Virtual Technology 使之成为Enabled即可,就这么简单粗暴.

  8. 中秋快乐,分享福利脑图:入门spring cloud

  9. phpize安装PHP扩展

    安装编译完成php源码后忘记安装一些扩展可以通过phpize来安装 拿lnmp1.6安装举例 安装完成lnmp后发现有些扩展没有 lnmp1.6的安装脚本会在lnmp1.6里生成src,里面是lnmp ...

  10. 1+X证书Web前端开发HTML专项练习

    1 . HTML5 之前的 HTML 版本是? A.HTML 4.01 B.HTML 4 C.HTML 4.1 D.HTML 4.9 2 . HTML5 的正确 doctype 是? A.<!D ...