SVO原理解析

转载http://www.cnblogs.com/luyb/p/5773691.html#top

SVO原理解析

最近空闲时间在研究Semi-Direct Monocular Visual Odometry(SVO)[1,2],觉得它值得写一写。另外,SVO的运算量相对较小,我想在手机上尝试实现它。

关于SVO的介绍,有两篇博客介绍得非常好,因此我这里只简单提一下大概的思路,重点讲解了一下深度滤波器的原理。

svo: semi-direct visual odometry 论文解析

SVO 代码笔记

一步步完善视觉里程计1——项目框架搭建

姿态估计

估计初始姿态

利用相邻两帧之间的特征点对,计算相对位姿。

  • 计算第k

帧和第 k1 帧中的特征点对的patch的灰度差。特征点对指的是第 k1

帧时深度已知的地图点(3D)在两帧中的投影点(2D)。特征点patch是特征点周围4×4的区域。

利用Gauss-Newton迭代法求解 T̂ k,k1

k1

帧加一个小扰动 δ ,通过灰度差优化 δ

。这步叫Inverse compositional formulation。

T̂ k,k1T̂ k,k1T(δ)1


  • 这一步忽略patch的变形,不做warping。因为相邻帧之间的形变很小。

Inverse compositional formulation保证Jacobian在迭代中保持不变,因此可以预先计算,降低计算量。

关于文章中导数的求解,请参考高博的直接法,非常详细。参考文献见[3]。

优化匹配关系

利用初始位姿,寻找更多的地图点(3D)到当前帧投影点(2D)的对应关系。

对每个当前帧能观察到的地图点p

(已经收敛的深度估计),找到观察 p 角度最小的关键帧 r 上的对应点 ui ,优化得到 p 在当前帧上的投影 ui

。优化的目标函数是仿射变换下的灰度差。

ui=argminui12Ik(ui)AiIr(ui)2i

这一步中的patch采用的是8×8邻域,Ai

表示一个仿射变换。这步不考虑极线约束,因为此时的位姿还是不准确的。第二步和第三步需要一定量的地图点,不能在一开始就使用,猜测这是作者强调深度估计收敛快的原因之一。

BA优化

利用第二步建立起的(pi,ui)

的对应关系,优化世界坐标系下的位姿 Tk,w ,标准motion only bundle adjustment。这里 pi

是世界坐标系下的3D坐标。

Tk,w=argminTk,w12Ik(ui)Ik(π(Tk,w,pi))2i


根据文章图11,BA优化前投影误差均值为0.3 pixel左右,优化后均值降低了一点点,误差曲线更稳定了。也许是这个原因,作者在程序中提供了一个选项忽略这步。

地图构建

深度估计

当出现新的关键帧r

时,作者在 r

上选取若干特征点(即seed),每个特征点对应一个深度估计,其初值为该帧的平均深度,并被赋予极大的不确定性。

后续帧{Ik,Tk,w}

对它能观测到的seed的深度估计产生贡献。具体而言,对 r 上深度还没有确定的点 {p,u} ,根据 Tk,r 找到 p 对应的极线 LP ,在极线上寻找和 u 最相似的点 u ,通过三角测量计算得到深度 x 及不确定性 τ ,然后利用贝叶斯概率模型更新 p 点的估计。当 p

的深度估计收敛时,计算其三维坐标,并加入地图。

深度估计的思路

以下内容来源于参考文献[4]

G. Vogiatzis and C. Hern´ andez, “Video-based, Real-Time Multi View Stereo,” Image and Vision Computing, vol. 29, no. 7, 2011.

给定已知相对位姿的两个视角下的图像I,I

。由两幅图像中的对应点及位姿可以计算得到一个深度值 x 。由于重建误差和误匹配的存在,考察实际情况中 x 的直方图分布,[4]作者认为, x 的分布可以用高斯分布和均匀分布来联合表示
p(x|Z,π)=πN(x|Z,τ2)+(1π)U(x|Zmin,Zmax)(1)

其中 π 表示 x 为有效测量的概率。下图是一个若干测量的直方图例子。 x 轴表示深度测量范围 [5,5] y

轴表示直方图统计。

考虑同一个seed的一系列测量x1,x2,...,xn

,假设这些测量是独立的。我们想从 (1) 式求出 Z,π 。最直观的做法是通过最大似然估计求解。然而[4]作者认为最大似然估计容易被局部极大值干扰,其结果并不准确。[4]作者选择从最大后验概率求解,等价于
argmaxZ,πp(Z,π|x1,...,xN)(2)

上式右边同比与(相对于变量 Z,π xi 的分布和 Z,π 无关)
p(Z,π|x1,...,xN)p(Z,π)np(xn|Z,π)(3)

作者证明, (3) 式可以用Gaussian×Beta分布来近似
q(Z,π|an,bn,μn,σn)Beta(π|an,bn)N(Z|μn,σn).(4)


并给出一个迭代格式

q(Z,π|an,bn,μn,σn)p(xn|Z,π)q(Z,π|an1,bn1,μn1,σn1)(5)

这里,约等于是因为 (5) 右端并不是Gaussian×Beta的分布,而是用 q(Z,π|an,bn,μn,σn) 去近似右端项。[4]作者实际上利用一阶矩和二阶矩相等来更新参数。根据 (5) 式,在加入新的测量时,seed的近似后验概率分布也会得到更新。当 σn

小于给定阈值时,认为seed的深度估计已经收敛,计算其三维坐标,并加入地图。

近似分布的推导

[4]作者提供了文档给出了上面推导过程的证明。文档的名字为“Supplementary matterial Parametric approximation to posterior”。这里首先假设p(Z,π)

满足独立性公式
p(Z,π)=p(Z)p(π)

第一步:引入潜变量(latent variable)ynyn=1 表示 xn 是内点, yn=0 表示 xn 是外点。那么有
p(xn|Z,π,yn)=N(xn|Z,τ2n)ynU(xn)1yn(6)


p(yn|π)=πyn(1π)1yn(7)

(6) 可以通过直观验证, yn 为1表明 xn 是内点,满足Gaussian分布,反之满足均匀分布。 (7) 也类似,当内点概率为 π 时, yn=1 的概率为 π ,反之为 (1π) 。容易证明
p(xn|Z,π)=1p(Z,π)ynp(xn,Z,π,yn)=ynp(yn|Z,π)p(xn|Z,π,yn)=ynp(yn|π)p(xn|Z,π,yn)

第二步:估计后验概率。令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值