视差图
记录立体图像对中对应点之间水平像素位移(视差)的图像。可通过三角测量从视差计算深度,是三维重建的中间表示。
视差图是立体匹配的输出,存储每个像素在左图中的位置与其在右图中对应位置之间的水平偏移(视差)。视差 d 与深度 Z 的关系为 Z = f * B / d,其中 f 是以像素为单位的焦距,B 是两相机之间的基线距离。
视差图通常以灰度图像可视化,较亮的像素表示较大的视差(距相机更近)。存储为 16 位整数或浮点值以获得亚像素精度。OpenCV 的 StereoBM 和 StereoSGBM 返回缩放 16 倍的值(定点数),因此实际视差需除以 16。
- 非线性深度关系:由于视差与深度成反比,近距离深度分辨率高但远距离迅速下降。以 12cm 基线和 700px 焦距为例,1 像素视差变化在 1m 处对应约 2mm,但在 10m 处对应约 14cm
- 遮挡处理:在一幅图像中可见但在另一幅中被遮挡的区域无法获得有效视差值。左右一致性检查可检测这些无效像素,然后通过邻近有效值插值填充
- 后处理:WLS(加权最小二乘)滤波和中值滤波在保留深度边缘的同时去除噪声。OpenCV 提供
cv2.ximgproc.createDisparityWLSFilter()用于视差图的边缘感知平滑
视差图在自动驾驶(障碍物检测和距离估计)、AR/VR(场景理解和遮挡处理)以及机器人(抓取规划和导航)中至关重要。Intel RealSense 和 Stereolabs ZED 等商用深度相机在内部通过硬件加速的立体匹配计算视差图,然后转换为深度。
视差图 (Disparity Map) 是立体匹配的输出图像,每个像素以像素为单位存储左右图像间水平方向的偏移量 (视差、disparity)。它以 16 位整数或亚像素精度的浮点数存储;OpenCV 的 StereoBM/StereoSGBM 返回放大 16 倍的定点值,因此实际视差需要把输出值除以 16。无效像素可由左右一致性检查 (LR consistency check) 检出后用周围值插补。后处理则用 WLS 滤波器 (Weighted Least Squares) 或中值滤波,在去除视差图噪声的同时保留边缘。