3、相机模型与标定:针孔模型、畸变模型、内参标定方法、双目与RGB-D相机模型

视觉惯性SLAM系统的前端感知完全依赖于相机如何将三维世界投影为二维像素。无论是单目、双目还是RGB-D相机,其成像几何都遵循统一的物理规律——针孔模型。然而,真实镜头存在畸变,且不同深度感知原理差异巨大,这直接决定了VINS系统中特征提取、三角化、深度估计与回环检测的精度上限。本章将系统梳理相机内参的数学本质、畸变校正流程、标定实施方法,并对比双目与RGB-D相机在VINS融合定位中的适用边界。

相机模型与标定知识框架 相机模型与标定 针孔模型 内参矩阵K · 归一化平面 畸变模型 径向畸变 · 切向畸变 内参标定方法 棋盘格 · Kalibr · 重投影误差 双目与RGB-D模型 视差 · 深度图 · 点云 核心公式 Z·[u,v,1]ᵀ = K·[R|t]·P K = [fx,0,cx; 0,fy,cy; 0,0,1] 标定流程 采集图像 → 角点检测 → 求解内参 → 畸变优化 VINS应用 特征去畸变 · 深度初始化 外参联合标定 · 尺度恢复

3.1 针孔模型:从三维世界到像素坐标

针孔模型是相机成像的理想化近似,它假设光线沿直线传播,穿过光心(投影中心)后在成像平面上形成倒像。在VINS中,我们通常将成像平面虚拟到光心前方,形成正立像,从而简化数学表达。设世界坐标系下一点 P = (X, Y, Z),经过相机外参(旋转矩阵R和平移向量t)变换到相机坐标系,再通过内参矩阵K投影到像素平面。

内参矩阵K的完整形式为:

K = [fx  0  cx]
    [ 0 fy  cy]
    [ 0  0   1]

其中,fx和fy分别为x、y方向上的归一化焦距(单位:像素),cx和cy为主点坐标(光轴与成像平面的交点)。归一化焦距与物理焦距f的关系为 fx = f/dx,dy为单个像素的物理尺寸。在VINS前端中,特征点坐标必须通过内参矩阵反投影到归一化平面(Z=1),才能进行后续的对极几何约束或三角化计算。

工程要点:VINS-Mono中,图像特征点坐标在送入估计器前,会先减去cx、cy并除以fx、fy,得到归一化坐标。这一步骤若内参标定不准,将直接导致尺度漂移和轨迹弯曲。建议在标定后使用重投影误差(通常小于0.5像素)验证内参质量。

3.2 畸变模型:径向与切向校正

真实镜头因加工和装配误差,会产生径向畸变(桶形或枕形)和切向畸变(透镜与成像平面不平行)。径向畸变可用k1、k2、k3三个参数描述,切向畸变用p1、p2描述。设归一化平面上的理想坐标为(x, y),畸变后的坐标为(x_dist, y_dist),则:

r² = x² + y²
x_dist = x(1 + k1·r² + k2·r⁴ + k3·r⁶) + 2·p1·x·y + p2·(r² + 2x²)
y_dist = y(1 + k1·r² + k2·r⁴ + k3·r⁶) + p1·(r² + 2y²) + 2·p2·x·y

在VINS中,畸变校正通常在特征提取后立即执行。OpenCV的undistortPoints函数或VINS自带的liftProjective函数均可完成此操作。校正后的特征坐标才能用于帧间匹配和三角化。

畸变类型参数典型影响校正优先级
径向畸变k1, k2, k3图像边缘弯曲,直线变弧线高(k1影响最大)
切向畸变p1, p2图像梯形失真,主点偏移中(通常较小)

3.3 内参标定方法:从棋盘格到Kalibr

内参标定的核心是求解K和畸变系数。最经典的方法是张正友标定法,使用平面棋盘格在不同姿态下拍摄15-20张图像,通过单应性矩阵分解获得内参初值,再用非线性优化(如Levenberg-Marquardt)最小化重投影误差。对于VINS系统,推荐使用Kalibr工具,它支持多相机-IMU联合标定,能同时估计相机内参、相机间外参以及相机与IMU之间的时间延迟。

  1. 数据采集:使用棋盘格或AprilGrid,在光照均匀、纹理清晰的环境下,缓慢移动标定板覆盖图像各个区域(尤其是边缘和角落),避免运动模糊。
  2. 角点检测:使用OpenCV的findChessboardCorners或Kalibr的检测器,确保亚像素精度。
  3. 参数求解:Kalibr会输出K、畸变系数、重投影误差以及相机-IMU的外参(T_ic)和时延(td)。
  4. 验证:将标定结果应用于测试图像,检查直线是否恢复笔直,边缘特征是否对齐。
常见误区:标定板图像数量不足或姿态单一(如只拍正面)会导致内参过拟合,尤其在焦距和主点估计上产生较大偏差。VINS中若内参误差超过1像素,建议重新标定,否则在长距离运行中会积累明显的尺度漂移。

