NID-SLAM: Robust Monocular SLAM using Normalised Information Distance - Part2
在上一篇博客中, 我介绍了NID-SLAM中的的Robust Direct NID Tracking的实现。这篇继续记录一下文章中 Multi-resolution NID Tracking的部分。
Multi-resolution NID Tracking
文中提到LSD-SLAM中为提高鲁棒性而使用image-pyramid的方法。LSD-SLAM中是对待匹配的原始图像建立图像金字塔。NID-SLAM中作者发现这种方式并没有很好效果。NID-SLAM中采用的是多分辨率直方图的表达。NID-SLAM中建立了一个n-channel 的直方图图像金字塔,第lll层金字塔图像记为H(l)" role="presentation" style="position: relative;">H(l)H(l)H^{(l)}, 第0层直方图每一个channel 是从输入图像计算得来的:
H^{(0)}(p_i, a) = \left\{ \begin{array}{rcl} 1 & a = B(I(p_i)) \\ 0 & otherwise \end{array}\right.
其他层都是通过上一层降采样得来:
H^(l=1)(p_i, a) = \frac{1}{4}\sum^4_{j=1}H^{(l)}(N^{(j)}(2\cdot p_i), a)
N(j)(2⋅pi)N(j)(2⋅pi)N^{(j)}(2\cdot p_i)表示2x2的临域。
直方图降采样过程如下图所示:
图中H(0),H(1),H(2)H(0),H(1),H(2)H^{(0)}, H^{(1)}, H^{(2)}中的n层二值图像对应的是直方图的n个bin。论文中这块的做法是对图像进行直方图统计,会统计出n个bins, 对应n段intensity的取值。然后另每一个bin对应一副二值图像,对原始图像的每一个像素计算对应的直方图的bin。然后再该bin对应的二值图像中的对应像素位置置1, 其余位置置0。因此会生成n幅二值图像。然后构建直方图金字塔时降采样是在生成的二值图像上进行。
基于以上金字塔结构,联合概率分布的更新过程:
p^{(l)}_{r,c}(a, b) \leftarrow p^{(l)}_{r,c}(a, b) + \frac{\gamma^{(l)}(a, b)\beta(q_i, N^{(j)}(q_i))}{kV_r^{(l)}(p_i)}
式中权重函数 γ(l)(a,b)γ(l)(a,b)\gamma^(l)(a, b)定义如下:
\gamma^{(l)}(a, b) = H^{(l)}_r(p_i, a)H^{(l)}_c(N^{(j)}(q_i), b)
示意图如下:
这里与之前Direct NID Tracking中的更新过程不太一样。由于这里直方图中的每一个bin对应一幅图像,所以对于参考帧中的采样点坐标,会在所有bin的二值图像中做匹配。因此会涉及到参考帧的所有bin。所以有可能对pr,cpr,cp_{r,c}的任意项更新,即上述更新公式可能对pr,cpr,cp_{r,c}中的n2n2n^2个元素更新,而不是n个元素。
这种Coarse-to-fine的tracking方法是在pyramid的每一层上做优化。优化方法还是使用BFGS。上一层优化后的pose,作为下一层的初始pose。
NID Depth Map Update
估计出当前相机的pose之后,直接法一般会采用小基线立体测量的方法,从当前帧图像对关键帧的depth进行校正。对于光度误差法可以针对每个像素利用优化的方法进行校正。但是如果长时间之后,光线、场景表面等发生变化。则光度误差法几乎就不可能再进行校正了。但是利用NID匹配方式,对于环境变化,依然能够起作用。
已知图像的poseξξ\xi, 计算NID中逆深度的梯度:
\bigtriangledown_{D_r}(\xi) = \frac{\delta NID(I_r(p_i), I_c(N(q_i)))}{\delta D_r(p_i)}|_{\xi, p_i\in \Omega_D}
迭代更新的方法还是使用的BFGS方法,类似之前的更新过程:
\hat{D_r}(p)_{k+1} = \hat{D_r}(p)_k - \alpha_{D_k}\sum_{D_k}\bigtriangledown_{D_r}(\xi)
计算出一个新的逆深度之后即方差之后,将其与之前的逆深度和方差融合得到最终校正后的逆深度和方差:
D_r(p) = \frac{\hat{D_r}(p)_k \circ V_r(p) + D_r(p)\circ diag(\sum_{D_k})}{V_r(p) + diag(\sum_{D_k})}
V_r(p) = (V_r(p)^{-1} + diag(\sum_{D_k})^{-1})^{-1} + diag(\delta_p^2I)
其中∘∘\circ是Hadamard (element-wise) product, δ2pδp2\delta^2_p是加入的误差项,防止逆深度的方差过小。
实际中发现,NID 深度更新对深度初始值和采样点数敏感,因此论文中建议,在中间的更新过程中使用NID.光度误差法对较差的初始深度估计比较鲁棒,所以对于新的关键帧深度初始化更有效。然而论文中作者在初始化时还是直接使用的NID, 没有使用光度误差法。
论文中核心的内容主要就是这些。
NID-SLAM: Robust Monocular SLAM using Normalised Information Distance - Part2相关推荐
- Robust Monocular SLAM in Dynamic Environments(浙大章国锋)
Robust Monocular SLAM in Dynamic Environments Abstract 我们提出了一种新的实时单目SLAM系统,该系统能够在动态环境中鲁棒地工作.与传统方法不同, ...
- PSL‑SLAM:PSL‑SLAM: a monocular SLAM system using points and structure lines in Manh 曼哈顿世界中的点线单目SLAM
文章下载地址:https://download.csdn.net/download/weixin_50508111/85811572 一.文章简介 1. 文章类型/时间/作者/所属单位: 期刊论文/2 ...
- 翻译:ORB-SLAM: a Versatile and Accurate Monocular SLAM System
本文为ORB-SLAM的翻译,转载自:http://qiqitek.com/blog/?p=102 ORB-SLAM: a Versatile and Accurate Monocular SLAM ...
- 翻译 | ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:一种通用的(全能的)精确的单目SLAM系统)
博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 ORB-SLAM:一种通用的(全能 ...
- 通俗易懂!视觉slam第一部分——slam简介与相机介绍
首先是定义: SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感器的主体,在没有环 ...
- 《论文笔记》Multi-UAV Collaborative Monocular SLAM
时间:2017 作者: 实现条件: 多agent+一中心服务器.每一个agent自带单目摄像头,中心服务器可与所有agent通信.agent没有任何先验知识.不考虑任何的传输延时所带来的不良影响. ...
- DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记
这篇博客分享的是ECCV 2020最佳论文原班人马邓嘉团队的最新力作<DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB- ...
- Probabilistic Volumetric Fusion for Dense Monocular SLAM
论文标题:Probabilistic Volumetric Fusion for Dense Monocular SLAM 论文链接:https://arxiv.org/pdf/2210.01276. ...
- Hand-held Monocular SLAM Based on Line Segments
Hand-held Monocular SLAM Based on Line Segments Abstract Introduction Image Line Spatil Line Methoro ...
最新文章
- 锦上添花DataGrid!
- 四月青少年编程组队学习(图形化四级)Task05
- c语言求圆锥的表面积和体积_新人教版六年级下册第三单元《圆柱和圆锥》知识整理...
- Uboot 命令是如何被使用的?
- LeetCode 516. 最长回文子序列(动态规划)
- ARMV8 datasheet学习笔记5:异常模型
- 问题四十五:怎么画ray tracing图形中的blending and joining surface
- EXCEL如何新建自定义单元格以及样式怎么设置
- 2021-06-21结构伪类选择器
- 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
- Easyui datagrid getData简单使用
- C++学习(二六七)find_package() find_library()
- 怎么用spss做冗余分析_【攻略】手把手教你怎么用SPSS做统计分析
- L19.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- tailf和cut命令
- 利用kali Linux破解WiFi密码
- 使用html2canvas生成海报
- 十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
- 天池-金融风控训练营-task5-模型融合
- MATLAB代码:电动汽车有序充电策略 基于峰谷分时电价引导下的电动汽车充电负荷优化
- 提高网络服务器性能,优化网络的七条思路 帮您更快提高网络速度