[Tutorial]综述阅读笔记 <Visual Odometry PartII_Introduce about BA>
目录
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>的更多相关文章
- 《The Cg Tutorial》阅读笔记——动画 Animation
这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...
- 个性探测综述阅读笔记——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 文本 ...
- Multimodal Machine Learning:A Survey and Taxonomy 综述阅读笔记
该笔记基于:Multimodal Machine Learning:A Survey and Taxonomy 该论文是一篇对多模态机器学习领域的总结和分类,且发表于2017年,算是相当新的综述了.老 ...
- 《The Cg Tutorial》阅读笔记——光照 Lighting
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4796306.html 光照 Lighting 一.常见的几种光照模型 二.基本的光照 ...
- 《The Cg Tutorial》阅读笔记——凹凸贴图 Bump Mapping
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/5018103.html 凹凸贴图 Bump Mapping 一.简介 凹凸贴图用于在不 ...
- 《The Cg Tutorial》阅读笔记——环境贴图 Environment Mapping
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4969956.html 环境贴图 Environment Mapping 一.简介 环 ...
- “CoreCLR is now Open Source”阅读笔记
英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...
- 论文阅读笔记 Improved Word Representation Learning with Sememes
论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...
- SLAM论文阅读笔记
[1]陈卫东, 张飞. 移动机器人的同步自定位与地图创建研究进展[J]. 控制理论与应用, 2005, 22(3):455-460. [2]Cadena C, Carlone L, Carrillo ...
随机推荐
- itest(爱测试) 4.0.0 发布,开源敏捷测试管理 &BUG 跟踪管理软件
v4.0.0 下载地址 :itest下载 itest 简介:查看简介 V4.0.0 根据用户反馈,共增加了29个更新:其中有15 个功能增强和14个BUG修复 :UI更加清爽,用例执行和用例复制粘 ...
- 7、zabbix自定义监控阈值-前端页面报警
找个值监控一下: #监控passwd #默认是间隔是1小时,我们改成10秒,下面我们要把报警打开 #我们在被监控上的主机上创建一个新用户,过10秒,界面上就会报警了 ----------------- ...
- django中对数据库生成记录操作失败
在终端执行以下语句时,会发现一点效果也没有,但是在manage.py中会成功: python3 manage.py makemigrations # 仅仅是在小本本上(migrations文件夹)记录 ...
- Git仓库占用空间太大的解决方法
git gc --aggressive对本地git库进行更彻底清理和优化,这个指令花费的时间也会更长. 胡云飞系统部署搭建整体把控:git gc --auto这是一个设置的指令,并不会进行gc操作.如 ...
- 牛客OI周赛13-提高组-0还是1-(dp+位运算)
https://ac.nowcoder.com/acm/contest/2970/A 给出长度为n的一连串位运算符号,用n+1个0或1使运算插入最后得到1,求01序列有多少种可能. dp[i][j]表 ...
- Python进阶-XVI 继承 单继承 多继承
一.初识继承 1.引入继承 class A(object): pass # 父类,基类,超类 class B: pass # 父类,基类,超类 class A_son(A, B): pass # 子类 ...
- geth 基本使用
概要 geth 是以太坊的官方 golang 客户端. 通过 geth 的使用可以直观的了解以太坊, 乃至区块链的运作. 下面, 通过 geth 来构造一次搭建私链, 创建账户, 挖矿, 交易的流程. ...
- Python连载41-yield from详解、委派生成器
一. 1.yield from (1)调用协程为了得到返回值,协程必须正常终止 (2)生成器正常终止会发出StopIteration异常,异常对象的value属性保存返回值. (3)yield fro ...
- Dapper - 一款轻量级对象关系映射(ORM)组件,DotNet 下
Dapper - a simple object mapper for .Net Official Github clone: https://github.com/SamSaffron/dapper ...
- 解决移动端ios下overflow-x scroll无法隐藏滚动条的问题
这次有个需求是在web首页添加分类菜单,一共是8个分类,在移动端水平展示,可以左右滚动. 最后在手机上微信浏览器看到是有个滚动条,非常影响美观. 主要通过以下代码实现水平滚动 white-space: ...