📌 概述
相机是自动驾驶中最核心的感知传感器之一,承担着交通参与者检测、车道线识别、交通标志理解等关键任务。要从二维图像中恢复三维信息,必须理解相机的成像几何模型——即相机是如何将三维世界投影到二维像素平面上的。
本讲以针孔模型为起点,系统介绍相机的内参(intrinsics)与外参(extrinsics)、畸变模型(radial & tangential)、单目标定与双目标定流程,并深入分析标定误差如何传递到 BEV(Bird’s-Eye-View)感知与 3D 检测任务中。最后介绍自动驾驶中常见的相机类型及其选型依据。
🎯 核心概念
针孔模型(Pinhole Model)
针孔模型描述了一个理想化的成像过程:三维空间中的点 $P(X_w, Y_w, Z_w)$ 通过光心 $O$ 投影到成像平面上,形成倒立的像 $p(u, v)$。为避免倒立,数学上通常将成像平面对称到光心前方(虚拟成像平面)。
投影过程可用齐次坐标表示为:
$$ s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} R & t \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} $$其中 $s$ 为深度缩放因子,$K$ 为内参矩阵,$[R|t]$ 为外参矩阵。
内参与外参
内参矩阵 $K$ 描述了相机坐标系到像素坐标系的映射:
$$ K = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} $$- $f_x = f / d_x$,$f_y = f / d_y$:以像素为单位的焦距,$d_x, d_y$ 为像元尺寸
- $(c_x, c_y)$:主点偏移,即光轴与成像平面交点的像素坐标
外参 $[R|t]$ 描述了世界坐标系到相机坐标系的刚体变换。$R$ 为 $3\times3$ 旋转矩阵,$t$ 为 $3\times1$ 平移向量。
FOV、焦距与传感器尺寸的关系
视场角(Field of View, FOV)由焦距 $f$ 和传感器尺寸 $W$(宽度)共同决定:
$$ \text{FOV}_h = 2 \arctan\left(\frac{W}{2f}\right) $$- 焦距越短 → FOV 越大 → 视野广但近处畸变大(如鱼眼)
- 焦距越长 → FOV 越小 → 看得远但视野窄(如长焦用于前向远距离检测)
畸变模型
真实镜头存在畸变,分为两类:
径向畸变(Radial Distortion):由镜头曲率引起,越靠近边缘畸变越明显。
- 桶形畸变($k_1 > 0$):图像向外膨胀
- 枕形畸变($k_1 < 0$):图像向内收缩
数学模型:
$$ x_{\text{dist}} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) $$$$ y_{\text{dist}} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) $$切向畸变(Tangential Distortion):由镜头与成像平面不平行引起。
$$ x_{\text{dist}} = x + [2p_1 xy + p_2(r^2 + 2x^2)] $$$$ y_{\text{dist}} = y + [p_1(r^2 + 2y^2) + 2p_2 xy] $$完整的畸变参数向量为 $(k_1, k_2, p_1, p_2, k_3)$。
🔧 技术详解
相机标定流程
张氏标定法(Zhang’s Method)是目前最广泛使用的单目标定方法,核心步骤:
- 准备标定板:棋盘格或圆点阵列,已知每个角点的世界坐标(通常设 $Z=0$)
- 采集图像:从不同角度拍摄 15-30 张标定板图像,覆盖视野各个区域
- 角点检测:使用亚像素精度检测角点位置
- 求解单应性矩阵:每张图像建立世界平面到像素平面的单应性 $H = K[r_1 ; r_2 ; t]$
- 闭式求解内参:利用旋转向量正交约束求解 $K$
- 畸变参数估计:最小化重投影误差,联合优化所有参数
- 非线性优化:使用 Levenberg-Marquardt 算法最小化总重投影误差
评价指标:
- 重投影误差(Reprojection Error):通常 < 0.5 pixel 视为合格
- 误差来源:标定板不平整、角点检测精度、图像质量
双目标定与立体校正
对于立体相机(Stereo Camera):
- 双目外参标定两个相机之间的 $R, t$
- 立体校正(Rectification):通过 Bouguet 算法将两幅图像校正到同一极线上,使对应点仅在水平方向有视差
- 视差 $d = u_L - u_R$,深度 $Z = \frac{f \cdot b}{d}$($b$ 为基线长度)
坐标变换链
自动驾驶中,相机图像上的像素需要经过多重坐标变换才能映射到世界坐标系:
- 像素 → 归一化相机平面:$\begin{bmatrix} x_n \ y_n \ 1 \end{bmatrix} = K^{-1} \begin{bmatrix} u \ v \ 1 \end{bmatrix}$
- 去畸变:对 $(x_n, y_n)$ 应用畸变校正
- 相机坐标系:$P_c = [x_n \cdot s, ; y_n \cdot s, ; s]^T$($s$ 为深度估计值)
- 相机 → 自车(Ego):$P_e = R_{c\to e} \cdot P_c + t_{c\to e}$
- 自车 → 世界:$P_w = R_{e\to w} \cdot P_e + t_{e\to w}$
相机标定对 BEV 感知的影响
BEV 感知的核心是将多相机特征通过 IPM(Inverse Perspective Mapping)或 Transformer 的 cross-attention 映射到俯视栅格上。
标定误差的影响:
- 内参误差 → 投影到 BEV 栅格时出现系统性偏移,远处的目标位置误差被放大
- 外参误差(尤其是 pitch 角) → BEV 中车辆前后位置偏差、车道线错位。pitch 角误差 0.1° 可在 50m 处造成约 8.7cm 的深度误差
- 畸变校正不彻底 → 图像边缘特征位置扭曲,影响多相机特征拼接的对齐精度
因此,量产自动驾驶系统通常要求:
- 在线标定(On-the-fly Calibration)补偿车辆负载、悬架变化导致的微小外参漂移
- 多相机联合标定确保所有相机在同一坐标系下的一致性
- 定期使用标定间(Calibration Rig)进行完整标定
📊 方法对比:标定方法
| 方法 | 工具 | 精度 | 适用场景 |
|---|---|---|---|
| 张氏标定法 | OpenCV / MATLAB | 0.1-0.5 px | 离线单目/双目标定,最通用 |
| 自标定(Self-calibration) | 特征匹配 + SFM | 0.5-2 px | 无标定板场景,精度低 |
| 在线标定 | 车道线/静止特征 | 0.01-0.05° | 补偿外参漂移 |
| 双目标定 | Kalibr / OpenCV | 0.1-0.3 px | 立体深度估计 |
🔗 与自动驾驶的关联
| 感知任务 | 对相机标定的依赖 |
|---|---|
| 2D 目标检测 | 弱(框标注在图像空间) |
| 3D 目标检测(单目) | 强(依赖投影几何恢复深度) |
| BEV 语义分割 | 极强(IPM 依赖准确外参) |
| 多相机融合 | 极强(跨相机一致性依赖联合标定) |
| 视觉 SLAM / 定位 | 强(特征跟踪依赖畸变校正质量) |
| 端到端(VLA) | 中(若输入为原始图像+位姿,标定误差可被网络隐式补偿一部分) |
常见车载相机
| 类型 | 典型焦距 | FOV | 用途 |
|---|---|---|---|
| 前视主相机 | 28-35mm | 40-60° | 远距离目标检测、交通灯识别 |
| 前视宽角 | 12-16mm | 100-120° | 交叉路口行人、短距离全覆盖 |
| 环视鱼眼 | 6-8mm | 180-220° | 自动泊车、360° 近距离感知 |
| 侧视/后视 | 12-20mm | 60-100° | 盲区监测、变道辅助 |
在线标定方法
由于车辆行驶颠簸、负载变化、悬架老化等原因,相机外参(特别是俯仰角和偏航角)会随时间漂移。在线标定通过观测静态环境特征实现实时外参修正。
基于车道线的外参标定:
- 利用前视相机检测车道线(通常使用三次曲线或三次贝塞尔曲线拟合)
- 将车道线投影到 BEV 空间,与 HD 地图中的车道线或 Temporal 聚合的车道线做匹配
- 优化外参使匹配误差最小化,修正 pitch / yaw 角
基于静止目标的外参标定:
- 检测静止目标(路杆、交通标志、停止车辆)的 2D 检测框
- 利用 LiDAR 或毫米波雷达的 3D 观测作为真值监督
- 使用 PnP(Perspective-n-Point)求解相机相对于自车的外参
多相机联合标定
多相机系统的标定需要考虑以下维度:
- 帧同步:所有相机必须在同一时刻曝光(硬件触发同步或软件时间戳对齐)
- 共视标定:在标定间设置多个标定板,保证相邻相机有 30-50% 的重叠区域
- 全局优化:构建包含所有相机位姿的因子图,最小化整体重投影误差
- 一致性检验:验证不同相机在同一位置(如车辆正前方 30m 处)的投影偏差 < 1 pixel
标定工具链
| 阶段 | 工具 | 内容 |
|---|---|---|
| 离线车间标定 | 自研标定间 / MATLAB | 内参 + 畸变系数 + 组外参 |
| 出厂下线标定 | 专用标定线 | 快速验证 + 外参微调 |
| OTA 在线标定 | 自研算法部署到域控 | 运行时持续监测外参并修正 |
| 标定失效检测 | CV 算法 | 通过 IPM 投影一致性检测标定是否失效 |
📚 延伸阅读
- Zhang, Z. “A Flexible New Technique for Camera Calibration.” IEEE TPAMI, 2000.
- Hartley, R. & Zisserman, A. Multiple View Geometry in Computer Vision, 2nd ed., 2004.
- Geiger, A. et al. “Automatic Camera and Range Sensor Calibration using a Single Shot.” ICRA, 2012.
- Rehder, J. et al. “Extending kalibr: Calibrating the extrinsics of multiple IMUs and of individual axes.” ICRA, 2016.
- Lee, D. et al. “Online Extrinsic Calibration of Monocular Camera and LiDAR on Road Scenes.” ICRA, 2020.
- OpenCV Camera Calibration Tutorial: https://docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html