Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要
1. Abstract
- 通过一种Unified Omnidirectional Model作为投影方程。
- 这种方式可以使用图像的所有内容包括有强畸变的区域,而现存的视觉里程计方案只能修正或者切掉来使用部分图像。
- 关键帧窗口中的模型参数是被联合优化的,包括相机的内外参,3D地图点,仿射亮度参数。
- 因为大FoV,帧间的重合区域更大,并且更spatially distributed.
- 我们的算法更牛逼。
1. Introduction
我们用了一个unified omnidirectional model在fixed-lag smoothing approach.
2. Related Work
Pose graph忽略了关键帧间fine-grained(细纹理的) 的相关,并且需要线性化和高斯估计来浓缩测量。
有一个Omnidirectional LSD-SLAM方案甚至可以用大于180°的相机FoV。
4. Camera Models
A. Pinhole Model
\[
\pi_{u}(\mathbf{x})=\left[\begin{array}{ll}{f_{x}} & {0} \\ {0} & {f_{y}}\end{array}\right]\left[\begin{array}{l}{x / z} \\ {y / z}\end{array}\right]+\left[\begin{array}{l}{c_{x}} \\ {c_{y}}\end{array}\right]
\]
针孔投影模型假设被估计的3D点是在图像平面上方的, i.e. 他们的深度是比焦距大的,这限制了FoV得小于180°。
B. Unifed Omnidirectional Model
这个模型的优势:
- 可以准确model很多图像设备和镜头的geometric image formation。
- 反投影函数$ \pi^{-1}$是closed-form. 一个3D点是先投影到单位球,然后投到针孔相机模型with an z-axis offset \(-\xi\)。
\[
\pi_{u}(\mathbf{x})=\left[\begin{array}{c}{f_{x} \frac{x}{z+\|\mathbf{x}\| \xi}} \\ {f_{y} \frac{y}{z+\|\mathbf{x}\| \xi}}\end{array}\right]+\left[\begin{array}{c}{c_{x}} \\ {c_{y}}\end{array}\right]
\]
这里\[\|\mathbf{x}\|\]是x的norm.
\[
\begin{array}{l}{\pi_{u}^{-1}(\mathbf{u}, d)} \\ {\qquad=\frac{1}{d}\left(\frac{\xi+\sqrt{1+\left(1-\xi^{2}\right)\left(\tilde{u}^{2}+\tilde{v}^{2}\right)}}{\tilde{u}^{2}+\tilde{v}^{2}+1}\left[\begin{array}{l}{\tilde{u}} \\ {\tilde{v}} \\ {1}\end{array}\right]-\left[\begin{array}{l}{0} \\ {0} \\ {\xi}\end{array}\right]\right)}\end{array}
\]
5. System Overview
A. Model Formulation
标识photometric error的能量函数:
\[
E_{\mathbf{p} j} :=\sum_{\mathbf{p} \in N_{p}} w_{p}\left\|\left(I_{j}\left[\mathbf{p}^{\prime}\right]-b_{j}\right)-\frac{t_{j} e^{a_{j}}}{t_{i} e^{a_{i}}}\left(I_{i}[\mathbf{p}]-b_{i}\right)\right\|_{\gamma}
\]
第i帧上的一个点p投影到第j帧,用一个patch \(N_p\)上的灰度误差平方和SSD (Sum of Squared Differences) ,\(w_p\)是基于梯度的权重。\(\|\cdot\|_{\gamma}\)$是一个huber norm.
\[
\begin{array}{l}{\mathbf{p}^{\prime}=\pi\left(\mathbf{R} \pi^{-1}\left(\mathbf{p}, d_{p}\right)+\mathbf{t}\right)} \\ {\text { with }} \\ {\qquad\left[\begin{array}{cc}{\mathbf{R}} & {\mathbf{t}} \\ {0} & {1}\end{array}\right] :=\mathbf{T}_{\mathbf{j}} \mathbf{T}_{\mathbf{i}}^{-1}}\end{array}
\]
滑窗里的光度误差项是:
\[
E_{\text {photo}} :=\sum_{i \in F} \sum_{\mathbf{p} \in P_{i}} \sum_{j \in o b s(\mathbf{p})} E_{\mathbf{p} j}
\]
B. Distance Estimation along with Epipolar Curve
当一帧被成功track了,我们用stereo matching来refine候选点的逆深度。
DSO在极线上搜索匹配。但是当在鱼眼图上用unified omnidirectional model来做的时候,就变成一条曲线(更准确的说是锥线。
极曲线:我们在单位球上定义两个点\(\mathbf{p}_{0}, \mathbf{p}_{\infty} \in \mathbb{R}^{3}\)围绕在投影中心\(C_{ref}\)上,来对应最大最小的逆深度\[d_{max}, d_{min}\].
\[
\begin{aligned} \mathbf{p}_{0} & :=\pi_{s}\left(\mathbf{R} \pi_{u}^{-1}\left(\mathbf{p}, d_{\min }\right)+\mathbf{t}\right) \\ \mathbf{p}_{\infty} & :=\pi_{s}\left(\mathbf{R} \pi_{u}^{-1}\left(\mathbf{p}, d_{\max }\right)+\mathbf{t}\right) \end{aligned}
\]
然后线性插值with \(\alpha \in [0, 1]\)
\[
\mathbf{p}_{L}(\alpha) :=\alpha \mathbf{p}_{0}+(1-\alpha) \mathbf{p}_{\infty}
\]
我们通过把这个线投影到目标图像来获得极曲线。
\[
\mathbf{u}_{L}(\alpha) :=\pi_{u}\left(\mathbf{p}_{L}(\alpha)\right)
\]
C. Frame Management
- Initial Frame Tracking:
5层金字塔,场景和亮度变化是持续估计。
- Keyframe Creation
当关键帧被创建的时候,候选点会基于space distribution and image gradient来被选择。我们用初始化的逆深度和大variance来给这些点。后续有帧被tracked的话,来refine点的深度。
- Keyframe Marginalization
当超过7帧关键帧的时候,旧的点和帧就会被边缘化掉。heuristic distance
- Windowed Optimization
6. Evaluation
A. TUM SLAM for Omnidirectional Cameras Dataset
提供了室内鱼眼数据和真值. 是global shutter的,然后是185°FoV. 1280 ×1024分辨率。
我们把图crop然后scale到480×480的。
1) Accuracy Comparison
DSO在精度和鲁棒性上比SVO和LSD-SLAM厉害。
Unified Omnidirectional camera model更提高了DSO和LSD-SLAM的表现。
2) Benefit of Large Field of View
3) Timing measurement
视角广的话,关键帧插入就少了,mapping快了。
B) Oxford Robotcar Dataset
这数据有100组重复的路线,并且有着不同的光照,交通场景。
7. Conclusions
反正我们牛逼。
Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要的更多相关文章
- Direct Visual-Inertial Odometry with Stereo Cameras
这对于直接方法是特别有益的:众所周知直接图像对准是非凸的,并且只有在足够准确的初始估计可用时才能预期收敛.虽然在实践中像粗到精跟踪这样的技术会增加收敛半径,但是紧密的惯性积分可以更有效地解决这个问题, ...
- 论文阅读: Direct Monocular Odometry Using Points and Lines
Direct Monocular Odometry Using Points and Lines Abstract 大多数VO都用点: 特征匹配 / 基于像素intensity的直接法关联. 我们做了 ...
- DSO 运行 —— dso_ros + Android 手机摄像头
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12425855.html 本文要点: dso 配置安装 dso 离线 ...
- GitHub 上优秀的开源SLAM repo (更新中)
GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...
- 三维视觉、SLAM方向全球顶尖实验室汇总
本文作者 任旭倩,公众号:计算机视觉life,编辑成员 欧洲 英国伦敦大学帝国理工学院 Dyson 机器人实验室 http://www.imperial.ac.uk/dyson-robotics-la ...
- 基于视觉的 SLAM/Visual Odometry (VO) 开源资料、博客和论文列表
基于视觉的 SLAM/Visual Odometry (VO) 开源资料.博客和论文列表 以下为机器翻译,具体参考原文: https://github.com/tzutalin/awesome-vis ...
- DSO之光度标定
光度标定(Photometric Camera Calibration)是DSO(Direct Sparse Odometry)论文中比较特别的一部分.常规的vSLAM不太考虑光度标定的问题.比如基于 ...
- SLAM领域牛人、牛实验室、牛研究成果梳理
点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文阅读时间约5分钟 对于小白来说,初入一个领域时最应该了解的当然是这个领域的研究现状啦.只有知道这个领域大家现在正在 ...
- 泡泡机器人SLAM 2019
LDSO:具有回环检测的直接稀疏里程计:LDSO:Direct Sparse Odometry with Loop Closure Abstract—In this paper we present ...
随机推荐
- apache日志信息详解
一.访问日志的格式 Apache内建了记录服务器活动的功能,这就是它的日志功能.下文详细介绍Apache的访问日志.错误日志.以及如何分析日志数据,如何定制Apache日志,如何从日志数据生成统计报 ...
- 分区时"磁盘上没有足够的空间完成此操作"的解决方法
在新的预装windows 7的品牌机上,工作人员一般将磁盘分为C.D两个分区.但往往造成C盘有很大一部分的空间没办法分出来,而分出来的部分空间又不能和后面的磁盘合并,甚至出现无法新建简单卷的操作,即点 ...
- 任务12:Bind读取配置到C#实例
将json文件的配置转换成C#的实体 新建项目: Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definition ...
- (水题)Codeforces - 650A - Watchmen
http://codeforces.com/contest/650/problem/A 一开始想了很久都没有考虑到重复点的影响,解欧拉距离和曼哈顿距离相等可以得到 $x_i=x_j$ 或 $y_i=y ...
- HDU6031:Innumerable Ancestors(二分+倍增数组)
传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2* ...
- hdoj1728【搜索的两种写法】
以前的一道题目,现在拿到总觉得是DFS,然后T掉就没什么想法了,很狗的看了以前的写法(以前还是看题解的AC的),是BFS,每次都要转弯,但是之前你的达到一种他走到了死路,所以才是不得不转弯,写法也是非 ...
- CF1060E Sergey and Subway(点分治)
给出一颗$N$个节点的树,现在我们**在原图中**每个不直接连边但是中间只间隔一个点的两个点之间连一条边. 比如**在原图中**$u$与$v$连边,$v$与$w$连边,但是$u$与$w$不连边,这时候 ...
- 一篇文章搞定面试中的二叉树题目(java实现)
最近总结了一些数据结构和算法相关的题目,这是第一篇文章,关于二叉树的. 先上二叉树的数据结构: class TreeNode{ int val; //左孩子 TreeNode left; //右孩子 ...
- Codeforces Round #510 (Div. 2) A&B By cellur925
第一次CF祭== 由于太菜了只做了前两题== 因为在第一题上耗费时间太多了,我还是太菜了==. A. Benches time limit per test 1 second memory limit ...
- Hibernate中表与表之间的关联多对多,级联保存,级联删除
第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...