美文网首页
深度滤波器(强烈推荐,建议看原文)

深度滤波器(强烈推荐,建议看原文)

作者: Optimization | 来源:发表于2020-01-01 20:22 被阅读0次

    转载请说明出处:
    http://blog.csdn.net/zhubaohua_bupt/article/details/74911000

    3.1深度滤波简介

    SVO在建图部分采用的是深度滤波器,论文中并没有详细的介绍。深度滤波在SVO作者写的另一篇叫REMODE[1]的文章里,介绍了深度滤波的每一个步骤。REMODE[1]这篇文章讲的是利用svo提供的位姿,进行三维重建,属于渐进式三维重建。其过程和SVO深度滤波一样,只不过在REMODE里,实现用GPU进行了加速处理。

    SVO深度滤波是利用一系列的前后帧,完成对指定帧上像素深度的求取。用一些列帧,来求取指定帧上每个像素深度的原因是,在计算像素点深度时,单次匹配恢复的深度有误差,需要依靠多次深度测量值的融合,来恢复误差较小的深度值。SVO把像素的深度误差模型看做概率分布,有两个属性,一个是深度值服从高斯分布,另一个是局外点的概率服从Beta分布,同时融合这两种属性。

    SVO深度滤波对深度进行渐进式融合(动态融合)。其过程可表述如下:

    关键帧上选取像素点(SVO是fast角点,REMODE是梯度点),作为种子(seed,种子就是深度未收敛的像素点),每来一帧图像,融合更新一下之前提取的种子,直至种子的深度收敛,这是个动态过程,类似于滤波,大概这就是叫深度滤波的原因吧。如果新的一帧是关键帧,那么再次提取新的像素点作为种子。

    就这样旧的种子不断收敛,新的种子不断增加,不断进行下去。

    下面来探讨一下深度滤波的整个过程。

    3.2 深度滤波分步骤详细介绍

    对于一个种子,其每一次深度滤波(也叫深度融合,利用新的一帧来更新种子的深度值),都行需要经以下过程。

    3.2.1 计算极线

    关于极线的基本知识,本文不做介绍。对于每个种子,在当前帧计算极线的条件是:

    <1>已知种子所在帧与当前帧的相对位姿

    <2>已知种子的初始深度

    条件<1>的作用是用来做匹配,由VO提供。

    条件<2>的作用是缩小找匹配的搜索量。当种子新提取时,这个时候还没有深度值,用场景平均深度初始。

    本文用z表示种子的深度,sigma2表示深度方差,sigma表示深度标准差。

    极线的计算方法如下:

    step1:

    在深度延长线上,构造两个三维点P1,P2,这两个三维点来源同一个像素,唯一的不同就是深度,

    分别为 P1(x,y,z- nsigma),P2(x,y,z+ nsigma),这里n可以调节,一般选择n=1,2,3(3sigma原则)。

    Step2:

    将P1,P2利用帧间位姿,投影至当前帧,投影点为u1,u2,连接u1,u2就是我们所要计算的极线。

    SVO工程里,实现在Matcher.cpp里的findEpipolarMatchDirect()函数里。

    REMODE工程里,实现在epipolar.cpp seedEpipolarMatchKernel()函数里。

    3.2.2 计算仿射矩阵

    为什么要计算仿射矩阵?

    我们知道,同一张图像在经过旋转平移后,同一个场景在图像上的成像位置就发生了变换。

    在像素做匹配时,我们需要用像素周围的信息(一般是矩形窗口)来描述本像素的特征。

    设想一下,如果帧间图像发生了旋转,我们还用同样的窗口(当前帧的窗口坐标和种子所在帧窗口坐标一样)

    来描述搜索点,是不是不太合适?

    3.2.3 搜索匹配

    跟踪部分的匹配,是靠特征对齐完成的,不需要极线搜索,这是因为在深度和位姿都比较准确的情况下,

    用特征对齐可以完成匹配。

    但是,深度估计却不能这样干,它需要极线搜索,因为深度未知或者深度不确定性太大。

    SVO选用ZMSSD,通过8*8矩形patch来描述像素,用于计算种子和当前帧搜索点的相似性。

    实际上,在svo搜索匹配过程中,当计算的极线小于两个像素时,直接采用图像对齐,

    因为这个时候深度不确定较小(可以通过极线的计算方式想一下为什么)。

    否则,沿极线搜索匹配。代码在findEpipolarMatchDirect()里,

    3.2.4三角测量恢复深度以及匹配不确定性的计算

    经过搜索匹配后,能够得到种子p以及种子p在当前帧上的匹配像素点p’,

    通过三角测量,就可以恢复种字p的深度。

    原理可以参考 http://blog.csdn.net/zhubaohua_bupt/article/details/74926111

    实现部分:

    多次三角测量的深度是为了,融合得到种子较准确的深。那么既然有融合,不同测量值肯定有不同权重。

    不确定性就是用来计算权重的。在SVO中,深度的不确定被认为是,

    在匹配时,误匹配一个像素所带来的最大深度误差。

    其计算很简单,可以直接看论文。

    3.2.5 深度融合

    SVO的融合是不断利用最新时刻深度的观测值,来融合上一时刻深度最优值,直至深度收敛。

    深度数据具体融合过程的过程如下,

    3.2.6 平滑去噪

    这一步在SVO里没有,在REMODE里,作者加上这一步骤,对深度图有不错的去噪平滑效果,如下图。

    这个就不细说了,因为这一步骤本身与SVO无关,有兴趣的话可以看一下论文[1],作者通过构造一个能量函数,

    然后迭代优化能量函数,当能量函数最小时,就完成平滑去噪。

    至此,我们探讨了SVO整个深度滤波。

    REMODE论文:

    [1] MatiaPizzoli,Christian Forster, and Davide Scaramuzza. REMODE: Probabilistic,monocular densereconstruction in real time. In International Conference onRobotics andAutomation (ICRA), pages 2609–2616, Hong Kong,China, June 2014.

    相关文章

      网友评论

          本文标题:深度滤波器(强烈推荐,建议看原文)

          本文链接:https://www.haomeiwen.com/subject/eyugoctx.html