半密集的单目视觉测距
Semi-dense Visual Odometry for a Monocular Camera
算法主要思想在于持续地估计出一个半密集的(semi-dense)inverse 深度图,并用于通过 dense image alignment 跟踪相机的运动。估计深度所用的像素点有较大的图像梯度(image gradient)。信息随时间持续传递,当新的视频帧传入时,对信息进行更新。主要贡献在于提出一个新的半密集的单目视觉测距方法:
1. 一个概率化(probabilistic)的深度图展示(意思好像是说设定深度服从高斯分布)
2. 基于 whole-image alignment 的跟踪
3. 半密集在于减少图像上带有信息的区域
4. Full incorporation of stereo measurement uncertainty
所谓的半密集:
(先只介绍一下深度图的获取部分)
深度图的估计
基于双目的深度图更新
- 选一组像素,for which the accuracy of a disparity search is sufficiently large.
- 对于每个被选中的像素,单独选择一个适合的参考帧
- 进行一个一维的disparity search。先前的被传播的深度信息如果可用则用于限定一个视差的搜索区间,来尽量减少搜索开销和 false minima。:
参考帧选择
理想情况下,选择参考帧可以最大化双目accuracy,且保持视差的搜索区间和观测角度足够小。 双目accuracy依赖于很多因素,而且因为该选择对于每个像素是独立的,我们采用如下的启发式:
使用该像素最早被观测到的帧,同时视差搜索范围和观察角度不超过某个阈值。如果一次视差搜索不成功,该像素的“age"则增加,随后的视差搜索使用更新的且该像素依然可见的帧。
双目匹配方法
我们在选定的参考帧上沿着极线搜索像素的光度值,并对匹配的视差进行一个子像素精确定位(a sub-pixel accurate localization), 如果先前的深度预测可用,则搜索的间隔限制在d±2σd ,d,σd 表示先前预测深度值的均值和标准差,否则整个深度区间都被搜索一遍。
不确定性分析
深度信息的获得分为以下三步:
1. 计算该像素在关键帧的极线
2. 在线上找到最佳匹配位置λ
3. 根据λ计算得到inverse depth
由此引出2个误差项:
- Geometric disparity error:表示极线的偏移导致的投影点位置λ的误差,极线与图像梯度不平行时,相同的极线偏移量导致的投影点误差更大
- Photometric disparity error:当极线上图像的梯度较大时,因噪音产生的投影点位置λ的误差会相对小一些,反之则大。
还有用于一个像素到深度的转换的常量α( 这个其实没太懂:\ ),对于每个像素,这个值可能是不同的,可以这样计算得到:
α : = δ d / δ λ \alpha:=\delta_d/\delta_\lambda α:=δd/δλ
δd: the length of the searched inverse depth interval
δλ: the length of the searched epipolar line segment
深度观测值融合
对于当前图像的一个像素的深度信息获得之后,如果之前没有对应的估计值存在,则直接将现在得到的信息作为其观测值;反之,则需要将该信息与之前的观测值进行融合
深度图的传播
传播的方式概括为:新获得的视频帧,先计算相机的位置,对于之前所选像素,利用已有的深度值得到对于的3D点的位置,并投影到该帧上,选择距离投影点最近的像素,作为匹配点,并赋予深度值,同时保留投影点子像素级的精确位置,用于后面的传播;对于每个像素,只进行一个深度信息的预测,如果两个预测值被传递到新图像上的同一个像素,分为两种情况处理:
- 如果两个值相近,处于2δ之间,则被视为两次独立的观测值,并进行融合
- 如果两者相差很远,则视较远者为被遮挡点,并被舍弃
深度图正则化
对于每帧,在所有的观测被融合后,进行一次正则化,将每个深度值设置为周围点的均值,权重由其各自的 inverse variance决定。为保持边缘的锐利,如果两个深度值显著不同,则不会用于对方的正则化。对于越界点,在整个过程中,每个被选用的点的有效性被持续跟进,用概率来表示该点不可用的程度(因为被遮挡或移动的物体),对于每个成功的观测,失效的概率会降低,反之(如该店的亮度值大幅变化或者图像梯度变得过小而低于某阈值)升高。如果在正则化时,某点的周围全部出局(失效概率低于某个阈值),则该点的预测被舍弃;同时如果该点为空(应该是指没有预测值)且周围的失效概率都低于某个阈值,则从这些邻近点中可以得到一个新的预测值。