在上一篇博客中, 我介绍了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)(pi,a)={10a=B(I(pi))otherwiseH(0)(pi,a)={1a=B(I(pi))0otherwise

H^{(0)}(p_i, a) = \left\{ \begin{array}{rcl} 1 & a = B(I(p_i)) \\ 0 & otherwise \end{array}\right.
其他层都是通过上一层降采样得来:

H(l=1)(pi,a)=14∑j=14H(l)(N(j)(2⋅pi),a)H(l=1)(pi,a)=14∑j=14H(l)(N(j)(2⋅pi),a)

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)←p(l)r,c(a,b)+γ(l)(a,b)β(qi,N(j)(qi))kV(l)r(pi)pr,c(l)(a,b)←pr,c(l)(a,b)+γ(l)(a,b)β(qi,N(j)(qi))kVr(l)(pi)

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)定义如下:

γ(l)(a,b)=H(l)r(pi,a)H(l)c(N(j)(qi),b)γ(l)(a,b)=Hr(l)(pi,a)Hc(l)(N(j)(qi),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中逆深度的梯度:

▽Dr(ξ)=δNID(Ir(pi),Ic(N(qi)))δDr(pi)|ξ,pi∈ΩD▽Dr(ξ)=δNID(Ir(pi),Ic(N(qi)))δDr(pi)|ξ,pi∈ΩD

\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方法,类似之前的更新过程:

Dr^(p)k+1=Dr^(p)k−αDk∑Dk▽Dr(ξ)Dr^(p)k+1=Dr^(p)k−αDk∑Dk▽Dr(ξ)

\hat{D_r}(p)_{k+1} = \hat{D_r}(p)_k - \alpha_{D_k}\sum_{D_k}\bigtriangledown_{D_r}(\xi)

计算出一个新的逆深度之后即方差之后,将其与之前的逆深度和方差融合得到最终校正后的逆深度和方差:

Dr(p)=Dr^(p)k∘Vr(p)+Dr(p)∘diag(∑Dk)Vr(p)+diag(∑Dk)Dr(p)=Dr^(p)k∘Vr(p)+Dr(p)∘diag(∑Dk)Vr(p)+diag(∑Dk)

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})}

Vr(p)=(Vr(p)−1+diag(∑Dk)−1)−1+diag(δ2pI)Vr(p)=(Vr(p)−1+diag(∑Dk)−1)−1+diag(δp2I)

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相关推荐

  1. Robust Monocular SLAM in Dynamic Environments(浙大章国锋)

    Robust Monocular SLAM in Dynamic Environments Abstract 我们提出了一种新的实时单目SLAM系统,该系统能够在动态环境中鲁棒地工作.与传统方法不同, ...

  2. 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 ...

  3. 翻译: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 ...

  4. 翻译 | 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:一种通用的(全能 ...

  5. 通俗易懂!视觉slam第一部分——slam简介与相机介绍

    首先是定义: SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感器的主体,在没有环 ...

  6. 《论文笔记》Multi-UAV Collaborative Monocular SLAM

    时间:2017 作者: 实现条件:   多agent+一中心服务器.每一个agent自带单目摄像头,中心服务器可与所有agent通信.agent没有任何先验知识.不考虑任何的传输延时所带来的不良影响. ...

  7. DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB-D Cameras论文阅读笔记

      这篇博客分享的是ECCV 2020最佳论文原班人马邓嘉团队的最新力作<DROID-SLAM: Deep Visual SLAM for Monocular, Stereo, and RGB- ...

  8. Probabilistic Volumetric Fusion for Dense Monocular SLAM

    论文标题:Probabilistic Volumetric Fusion for Dense Monocular SLAM 论文链接:https://arxiv.org/pdf/2210.01276. ...

  9. Hand-held Monocular SLAM Based on Line Segments

    Hand-held Monocular SLAM Based on Line Segments Abstract Introduction Image Line Spatil Line Methoro ...

最新文章

  1. 锦上添花DataGrid!
  2. 四月青少年编程组队学习(图形化四级)Task05
  3. c语言求圆锥的表面积和体积_新人教版六年级下册第三单元《圆柱和圆锥》知识整理...
  4. Uboot 命令是如何被使用的?
  5. LeetCode 516. 最长回文子序列(动态规划)
  6. ARMV8 datasheet学习笔记5:异常模型
  7. 问题四十五:怎么画ray tracing图形中的blending and joining surface
  8. EXCEL如何新建自定义单元格以及样式怎么设置
  9. 2021-06-21结构伪类选择器
  10. 文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
  11. Easyui datagrid getData简单使用
  12. C++学习(二六七)find_package() find_library()
  13. 怎么用spss做冗余分析_【攻略】手把手教你怎么用SPSS做统计分析
  14. L19.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- tailf和cut命令
  15. 利用kali Linux破解WiFi密码
  16. 使用html2canvas生成海报
  17. 十年风雨,一个普通程序员的成长之路(五) 成长:得到与教训
  18. 天池-金融风控训练营-task5-模型融合
  19. MATLAB代码:电动汽车有序充电策略 基于峰谷分时电价引导下的电动汽车充电负荷优化
  20. 提高网络服务器性能,优化网络的七条思路 帮您更快提高网络速度

热门文章

  1. HBuilderX的介绍与语法提示
  2. 10个程序员最喜欢的 HTML和CSS 等在线代码编辑器——pow_na的博客
  3. 《PCL点云库学习VS2010(X64)》Part 34 旋转平移矩阵用法
  4. 公司项目QuickSDK登陆以及支付总结
  5. 亚马逊开店创业 稳扎稳打稳赚钱
  6. 文科生能学好数据分析吗
  7. 访问tomcat 服务器出现,Welcome to nginx!
  8. 【小学数学论文】浅析小学学生数学计算能力的培养
  9. 常用C++编译器推荐
  10. hnust 最小生成树