Disparity vs Depth
对于一对经过校正的立体图像,一个三维点会投影到左右图像中同一行但不同列的位置。这两个投影之间的水平偏移就是视差(disparity) (单位为像素)。设焦距为 (像素)、立体基线为 (米),视差和深度 之间的关系为
这一关系是反比关系:近处的物体视差大,远处的物体视差小。
公式的来源
将左相机置于原点,右相机置于 ,两者都朝向 方向,具有相同的焦距 和主点 (这正是校正所要实现的效果)。一个点 投影为
因此行坐标相同(),列坐标之差为
这也是为什么立体 SLAM 系统可以将一个关键点存储为三元组 ——正如 ORB-SLAM2 所做的那样——并在光束法平差中使用 作为第三个残差行:右图像的列坐标本身就是深度观测量。
定律:深度分辨率呈平方级退化
对 关于 求导得到
因此一个固定的视差匹配误差 (通常是亚像素级的一个分数)会产生随 增长的深度误差:距离加倍,深度不确定性增大四倍。以 像素、 米(即 像素·米)以及匹配精度 像素为例:
| 深度 | 视差 | 深度误差 |
|---|---|---|
| 2 m | 25 px | 0.02 m (1%) |
| 10 m | 5 px | 0.5 m (5%) |
| 20 m | 2.5 px | 2 m (10%) |
在 20 米处,这套装置的”度量”深度几乎和瞎猜差不了多少——而同一套测量在手臂长度范围内却能达到毫米级精度。
设计上的影响
- 基线决定了可用的深度范围。 更大的基线 在相同深度下会增大视差,提高远距离精度——但同时也增大了最小可测深度(极近的点会落在两个相机视场之外,或超出视差搜索范围),并且由于两视角之间外观变化更大,匹配也更困难。小基线装置(例如无人机上约 10 厘米的基线)在近处精度高,而在远处几乎等同于单目。
- 一个实用的经验法则:立体深度大致在基线的 40 倍范围内是可靠的;超过这个范围,视差会缩小到低于匹配精度,点的行为就像单目(仅有方位角)观测一样。像 ORB-SLAM2 和 Stereo DSO 这样的立体 SLAM 系统会利用这样的阈值,明确地将点划分为”近点”(可信的度量深度)和”远点”(像单目一样随时间三角化)。
- 亚像素匹配很重要。 由于 在深度误差中呈线性关系,亚像素级的视差精化(抛物线拟合、SGM 亚像素插值)能直接提升三维精度——这是最廉价的深度精度提升手段。
在估计器中:优先使用逆深度
注意视差是逆深度的线性函数:设 ,则
因此像素级的匹配噪声在 上近似映射为高斯噪声,但在 上却映射为偏斜、重尾的噪声(在 像素处的 像素误差会对应一个巨大且不对称的深度区间)。这就是为什么 SLAM 系统用逆深度来参数化远处的点,也是为什么观测协方差应该在视差/逆深度空间中建模并传播,而不是假设在度量深度上是高斯分布的。
在一个 SLAM 流水线中,这种转换出现在两个地方:将每个关键点的视差转换为三维地标位置(或逆深度参数化),以及在光束法平差中根据其深度相关的不确定性对立体观测进行加权。
常见误区
- 信任远处的立体深度:把一个 10 厘米基线给出的 100 米”深度”当作精确的度量测量输入估计器,会使地图产生偏差;应将低视差的点视为仅有方位角的观测。
- 在 上假设高斯噪声模型:假设深度噪声恒定(或在 上是高斯的)会使滤波器/BA 恰恰在立体视觉最弱的地方变得过度自信。
- 基线标定误差: 的误差会按同一比例缩放每一个深度值——这是一种全局尺度偏差,任何平均都无法消除。
- 忘记最小深度限制:比视差搜索范围更近的点会悄无声息地匹配失败,因此近距离极限是由搜索窗口决定的,而不仅仅由光学系统决定。
对SLAM的意义
这一几何关系决定了立体视觉是否真正有用:它告诉你哪些地标携带度量信息、应如何根据作业距离设置装置基线,以及如何在估计器中正确建模观测噪声。误解这一点(例如,信任一个 10 厘米基线在 100 米处给出的立体深度)是造成地图偏差和协方差不一致的经典原因。