3. 双目相机模型
双目视觉的尺度恢复能力,根源在于两个相机之间的几何关系。要理解双目 SLAM 为什么能测出真实尺度,必须先把“单目针孔成像—镜头畸变—双目光轴几何—极线约束”这条链路打通。本节从成像模型出发,逐步过渡到双目立体几何,并说明极线约束如何把二维匹配降为一维搜索。
一、针孔模型:三维点到像素的投影
针孔模型是最基础的成像近似。设相机坐标系下一点 P = (X, Y, Z),焦距为 f,则归一化平面坐标为 (X/Z, Y/Z)。再经内参矩阵 K 映射到像素坐标:
u fx 0 cx X/Z
v = 0 fy cy · Y/Z
1 0 0 1 1
K = [[fx, 0, cx],
[0, fy, cy],
[0, 0, 1]]
其中 fx = f / dx、fy = f / dy,dx、dy 为像元物理尺寸,cx、cy 为主点。针孔模型的关键结论是:单目图像丢失了绝对深度,因为 (X, Y, Z) 与 (kX, kY, kZ) 投影到同一像素。这正是单目 SLAM 无法直接恢复尺度的根本原因。
二、畸变模型:径向与切向修正
真实镜头存在制造与装配误差,成像点会偏离理想针孔位置。工程上通常先做去畸变,再送入 SLAM 前端。畸变分为径向畸变和切向畸变:
- 径向畸变:由透镜形状引起,
k1、k2、k3描述桶形或枕形弯曲; - 切向畸变:由透镜与成像平面不平行引起,
p1、p2描述。
x_dist = x(1 + k1 r² + k2 r⁴ + k3 r⁶) + 2p1xy + p2(r² + 2x²)
y_dist = y(1 + k1 r² + k2 r⁴ + k3 r⁶) + p1(r² + 2y²) + 2p2xy
r² = x² + y²
三、双目立体视觉几何
双目系统由左右两个相机组成,二者之间的相对位姿称为外参:旋转 R 与平移 t。若两相机光轴平行、成像平面共面,则称为标准立体配置。此时同一空间点在左右图像上的纵坐标相同,视差 d = u_L − u_R,深度为:
Z = f · B / d
f:焦距(像素)
B:基线(两相机光心距离,米)
d:视差(像素)
该式说明:深度与视差成反比,与基线成正比。基线越大,远距离测距越准,但近处盲区也越大;基线越小,近处精度高,远处视差趋近于零,深度噪声急剧放大。这是双目系统设计中的核心权衡。
四、极线约束:把匹配降为一维搜索
极线约束是双目视觉最重要的几何约束。设左图像点 x_L,右图像点 x_R,则满足:
x_Rᵀ · F · x_L = 0
F = K_R⁻ᵀ · [t]ₓ · R · K_L⁻¹
其中 F 为基础矩阵,[t]ₓ 为平移向量的反对称矩阵。几何含义是:左图上的一个点,在右图中一定位于一条直线上,这条线就是极线。因此匹配搜索从整幅二维图像降为沿极线的一维搜索,计算量大幅下降,同时显著降低误匹配。
若已知内参,可进一步使用本质矩阵 E = [t]ₓ R,并在归一化坐标下计算。极线约束不依赖场景结构,只依赖相机相对位姿,因此是双目 SLAM 前端匹配、后端三角化和尺度恢复的共同基础。
五、工程参数与常见误区
| 参数/概念 | 含义 | 工程影响 |
|---|---|---|
| fx, fy | 等效焦距(像素) | 影响视差-深度换算比例 |
| cx, cy | 主点坐标 | 偏差导致极线不准确 |
| k1, k2, p1, p2 | 畸变系数 | 未校正会破坏极线约束 |
| B | 基线长度 | 决定测距范围与盲区 |
| F / E | 基础/本质矩阵 | 极线搜索与尺度恢复核心 |
六、案例:从标定到深度恢复
以一组 1280×720 双目相机为例,标定后得到 fx = 700、B = 0.12 m。若某像素视差 d = 60,则 Z = 700 × 0.12 / 60 = 1.4 m。若视差误差为 1 像素,深度误差约为 Z² / (f·B) ≈ 0.023 m。可见深度误差随距离平方增长,这也是双目在远距离精度下降的原因。
在双目 SLAM 中,前端通常先做立体校正,使极线水平;再沿水平极线做块匹配或特征匹配;随后三角化得到三维点,并用重投影误差优化位姿与地图。尺度信息由基线 B 直接注入,因此双目系统天然具有绝对尺度,不需要像单目那样依赖 IMU 或已知物体尺寸。