2、双目视觉基础:视差原理、深度计算模型、极线约束与三角测量
双目视觉的核心任务,是模拟人类双眼感知距离的方式,从两幅存在水平偏移的图像中恢复场景的深度信息。与结构光或ToF(飞行时间)方案不同,双目相机完全依赖被动光学成像,不主动发射光源,因此具有功耗低、室外强光适应性强、纹理丰富场景精度高等优势。本章将围绕视差原理、深度计算模型、极线约束与三角测量四个核心概念展开,建立从像素差异到三维坐标的完整数学与工程链路。
2.1 视差原理:从像素偏移到深度感知
视差(Parallax)是指同一空间点在左右相机成像平面上投影位置的横向差异。当两个相机水平放置且光轴平行时,空间点P在左图中的像点xL位于图像左侧,在右图中的像点xR位于图像右侧,二者之间的像素距离d = xL - xR即为视差值。视差与深度呈反比关系:物体越近,视差越大;物体越远,视差趋近于零。这一原理与人类双眼的立体感知机制完全一致——当我们注视近处物体时,双眼视线夹角大,大脑通过肌肉紧张程度感知距离。
在实际双目系统中,视差计算的前提是左右图像已经完成极线校正(Rectification),即两幅图像的行完全对齐,同名点只存在水平方向的偏移。若校正不理想,视差搜索将引入垂直分量,导致匹配错误率显著上升。工程上通常以均方根误差(RMS)小于0.1像素作为校正质量的合格线。
2.2 深度计算模型:从视差到距离的数学映射
深度计算的核心公式为:Z = (f × b) / d,其中Z为深度(mm),f为焦距(像素单位),b为基线距离(mm),d为视差(像素)。该公式基于理想平行双目模型推导,假设左右相机内参一致、光轴严格平行、成像平面共面。实际系统中,由于镜头畸变、装配误差和温度漂移的存在,直接套用理想公式会引入较大误差,因此工程上通常采用以下两种改进方式:
- 立体校正+标准模型:先通过标定获取左右相机内参和畸变系数,再对图像进行畸变校正和立体校正,使图像满足理想模型条件,然后使用标准公式计算深度。
- Q矩阵映射:在OpenCV等库中,立体校正后生成重投影矩阵Q,通过齐次坐标变换直接由视差图计算三维坐标,该方式隐式包含了主点偏移和焦距差异的补偿。
深度精度对误差的敏感度分析:对公式两边取微分可得ΔZ/Z = Δd/d + Δf/f + Δb/b。在典型配置下(f=1450px, b=120mm, Z=2m),视差误差1个像素将导致深度误差约2.3mm,而基线误差0.1mm仅导致深度误差约1.7mm。因此,视差匹配精度是深度精度的主导因素,这也是为什么立体匹配算法通常采用亚像素插值(如抛物线拟合)来提升视差分辨率。
| 参数 | 符号 | 典型值 | 对深度误差的影响 |
|---|---|---|---|
| 焦距(像素) | f | 800~2000 | 线性影响,标定误差通常<0.1% |
| 基线(mm) | b | 60~200 | 线性影响,机械装配误差需控制 |
| 视差(像素) | d | 5~300 | 反比影响,匹配误差为主要误差源 |
| 深度(m) | Z | 0.3~10 | 误差随距离平方增长 |
2.3 极线约束:将二维搜索降为一维匹配
极线约束(Epipolar Constraint)是双目视觉中最重要的几何约束之一。对于左图中的任意一个像素点,其在右图中的对应匹配点必然位于一条特定的直线上——这条直线称为极线(Epipolar Line)。极线的几何定义是:空间点P、左光心OL、右光心OR三点确定的平面(极平面)与右成像平面的交线。极线约束的工程价值在于:它将立体匹配的搜索空间从整幅图像的二维区域缩减为一条直线的一维搜索,计算量降低约两个数量级,同时大幅减少了误匹配的概率。
在未校正的图像对中,极线是倾斜的,需要计算基础矩阵F来求解极线方程。而在完成立体校正后,左右图像的行完全对齐,极线退化为水平线,匹配搜索只需在同一行内进行。这一简化是SGM(半全局匹配)、BM(块匹配)等算法能够实时运行的前提。工程实现中,极线校正的质量直接影响匹配精度,通常通过计算校正后图像的垂直视差(Vertical Disparity)来评估——理想情况下垂直视差应为0,允许误差不超过0.2像素。
stereoRectify()函数可生成校正映射表,通过remap()对左右图像进行重映射。校正后应检查左右图像同一行上的特征点(如棋盘格角点)是否严格对齐,若存在系统性偏差,需重新标定或检查相机安装是否松动。
2.4 三角测量:由视差恢复三维坐标
三角测量(Triangulation)是利用两个已知光心位置和同名像点坐标,通过几何关系求解空间点三维坐标的过程。在理想平行双目模型中,已知左光心OL=(0,0,0),右光心OR=(b,0,0),焦距f,以及左右像点坐标(xL, y)和(xR, y)(校正后y坐标相同),则空间点P的三维坐标可由以下公式直接计算:
Z = (f × b) / (xL - xR)
X = (xL - cx) × Z / f
Y = (y - cy) × Z / f
其中(cx, cy)为主点坐标。在实际工程中,由于标定误差和匹配误差的存在,左右两条投影射线通常不会精确相交于一点,而是形成一条微小的空间错位。此时需要采用最小二乘或中点法求解最优近似解。OpenCV的triangulatePoints()函数基于奇异值分解(SVD)实现鲁棒的三角测量,输入为两个相机的投影矩阵P1、P2和匹配点对,输出为齐次坐标表示的三维点。
三角测量的精度受多个因素制约:基线越长,近处深度精度越高,但视野重叠区域减小;焦距越长,角度分辨率越高,但视场角变窄。此外,当空间点距离相机很远时,两条投影射线接近平行,交点位置对噪声极其敏感,导致深度估计方差急剧增大。工程上通常将双目系统的工作距离限制在基线长度的20~50倍以内,以保证深度精度满足应用需求。
2.5 案例拆解:双目测距系统的深度精度验证
背景与目标:某机器人项目需要在前方0.5m~5m范围内实现测距,要求深度误差不超过2%(即5m处误差≤100mm)。选用基线120mm、分辨率1280×720、焦距约1450像素的双目相机。
初始现象:在实验室使用棋盘格标定后,对1m处的目标进行测距,实测深度为1.023m,误差23mm(2.3%),超出指标要求。
分析过程:首先检查标定重投影误差为0.08像素,满足要求。进一步分析发现,视差图在目标边缘存在明显的空洞和噪声,匹配得分较低。通过查看左右图像,发现目标表面为弱纹理的白色墙面,导致块匹配算法无法获得稳定视差。此外,在3m处测试时误差达到85mm(2.8%),说明误差随距离增长的速度快于理论预期。
操作步骤:
- 在目标表面粘贴高对比度纹理贴纸(黑白随机图案),增强匹配特征。
- 将SGM算法的惩罚参数P1从8调整为12,P2从32调整为48,提升对弱纹理区域的平滑约束。
- 开启亚像素视差插值(抛物线拟合),将视差分辨率从1像素提升至0.25像素。
- 对深度图进行中值滤波(3×3核),去除孤立噪点。
结果对比:优化后,1m处深度误差降至8mm(0.8%),3m处误差降至42mm(1.4%),5m处误差为88mm(1.76%),全部满足指标要求。代价是算法单帧处理时间从18ms增加至26ms,但仍满足30fps的实时性需求。
复盘经验:弱纹理场景是双目方案的天然短板,工程上应优先考虑结构光或纹理投影辅助;亚像素插值对近处精度提升明显,但远处受噪声影响,效果有限;SGM参数需要根据场景纹理丰富度进行调优,不能使用固定默认值。
2.6 常见误区与总结复盘
误区一:认为基线越长越好。长基线确实提升近处精度,但会缩小视野重叠区域,导致近距离盲区增大,同时增加结构尺寸和重量。选型时应根据最小工作距离和精度需求综合计算。
误区二:忽略温度对基线的影响。金属外壳在温度变化时会产生热胀冷缩,导致基线长度变化。对于高精度测量场景,建议使用殷钢等低膨胀系数材料固定相机,或增加温度补偿算法。
误区三:将视差图直接当作深度图使用。视差与深度是非线性反比关系,显示和后续处理时应转换为深度图,否则会误导算法参数调整。
误区四:认为极线校正后无需再检查。相机受到振动或碰撞后,镜头可能发生微小位移,导致校正参数失效。建议每次开机后运行快速校验(如拍摄标定板检查垂直视差),确保系统状态正常。
本章从视差原理出发,建立了从像素差异到三维坐标的完整数学链路。深度计算模型揭示了各参数对精度的影响权重,极线约束为匹配算法提供了几何先验,三角测量则将二维对应关系转化为三维空间坐标。理解这些基础概念,是后续进行相机选型、硬件调试和算法优化的前提。