3.4 双目相机模型:视差与深度估计

双目相机通过两个水平放置的相机模拟人眼立体视觉。理想情况下,两个相机光轴平行,且仅在x方向上有基线距离b。对于空间点P,其在左、右图像上的投影点分别为(u_l, v_l)和(u_r, v_r),视差定义为 d = u_l - u_r。根据相似三角形原理,深度Z = f·b / d。在VINS中,双目配置不仅提供尺度信息,还能通过左右目特征匹配直接三角化深度,加速初始化。

实际双目系统存在立体校正(Stereo Rectification)过程,通过旋转和平移将左右图像变换到同一平面且行对齐,使得极线水平,从而将二维搜索简化为一维搜索。VINS-Fusion中,双目特征点会同时计算左目和右目的描述子,并利用视差一致性检查剔除误匹配。

实战经验:双目相机的基线长度决定了深度测量范围。基线越长,近距离精度越高,但远距离视差变小,深度误差增大。在无人机或机器人平台上,基线通常为5-15cm,有效深度范围约为0.5-10m。VINS中,若视差小于0.5像素,该特征点通常被视为无效,不参与深度估计。

3.5 RGB-D相机模型:结构光与ToF

RGB-D相机直接提供像素对齐的深度图,省去了立体匹配的计算开销。主流技术包括结构光(如Kinect v1)和飞行时间法(ToF,如Kinect v2、RealSense D435)。结构光通过投射已知红外图案,根据图案变形计算深度;ToF则通过测量红外光发射与接收的相位差或时间差获取深度。在VINS中,RGB-D数据可直接将像素坐标反投影为三维点云,为视觉里程计提供稠密深度约束。

然而,RGB-D相机存在明显的局限性:室外强光下红外信号受干扰严重,深度值噪声大;透明物体和镜面表面无法正确测量;测量范围有限(通常0.2-6m)。因此,VINS-Fusion对RGB-D输入的处理策略是:仅使用深度值有效的特征点,并设置深度阈值(如0.3-4m),超出范围的特征点退化为纯视觉观测。

相机类型深度原理优点缺点VINS适用场景
双目视差三角化室外鲁棒,无额外光源计算量大,弱纹理失效室外无人机、自动驾驶
结构光红外图案变形室内精度高,成本低室外失效,功耗高室内机器人、AR
ToF飞行时间帧率高,无基线限制分辨率低,多机干扰室内SLAM、动态场景

3.6 案例拆解:VINS-Fusion中双目与RGB-D的深度融合策略

在某室内轮式机器人平台上,我们使用RealSense D435(RGB-D)与双目相机(基线12cm)同时采集数据,运行VINS-Fusion进行定位。初始阶段,系统仅使用RGB-D深度,发现轨迹在走廊尽头(约8m处)出现明显漂移,原因是D435的深度有效范围仅为4m,远处特征点全部退化为单目观测,尺度信息丢失。

随后,我们修改了VINS-Fusion的配置,将双目视差作为主要深度来源,RGB-D深度仅用于近距离(<2m)的稠密建图。具体操作包括:在config.yaml中设置depth_type: 1(双目),并调整min_depth为0.3m、max_depth为6m。同时,在特征管理器中,对RGB-D深度值进行时间戳同步校验,剔除深度跳变超过5%的异常点。最终,轨迹误差从RMS 0.35m降至0.12m,且回环检测的准确率提升了18%。

复盘要点:深度传感器的选择必须与场景尺度匹配。对于大场景(>5m),双目或激光雷达是更可靠的选择;对于小场景(<3m),RGB-D能提供更稠密的深度信息。VINS中,深度源的一致性比精度更重要——混合使用不同深度源时,务必统一坐标系和时间基准,否则会造成尺度不一致。

3.7 常见误区与总结

  • 误区一:认为内参标定一次即可永久使用。温度变化、镜头松动、振动都会导致内参漂移,建议每次实验前快速验证(如拍摄标定板检查重投影误差)。
  • 误区二:忽略畸变校正对特征匹配的影响。未校正的特征坐标在图像边缘处误差可达数十像素,直接导致对极几何计算失败。
  • 误区三:在VINS中直接使用RGB-D的原始深度值,未进行时间戳同步和深度有效性检查。传感器延迟会导致深度与图像错位,产生虚假的深度突变。
  • 误区四:双目相机标定只关注内参,忽略左右目外参(相对位姿)的精度。外参误差会直接导致视差计算偏差,进而影响深度精度。

总结而言,相机模型是VINS系统的几何基石。针孔模型提供了投影的数学框架,畸变模型保证了像素坐标的准确性,内参标定是这一切的前提,而双目与RGB-D相机则分别代表了主动与被动深度感知的典型路径。在实际工程中,应根据应用场景的尺度、光照、功耗和成本约束,选择合适的深度传感器,并严格遵循标定与验证流程,才能为VINS提供稳定可靠的视觉输入。