SVO中的深度滤波器原理

基础:三角化估计深度

在不同的位置观测同一个三维点P(x, y, z),已知在不同位置处观察到的三维点的二维投影点p1(x1, y1), p2(x2, y2),利用三角关系,恢复出三维点的深度信息z。

è¿éåå¾çæè¿°

由于两条直线无法相交,通过最小二乘法求解。

按照对极几何中的定义,设x1, x2为两个特征点的归一化坐标,则它们满足:

s1x1 = s2Rx2 + t                                         公式(1)

左右两侧分别乘以x1^,得:

s1x1^x1 = 0 = s2x1^R x2 +x1^ t

可以先求出s2,再求s1.最后得到特征点的空间位置。


Mapping部分主要是计算特征点的深度。单目VO中,刚刚从图像中提取的热乎的关键点是没有深度的,需要等相机位移之后再通过三角化估计深度。我们知道通过两帧图像的匹配点就可以计算出这一点的深度值,如果有多幅图像,那就能计算出这一点的多个深度值。这就像对同一个状态变量我们进行了多次测量,因此,可以用贝叶斯估计来对多个测量值进行融合,使得估计的不确定性缩小。如下图开始深度估计的不确定性较大(浅绿色部分),通过三角化得到一个深度估计值以后,能够极大的缩小这个不确定性(墨绿色部分)。

  • 如果进来一个关键帧,就提取关键帧上的新特征点,作为种子点放进一个种子队列中。
  • 如果进来一个普通帧,就用普通帧的信息,更新所有种子点的概率分布。如果某个种子点的深度分布已经收敛,就把它放到地图中,供追踪线程使用。

普通帧更新种子点概率分布(极线搜索):

由于种子点的深度不确定,它在别的帧里看起来就在一条直线(极线)上。于是你从这条极线的一个端点走到另一个端点,把每处的图像块都和参考的去比较,就可以(可能)找到正确的匹配了。哦别忘了要Affine Warp一下……找到之后,让depth filter更新其深度分布即可。

在极线上寻找和u最相似的点u′,通过三角测量计算得到深度x及不确定性τ,然后利用贝叶斯概率模型更新P点的估计

在深度估计的过程中,除了计算深度值外,这个深度值的不确定性也是需要计算的,它在很多地方都会用到,如极线搜索中确定极线的起始位置和长度,如用贝叶斯概率更新深度的过程中用它来确定更新权重(就像卡尔曼滤波中协方差矩阵扮演的角色),如判断这个深度点是否收敛了,如果收敛就插入地图等等。

高斯—均匀混合分布的逆深度(由四个参数描述)

补充1、两个高斯分布乘积

重点参考:

http://www.cnblogs.com/luyb/p/5773691.html

https://www.cnblogs.com/ilekoaiq/p/8228324.html

https://www.zybuluo.com/Xiaobuyi/note/1107128

猜你喜欢

转载自blog.csdn.net/try_again_later/article/details/88396383