3. 摄像头内参标定
摄像头内参标定是 ADAS 前视、环视、侧后视等视觉感知链路的起点。它的目标不是“让图像看起来更直”,而是建立像素坐标与相机坐标系下真实方向之间的稳定映射,并把镜头畸变、主点偏移、焦距误差等系统性偏差量化成可复现的参数。若内参不准,后续外参标定、测距、车道线拟合、目标定位都会继承误差,且很难通过外参补偿完全消除。
针孔模型:内参矩阵的物理含义
针孔模型把相机近似为一个投影中心与一个成像平面。设相机坐标系中一点为 Pc = (Xc, Yc, Zc),其归一化投影为 x = Xc/Zc、y = Yc/Zc。像素坐标 (u, v) 由内参矩阵 K 决定:
K = [ fx 0 cx
0 fy cy
0 0 1 ]
u = fx * x + cx
v = fy * y + cy
其中 fx = f / dx、fy = f / dy,分别表示 x、y 方向以像素为单位的等效焦距;cx、cy 是主点,即光轴与像平面的交点像素坐标。对 ADAS 常用的 1920×1080 图像,cx、cy 理论值接近 960、540,但装配公差、芯片安装偏差会使实际值偏移数十像素。若忽略主点偏移,在图像边缘会产生明显的方向性误差。需要强调:本文所有数值均为教学示例或合理假设,不代表任何具体车型的实测结果。
畸变模型:径向与切向
真实镜头不满足理想针孔。畸变模型把归一化坐标先做畸变,再乘内参。常用 Brown-Conrady 模型包含径向畸变 k1、k2、k3 与切向畸变 p1、p2:
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
对广角环视镜头,k1 常为负值,表现为桶形畸变;对长焦前视镜头,畸变较小,通常只保留 k1、k2 即可。切向畸变由镜头与传感器不平行引起,量级通常小于径向畸变,但在高精度测距中不可忽略。畸变系数与内参必须联合标定,否则把畸变残差误吸收进焦距,会导致不同视场区域精度不一致。
张正友标定法:从平面靶标到参数解
张正友标定法使用平面棋盘格,在多个姿态下拍摄。其核心是利用平面靶标上已知角点的世界坐标与图像坐标之间的单应矩阵 H,再通过旋转矩阵的正交约束求解内参。对每个姿态,有:
s * [u, v, 1]ᵀ = K [r1 r2 t] [X, Y, 1]ᵀ
H = K [r1 r2 t]
由于 r1、r2 正交且等长,可得到两个约束方程。多个姿态联立后,先闭式求解 K 的初值,再用最大似然估计优化全部参数,包括内参、畸变系数和每幅图像的外参。OpenCV 的 calibrateCamera 即采用这一思路。实际工程中,初值质量决定优化是否收敛到全局最优,因此棋盘格角点提取的亚像素精度至关重要。
标定板设计与采集流程
标定板设计需与视场和景深匹配。对前视 100° 视场相机,建议棋盘格内角点不少于 9×6,方格边长 30~50 mm,板面平整度优于 0.1 mm,图案对比度高、无眩光。若相机最近工作距离为 0.5 m,标定板应能覆盖图像 1/3 以上区域,否则角点约束不足。采集时,标定板需覆盖图像中心、四角、上下边缘,并包含倾斜、旋转、远近不同姿态,通常 15~25 幅有效图像即可,但应避免全部姿态集中在同一深度。
参数优化与验证
优化阶段通常最小化重投影误差:把每幅图像检测到的角点与由当前参数投影得到的角点比较,求均方根误差。OpenCV 返回的 ret 即整体 RMS,单位是像素。工程上,前视相机 RMS 宜小于 0.3 px,环视广角相机宜小于 0.5 px。但 RMS 小并不等于参数正确:若采集姿态单一,可能过拟合。因此需做交叉验证——留出 2~3 幅未参与标定的图像,计算其重投影误差;若明显大于训练集,说明姿态覆盖不足。
验证还包括去畸变后的直线度检查:拍摄已知直线(如车道线、建筑边缘),去畸变后应保持直线;以及重投影方向检查:把标定板放在不同位置,比较预测角点与实际角点。若边缘区域误差显著大于中心,应增加边缘姿态或提高畸变阶数。最终参数应连同标定日期、温度、镜头型号、图像分辨率一起归档,便于追溯。
把上述流程落到工程中,关键不是“跑一次标定”,而是建立可复现的采集规范与验收判据。建议每台相机在产线完成内参标定后,保存原始图像、角点检测结果、优化日志和最终参数,并在整车下线前用同一块标定板做一次快速复核。若复核 RMS 超过阈值或去畸变直线度异常,应优先检查标定板平整度、角点提取质量和采集姿态覆盖,而不是直接调整外参。内参稳定,外参才有意义。