3. 相机标定基础

在多相机大视野拼接与尺寸测量中,标定是整条测量链的“地基”。拼接需要知道各相机之间的空间关系,尺寸测量需要把像素距离换算成毫米,这两件事都依赖同一组参数:内参、外参和畸变系数。本节从成像模型出发,把参数含义、标定流程和标定板选择串成一条可执行的线索。

一、针孔模型:像素坐标与三维点的桥梁

针孔模型把相机简化为一个小孔成像系统。设世界坐标系下一点 P_w = (X, Y, Z),先经外参变换到相机坐标系:

P_c = R · P_w + t
R 为 3×3 旋转矩阵,t 为 3×1 平移向量

再经内参投影到像素平面。若相机坐标系下点为 (X_c, Y_c, Z_c),归一化坐标为 x = X_c/Z_c,y = Y_c/Z_c,则像素坐标:

u = fx · x + cx
v = fy · y + cy
内参矩阵 K = [ fx  0  cx
               0  fy  cy
               0   0   1 ]

其中 fx、fy 是以像素为单位的等效焦距,cx、cy 是主点(光轴与像面的交点)像素坐标。内参只与相机和镜头自身有关,与相机摆放位置无关;外参 R、t 描述相机相对世界坐标系的位置和姿态,会随相机移动而改变。多相机拼接时,正是通过各相机外参把不同视角统一到同一世界坐标系。

二、畸变模型:为什么直线会变弯

真实镜头不满足理想针孔假设,主要引入径向畸变和切向畸变。径向畸变使点沿径向偏移,常用 k1、k2、k3 描述;切向畸变由镜头与像面不平行引起,用 p1、p2 描述。以归一化坐标 (x, y) 为例,r² = x² + y²:

x_dist = x(1 + k1r² + k2r⁴ + k3r⁶) + 2p1xy + p2(r² + 2x²)
y_dist = y(1 + k1r² + k2r⁴ + k3r⁶) + p1(r² + 2y²) + 2p2xy

普通工业镜头通常取 k1、k2、p1、p2 五项即可;广角或大视野镜头畸变明显,需加入 k3。畸变系数与内参一起在标定中求解。测量前必须先去畸变,否则边缘区域的像素误差会直接放大为毫米级尺寸偏差。

针孔成像与标定参数关系 世界坐标系 标定板角点 P_w (X, Y, Z) 棋盘格已知间距 外参 R, t 相机位姿 P_c = R·P_w + t 随相机移动改变 内参 K fx, fy, cx, cy u = fx·x + cx 与相机自身有关 畸变系数 k1,k2,k3 p1,p2 去畸变后使用 像素坐标 (u, v) 先畸变校正 → 再内参投影 → 得到理想像素位置 测量时用该关系反算实际尺寸 张正友标定法流程 ① 制作/选板 棋盘格已知间距 ② 多姿态拍摄 ≥10~15 张 ③ 角点提取 亚像素定位 ④ 求解参数 K、畸变、外参 ⑤ 重投影误差评估 一般 < 0.3 像素

三、张正友标定法:从平面棋盘格到参数

张正友标定法使用一块平面棋盘格,在多个不同姿态下拍摄。由于棋盘格平面可设 Z = 0,单应矩阵 H 把棋盘格坐标映射到像素坐标,而 H 与内参、外参存在约束关系。利用旋转矩阵的正交性,可从多张图像的单应矩阵中解出内参初值,再通过最大似然估计优化全部参数。

实际操作中,以 OpenCV 为例,典型流程如下:

# 1. 定义棋盘格内角点数量,例如 9×6
pattern_size = (9, 6)
# 2. 生成世界坐标:每个格子边长 10 mm
objp = np.zeros((9*6, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2) * 10.0
# 3. 对每张图 findChessboardCorners + cornerSubPix
# 4. calibrateCamera(objpoints, imgpoints, img_size, None, None)
# 返回 ret, K, dist, rvecs, tvecs

标定完成后重点看两个量:一是重投影误差 ret,即所有角点由三维点投影回图像后与检测角点的平均像素偏差,一般要求小于 0.3 像素,大视野测量建议控制在 0.1~0.2 像素;二是逐张图像的误差分布,若某张明显偏大,说明该姿态拍摄质量差或角点误检,应剔除后重新标定。

四、标定板选择:精度与视野的匹配

标定板不是越大越好,也不是格子越密越好,关键是让棋盘格在图像中占据足够面积,同时角点清晰可检。常用选择依据如下:

考虑因素推荐做法原因
棋盘格尺寸占图像宽度 1/2 ~ 2/3角点分布覆盖视场,约束更均匀
格子边长大视野选 20~50 mm,小视野选 5~10 mm保证角点亚像素检测稳定
材质陶瓷或铝基板,玻璃基板用于高精度热膨胀小、平面度好
图案黑白棋盘格或圆点阵列棋盘格角点检测成熟,圆点抗模糊
拍摄姿态倾斜 15°~45°,覆盖画面四角与中心充分激励畸变与焦距参数
标定板平面度直接影响外参精度。若用打印纸贴在普通板上,纸张翘曲会引入系统性误差,大视野测量中可能达到零点几毫米,建议使用陶瓷或铝基标定板。

五、标定结果如何用于拼接与测量

得到各相机的 K、dist 后,先对图像去畸变,再用外参把各相机坐标系统一到同一世界坐标系。多相机拼接时,若相机之间没有共同视野,可借助同一块标定板分别标定各相机到世界坐标系的外参,从而建立相机间变换。尺寸测量时,用标定得到的像素当量(mm/pixel)或直接通过投影关系反算实际距离。需要强调的是,标定完成后相机、镜头、焦距、光圈一旦变动,内参和外参都可能失效,必须重新标定。

常见误区:只标定一次就长期使用;或只关注重投影误差数值,忽略误差在画面中的分布。正确做法是保存标定时的图像、角点、参数和误差报告,定期复标,并在测量结果异常时优先检查标定状态。

把本节内容压缩成一句话:针孔模型给出“三维点如何变成像素”的数学关系,畸变模型修正镜头带来的非线性偏移,内参描述相机自身、外参描述相机位姿,张正友标定法用多姿态棋盘格同时求解这些参数,而标定板的选择与拍摄质量决定了参数是否可靠。后续拼接与测量中的所有坐标换算,都建立在这组参数之上。