4. 相机标定与畸变校正
在车载环视泊车系统中,四路或更多路广角鱼眼相机的图像必须被精确投影到统一的鸟瞰俯视图上,才能实现无缝拼接与障碍物距离感知。然而,任何一颗车载摄像头在出厂时都存在两类系统性误差:一是镜头光学设计带来的畸变(尤其是径向畸变和切向畸变),二是相机安装位置与角度带来的外参偏差。如果不对这些误差进行标定与校正,拼接出的全景图会出现明显的拼接错位、车道线弯曲、物体重影等问题,严重时甚至导致泊车辅助功能失效。本章将系统讲解相机标定的数学原理、棋盘格标定的完整工程流程、张正友标定法的核心思想,以及在实际车载环境下的标定实施要点。
上图展示了车载环视相机标定的完整工程链路:从棋盘格图像采集开始,经过角点检测、内参估计、外参估计、畸变校正到最终的重投影验证。下面我们将逐一深入每个环节的数学原理与工程实现。
4.1 相机成像模型与内参外参核心原理
相机标定的本质是求解从三维世界坐标到二维像素坐标的映射关系。在针孔相机模型中,这个映射可以分解为四个坐标系的变换:世界坐标系 → 相机坐标系 → 图像物理坐标系 → 像素坐标系。其数学表达式为:
Zc * [u, v, 1]^T = K * [R | t] * [Xw, Yw, Zw, 1]^T
其中,内参矩阵K包含焦距(fx, fy)和主点坐标(cx, cy),描述了相机本身的物理特性;外参[R|t]描述了相机在世界坐标系中的位姿。对于环视系统,每颗相机的外参需要转换到以车身中心为原点的车身坐标系下,才能实现多路图像的拼接。
| 参数类型 | 符号 | 物理意义 | 车载环视中的典型值 |
|---|---|---|---|
| 内参-焦距 | fx, fy | 像素单位下的焦距 | 300~800 pixel(取决于分辨率) |
| 内参-主点 | cx, cy | 光轴与成像平面的交点 | 图像中心附近 |
| 内参-径向畸变 | k1, k2, k3 | 镜头径向曲率引起的畸变 | k1≈-0.3~0.1, k2≈0.01~0.1 |
| 内参-切向畸变 | p1, p2 | 镜头与传感器不平行引起的畸变 | 通常较小,|p|<0.01 |
| 外参-旋转 | R (3x3) | 相机坐标系相对车身坐标系的旋转 | 俯仰角约30°~60° |
| 外参-平移 | t (3x1) | 相机光心在车身坐标系中的位置 | 前后保险杠、左右后视镜位置 |
核心理解:内参是相机的“出厂属性”,一旦镜头和传感器固定,内参基本不变;外参则随安装位置和角度变化,在车辆下线或维修后必须重新标定。环视系统的标定通常分为两步:先标定内参(离线),再标定外参(在线或下线工位)。
4.2 棋盘格标定流程与张正友标定法详解
张正友标定法是目前工业界最广泛使用的平面标定方法,它只需要拍摄不同位姿的平面棋盘格,即可求解全部内参和外参。其核心思想是利用棋盘格角点的共面性,建立单应性矩阵H,然后通过多幅图像约束求解内参,最后通过非线性优化细化所有参数。
4.2.1 棋盘格标定操作流程
- 准备标定板:使用高精度打印的棋盘格(如10x7格,每格边长30mm),粘贴在刚性平板上。对于车载环视,建议使用大尺寸标定布(2m x 2m以上)铺在地面。
- 图像采集:将标定板放置在相机视野内,拍摄15~25张不同角度、不同距离的图像。要求:标定板倾斜角度在±30°以内,覆盖画面中心与边缘,避免纯正面拍摄。
- 角点检测:使用OpenCV的
findChessboardCorners()函数自动检测角点,并通过cornerSubPix()进行亚像素级精确定位。 - 内参标定:调用
calibrateCamera(),输入角点坐标和对应的世界坐标(以棋盘格左上角为原点),输出内参矩阵K、畸变系数D、每幅图像的外参。 - 重投影验证:将世界坐标点通过标定结果投影到像素平面,计算与检测角点的均方根误差(RMS),要求RMS < 0.1像素。
- 外参标定:在车辆坐标系下放置标定布,通过已知的标定布位置反算相机到车身的旋转和平移矩阵。
4.2.2 张正友标定法数学原理
张正友法的核心步骤包括:
- 单应性矩阵计算:对于每幅图像,棋盘格平面上的点满足z=0,因此世界坐标到像素坐标的映射简化为H = K[r1 r2 t],其中H是3x3单应性矩阵。
- 内参约束:利用旋转矩阵的正交性(r1^T r2 = 0, |r1| = |r2|),可以得到关于内参的两个基本约束方程,通过多幅图像联立求解内参。
- 外参求解:内参已知后,每幅图像的外参可以通过H矩阵分解得到:r1 = λK⁻¹h1, r2 = λK⁻¹h2, r3 = r1×r2, t = λK⁻¹h3。
- 畸变系数估计:先忽略畸变求解线性解,然后通过最小二乘估计畸变系数初值。
- 全局优化:使用Levenberg-Marquardt算法对所有参数(内参、外参、畸变)进行非线性最小化,目标函数为重投影误差平方和。
工程经验:在车载环视标定中,建议使用非对称棋盘格或圆形标定板(如ACIR板),以提高角点检测的鲁棒性。同时,标定板的平整度直接影响标定精度,建议使用铝板或碳纤维板,避免使用纸板。
4.3 畸变校正算法与鱼眼相机处理
车载环视相机通常采用广角镜头(视场角≥180°),其畸变远大于普通镜头。畸变模型分为径向畸变和切向畸变两类。径向畸变使直线成像为曲线,切向畸变使图像产生梯形失真。校正过程分为两步:畸变映射和像素重采样。
// 畸变校正核心公式(OpenCV实现)
// 归一化坐标 (x, y) 经过畸变后:
x_dist = x * (1 + k1*r² + k2*r⁴ + k3*r⁶) + 2*p1*x*y + p2*(r² + 2*x²)
y_dist = y * (1 + k1*r² + k2*r⁴ + k3*r⁶) + p1*(r² + 2*y²) + 2*p2*x*y
// 其中 r² = x² + y²
对于鱼眼相机,OpenCV提供了fisheye::calibrate()和fisheye::initUndistortRectifyMap()函数,采用等距投影模型(r = fθ),能够更好地拟合超广角镜头的畸变特性。在环视系统中,畸变校正后还需要进行透视变换,将图像投影到鸟瞰视角。
| 畸变类型 | 产生原因 | 数学模型 | 对环视图像的影响 |
|---|---|---|---|
| 径向畸变 | 镜头曲面折射不均匀 | k1, k2, k3多项式 | 直线变曲线,拼接处弯曲 |
| 切向畸变 | 镜头与传感器不平行 | p1, p2 | 图像倾斜,拼接错位 |
| 薄棱镜畸变 | 镜头内部元件微小偏移 | s1, s2, s3, s4 | 高精度标定时需考虑 |
风险提示:畸变校正后的图像边缘区域会因插值产生模糊,且有效像素减少。在环视系统中,应保留足够的边缘余量(通常保留原始图像的60%~70%),否则会影响拼接后的视野范围。此外,校正后的图像需要重新计算相机内参,不能直接使用原始内参。
4.4 实战案例:某车型环视系统标定与调试
案例背景:某SUV车型搭载四路鱼眼相机(前视、后视、左视、右视),分辨率为1280x800,视场角190°。在试生产阶段发现拼接后的鸟瞰图存在以下问题:①车辆右侧车道线在拼接处出现约15cm的错位;②后方图像在倒车时出现明显的“桶形”畸变残留;③左侧图像亮度与右侧不一致。
初始数据与现象:使用OpenCV 4.5.3进行标定,采集了每路相机20幅棋盘格图像(棋盘格尺寸10x7,格边长25mm)。初次标定结果:前视相机重投影误差RMS=0.23像素,后视RMS=0.31像素,左视RMS=0.18像素,右视RMS=0.27像素。虽然RMS均小于0.5像素,但拼接效果仍不理想。
分析判断过程:
- 检查标定板图像,发现后视相机有3幅图像中棋盘格边缘被截断,导致角点检测不完整,影响了标定精度。
- 检查外参标定,发现右侧相机安装位置与设计值偏差5mm,导致外参平移量不准确。
- 检查畸变校正后的图像,发现边缘区域有效像素损失严重,右侧图像有效区域比左侧少约12%。
实际操作步骤:
- 重新采集后视相机标定图像,确保棋盘格完整出现在画面中,且覆盖边缘区域,共采集25幅。
- 使用
fisheye::calibrate()替代普通calibrateCamera(),并设置CALIB_RECOMPUTE_EXTRINSIC标志。 - 在标定场使用激光定位仪精确测量四路相机的安装位置,更新外参初值。
- 调整畸变校正参数,将校正后的图像尺寸从1280x800裁剪为960x600,保留有效视野。
结果对比:重新标定后,四路相机的重投影误差RMS均降至0.08像素以下。拼接错位从15cm缩小到2cm以内,桶形畸变基本消除。通过亮度均衡算法(基于多频段融合),左右亮度差异从30%降至5%以内。
风险与代价:重新标定增加了约40分钟的产线调试时间,但显著提升了拼接质量。后续在量产中,我们优化了标定流程,将标定时间压缩到15分钟以内。
复盘经验:①标定板图像质量比数量更重要,必须保证角点完整;②鱼眼相机必须使用鱼眼模型,普通针孔模型无法拟合边缘畸变;③外参标定需要高精度的测量设备,激光定位仪是必要的;④畸变校正后的图像裁剪需要根据实际视野需求权衡。
4.5 常见误区与总结复盘
在车载环视标定实践中,工程师常陷入以下误区:
- 误区一:认为标定板图像越多越好。实际上,如果图像之间位姿变化过小,会导致单应性矩阵求解病态,建议覆盖不同角度和距离。
- 误区二:忽略标定板的平整度。纸板在高温或潮湿环境下会变形,导致角点坐标误差,建议使用玻璃或铝基板。
- 误区三:将内参标定和外参标定混为一谈。内参只需标定一次,外参在车辆维修、更换摄像头后必须重新标定。
- 误区四:直接使用OpenCV默认参数而不针对鱼眼镜头调整。对于视场角大于150°的镜头,必须使用
fisheye模块。 - 误区五:忽略温度对镜头的影响。车载环境温度范围-40°C~85°C,镜头热胀冷缩会导致焦距漂移,建议在标定时考虑温度补偿。
总结:相机标定是环视系统的“地基工程”,内参标定解决“看得准”的问题,外参标定解决“拼得齐”的问题。张正友标定法提供了优雅的数学框架,但工程实现中需要结合鱼眼模型、高精度标定板、合理的图像采集策略以及严格的重投影验证。建议在产线标定工位配置自动化标定程序,通过预设的标定布和机械定位,将标定时间控制在10分钟以内,同时保证RMS误差小于0.1像素。对于售后维修场景,可开发基于自然特征点的快速标定算法,利用车道线、路沿等环境特征进行外参自标定,减少人工干预。