3. 双目视觉原理
双目视觉定位的本质,是用两台已知相对位置和姿态的相机同时观察同一场景,通过寻找左右图像中同名点的位置差异,反推出目标在三维空间中的坐标。它之所以能“看见深度”,并不是因为相机本身能测距,而是因为两个不同视角对同一物体产生了可测量的视差。理解双目视觉,需要依次掌握四件事:立体视觉几何、视差与深度关系、极线约束,以及双目相机模型与标定参数。
一、立体视觉几何:从两个视角恢复三维
最理想的双目模型是平行光轴模型:左右相机光轴平行、成像平面共面、光心连线水平且长度为基线 b。空间中一点 P 在左相机坐标系下的坐标为 (X, Y, Z),投影到左图像点为 p_L,投影到右图像点为 p_R。由于两个相机只存在水平方向的平移,同一物点在左右图像上的纵坐标理论上相同,横坐标不同,这个横坐标差就是视差。
在平行模型中,深度 Z 与视差 d 成反比:Z = f·b / d,其中 f 为焦距(像素单位),b 为基线。这个公式说明:视差越大,物体越近;视差越小,物体越远;当视差趋近于零时,深度趋近于无穷远。因此,双目视觉对近处目标的深度分辨率高,对远处目标的分辨率迅速下降。
Z = f·b / d。深度误差 ΔZ 与深度平方成正比、与焦距和基线成反比:ΔZ ≈ Z²·Δd / (f·b)。这意味着远距离测距时,即使视差只有亚像素误差,深度误差也会被放大。二、视差与深度关系:精度从何而来
视差通常以像素为单位,但实际匹配时可以达到亚像素精度。假设焦距 f = 600 px,基线 b = 0.12 m,若视差 d = 24 px,则 Z = 600×0.12/24 = 3 m。若视差误差为 0.5 px,深度误差约为 3²×0.5/(600×0.12) ≈ 0.0625 m,即约 6 厘米。若目标在 30 米处,同样 0.5 px 误差会导致约 6.25 米的深度误差,几乎不可用。因此,双目视觉在无人机上更适合中近距离避障、着陆和室内定位,而不是远距离绝对定位。
提高深度精度的直接手段有三种:增大基线 b、增大焦距 f、提高视差匹配精度 Δd。但基线增大会缩小左右视场重叠区域,增加遮挡和匹配难度;焦距增大会缩小视场角;匹配精度则受纹理、光照和算法限制。工程上需要在这三者之间折中。
三、极线约束:把匹配从二维降到一维
如果不知道极线约束,左右图像匹配需要在二维图像中搜索同名点,计算量巨大且容易误匹配。极线约束指出:左图像中的一点 p_L,其在右图像中的对应点 p_R 一定位于一条直线上,这条直线称为极线。极线由两个相机光心连线与成像平面的交点(极点)决定。对于平行双目模型,极线就是水平扫描线,因此匹配只需在同一行内沿水平方向搜索,复杂度从二维降到一维。
极线约束的数学表达来自对极几何:p_R^T · F · p_L = 0,其中 F 为基础矩阵。若相机已标定,则可用本质矩阵 E 和归一化坐标表示。实际工程中,通常先做立体校正,使左右图像行对齐,此时极线水平,匹配效率最高。
四、双目相机模型与标定参数
真实双目相机并不完美:左右相机内参不同、存在镜头畸变、两相机之间还有旋转和平移。因此需要标定以下参数:
| 参数类别 | 符号/示例 | 含义 | 对定位的影响 |
|---|---|---|---|
| 左相机内参 | K_L, f_x, f_y, c_x, c_y | 焦距、主点、像素尺度 | 影响投影与反投影精度 |
| 右相机内参 | K_R | 右相机内部成像参数 | 影响右图匹配与三角化 |
| 畸变系数 | k1, k2, p1, p2, k3 | 径向与切向畸变 | 未校正会导致极线弯曲 |
| 外参 | R, T | 右相机相对左相机的旋转和平移 | 决定基线与极线方向 |
| 基线 | b = |T| | 两光心距离 | 直接决定深度尺度 |
标定通常使用棋盘格或圆点靶标,采集多组左右同步图像,先分别标定单相机内参和畸变,再通过同名点求解双目外参。标定完成后,使用立体校正把左右图像重映射为行对齐图像,并保存映射表。运行时,对每帧图像先校正,再沿水平极线做块匹配或半全局匹配,得到视差图,最后用 Z = f·b/d 逐像素计算深度。
# 典型双目标定与校正参数示例
left_intrinsic:
fx: 612.4 fy: 611.8 cx: 319.6 cy: 239.2
right_intrinsic:
fx: 610.9 fy: 610.5 cx: 321.1 cy: 238.7
distortion:
k1: -0.291 k2: 0.087 p1: 0.0004 p2: -0.0002
stereo_extrinsic:
R: [0.9998, 0.0012, -0.0180, ...]
T: [-0.120, 0.0008, 0.0021] # 基线约 120 mm
rectify:
image_size: 640x480
alpha: 0
五、案例与常见误区
在无人机室内定点悬停场景中,双目相机安装于机腹,基线约 12 cm,焦距约 600 px,图像 640×480。对地面纹理做立体匹配后,得到地面深度约 1.5 m,结合 IMU 和光流可估计水平速度,实现无 GPS 悬停。若地面为纯白墙面或重复瓷砖,匹配失败,视差图出现大面积空洞,定位会漂移。此时可增加纹理投影或融合超声波/激光高度计。
常见误区包括:把视差图直接当深度图使用,忽略焦距和基线单位;标定后不做立体校正,导致极线不水平;在远距离目标上仍期望厘米级精度;以及忽略左右相机曝光和增益差异,造成匹配亮度不一致。复盘时应优先检查标定重投影误差、校正后极线是否水平、视差图有效像素比例,再评估深度精度是否满足任务需求。