2. 相机模型与标定基础

在环视与多摄像头视觉感知系统中,标定的本质是建立“像素坐标”与“真实世界坐标”之间的可计算映射。没有准确的相机模型与标定参数,后续的鸟瞰图拼接、目标测距、多相机目标关联都会出现系统性偏差。本节围绕针孔模型、畸变模型、内参外参、张正友标定法以及多相机联合标定流程展开,并给出可落地的实战标定案例。

一、针孔模型:从三维点到像素的投影链

针孔模型是最常用的相机成像近似模型。它假设光线通过一个理想小孔后,在成像平面上形成倒立实像。在工程中通常把像平面翻转到相机前方,得到更直观的投影关系。一个世界点 P_w = (X, Y, Z) 经过外参变换到相机坐标系,再经过内参投影到像素坐标 (u, v),完整链路如下:

世界坐标 P_w
  → 外参 [R | t] → 相机坐标 P_c = R·P_w + t
  → 内参 K → 归一化坐标 (x, y) = (X_c/Z_c, Y_c/Z_c)
  → 像素坐标 u = fx·x + cx, v = fy·y + cy
  → 畸变模型修正 → 实际像素 (u_d, v_d)

其中内参矩阵 K 为:

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

fx、fy 是以像素为单位的焦距,cx、cy 是主点坐标。外参 [R|t] 描述相机在世界坐标系中的位姿,R 为 3×3 旋转矩阵,t 为 3×1 平移向量。环视系统中,每个相机都有自己的外参,联合标定就是求解这些外参并统一到车身坐标系。

二、畸变模型:径向畸变与切向畸变

真实镜头并非理想针孔,广角鱼眼镜头尤其明显。畸变主要分为径向畸变和切向畸变。径向畸变由镜头曲率引起,表现为“桶形”或“枕形”;切向畸变由镜头与成像平面不平行引起。常用畸变模型为:

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、k2、k3 为径向畸变系数,p1、p2 为切向畸变系数。鱼眼相机通常采用等距投影模型或 Kannala-Brandt 模型,不能直接套用普通多项式畸变模型。标定后必须用去畸变函数把原始图像校正为无畸变图像,否则拼接缝处会出现明显弯曲。

环视系统中,鱼眼相机建议使用专用鱼眼模型标定,普通针孔畸变模型在视场边缘误差会迅速增大。

三、张正友标定法:从棋盘格到内参

张正友标定法利用平面棋盘格在不同位姿下的多张图像求解内参和外参。其核心思想是:棋盘格平面上的点满足 Z=0,因此单应矩阵 H 可以连接棋盘格坐标与像素坐标。通过多张图像提供的约束,先求解内参矩阵,再求解每张图像对应的外参。

  1. 打印棋盘格标定板,固定于刚性平面,确保平整。
  2. 从不同角度、不同距离拍摄 15~30 张图像,覆盖画面中心和边缘。
  3. 提取棋盘格角点,得到亚像素级角点坐标。
  4. 计算单应矩阵,建立棋盘格坐标与像素坐标的对应关系。
  5. 利用旋转矩阵正交约束求解内参矩阵 K。
  6. 求解每张图像的外参,并用最大似然估计优化所有参数。
  7. 计算重投影误差,评估标定质量。

OpenCV 中常用接口如下:

ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    object_points, image_points, image_size, None, None)

# 去畸变
undistorted = cv2.undistort(img, K, dist, None, new_K)

重投影误差通常要求小于 0.5 像素,鱼眼相机可放宽到 1 像素以内。若误差过大,应检查棋盘格平整度、角点提取质量和图像覆盖范围。

四、多相机联合标定流程

环视系统通常包含前、后、左、右四个鱼眼相机,有时还包括侧向或后视摄像头。多相机联合标定的目标是:各相机内参独立标定,外参统一到车身坐标系,并保证相邻相机重叠区域对齐。典型流程如下:

阶段 主要任务 关键输出 常见工具
单相机内参标定 棋盘格/鱼眼标定板采集,求解 K 与畸变系数 内参矩阵、畸变系数 OpenCV、Kalibr
相机间外参标定 利用共视标定物或特征点求解相机间 R、t 相机间外参 OpenCV stereoCalibrate
车身坐标系对齐 将各相机外参统一到车辆后轴中心或地面坐标系 车身坐标系外参 手眼标定、地面标定
拼接与验证 生成鸟瞰图,检查接缝、直线和距离精度 拼接参数、误差报告 自研拼接工具

联合标定中,外参初值可以通过车辆设计尺寸估算,再通过优化精调。若相邻相机重叠区域有共同标定物,可直接求解相对外参;若没有,则需要借助地面标定线、激光测距仪或全站仪建立统一参考。

五、实战标定案例:四路鱼眼环视标定

某车型配置四个 190° 鱼眼相机,安装于前保险杠、后牌照框、左右后视镜下方。标定场地为 10m×10m 平整地面,铺设棋盘格标定布和地面标定线。操作步骤如下:

  1. 固定车辆,确保轮胎气压正常,车身水平。
  2. 每个相机单独采集 20 张棋盘格图像,覆盖中心与边缘。
  3. 使用鱼眼模型标定内参,重投影误差控制在 0.8 像素以内。
  4. 利用地面标定线求解各相机到车身坐标系的外参。
  5. 生成鸟瞰图,检查 2m、5m、8m 距离处的直线是否平直。
  6. 若接缝错位,微调外参并重新优化,直到误差小于 5 像素。
标定日志示例:
camera_front: fx=482.3 fy=481.7 cx=642.1 cy=358.4
camera_rear : fx=479.8 fy=480.2 cx=638.7 cy=361.2
camera_left : fx=485.1 fy=484.6 cx=645.3 cy=355.9
camera_right: fx=483.4 fy=482.9 cx=640.8 cy=359.6
reprojection_error: front=0.62px rear=0.71px left=0.68px right=0.66px
stitch_error: max=4.3px mean=2.1px
标定质量直接决定环视系统的可用性。内参误差会导致去畸变不彻底,外参误差会导致拼接错位和测距偏差。建议每次更换相机、调整安装位置或碰撞后重新标定。

六、常见误区与复盘

  • 只标内参不标外参:内参只解决单相机成像,环视拼接必须依赖外参。
  • 棋盘格不平整:标定板弯曲会引入系统性误差,重投影误差看似正常但外参不准。
  • 图像覆盖不足:角点集中在画面中心,边缘畸变系数估计不准。
  • 忽略温度与振动:车辆行驶后相机位姿可能变化,量产车需考虑在线标定或自标定。
  • 用错畸变模型:鱼眼相机使用普通针孔模型,边缘误差会急剧增大。

复盘时建议建立标定档案:记录相机型号、镜头、安装位置、标定日期、内参、外参、重投影误差和拼接误差。这样在出现环视拼接异常时,可以快速定位是内参漂移、外参变化还是标定板问题。

针孔模型 · 畸变模型 · 内外参 · 多相机联合标定 世界坐标 P_w (X, Y, Z) 车身/地面坐标系 外参 [R | t] 旋转 R + 平移 t 相机位姿 相机坐标 P_c P_c = R·P_w + t Z_c 为深度 内参 K fx, fy, cx, cy 像素焦距与主点 畸变模型 径向畸变 k1, k2, k3 + 切向畸变 p1, p2 鱼眼相机:等距投影 / Kannala-Brandt 模型 像素坐标 (u, v) u = fx·x + cx v = fy·y + cy 张正友标定法 1. 棋盘格多角度拍摄 2. 角点提取与单应矩阵 3. 求解内参 K 与外参 4. 重投影误差优化 多相机联合标定 前 / 后 / 左 / 右鱼眼相机 内参独立 + 外参统一 车身坐标系对齐 鸟瞰图拼接与验证 实战标定案例 190° 鱼眼 × 4 重投影误差 < 0.8px 拼接误差 < 5px 地面标定线验证 标定链路:世界坐标 → 外参 → 相机坐标 → 内参 → 像素坐标 → 畸变修正 → 多相机拼接

掌握上述模型与流程后,后续的鸟瞰图生成、目标测距和多相机目标关联才有可靠基础。标定不是一次性工作,而是需要持续验证和复盘的工程环节。