4、光学与标定基础:镜头畸变、相机内参、外参、标定板设计及张正友标定法
三维扫描系统的核心任务是从二维图像中恢复三维空间坐标,而这一过程的数学前提是精确建立“像素坐标”与“空间坐标”之间的映射关系。任何镜头都存在光学畸变,任何相机安装都存在位姿偏差,若未经过标定直接使用理想针孔模型,重建误差将随测量距离线性放大。本章围绕镜头畸变模型、相机内参与外参的物理意义、标定板设计准则以及张正友标定法的完整流程展开,帮助读者建立从理论到工程落地的系统认知。
4.1 镜头畸变模型与数学表达
理想针孔模型假设光线沿直线传播,但实际镜头由多片透镜组成,光线在透镜表面发生折射,导致成像点偏离理想位置。这种偏离统称为镜头畸变,主要分为径向畸变和切向畸变两类。径向畸变源于透镜形状的球面误差,表现为图像点沿径向向内(桶形畸变)或向外(枕形畸变)偏移;切向畸变则源于透镜与成像平面不平行,表现为图像点在切线方向上的偏移。
在数学上,畸变模型通常用多项式近似。设归一化平面上的理想坐标为 (x, y),畸变后的坐标为 (xd, yd),则:
径向畸变:
x_radial = x * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_radial = y * (1 + k1*r² + k2*r⁴ + k3*r⁶)
切向畸变:
x_tangential = 2*p1*x*y + p2*(r² + 2x²)
y_tangential = p1*(r² + 2y²) + 2*p2*x*y
综合:
x_d = x_radial + x_tangential
y_d = y_radial + y_tangential
其中 r² = x² + y²
对于工业相机镜头,通常取 k1、k2、p1、p2 四个参数即可满足精度要求;对于广角镜头或鱼眼镜头,需要引入 k3 甚至更高阶项。在三维扫描系统中,畸变校正的精度直接影响点云的重投影误差,因此建议在标定后计算所有标定板角点的重投影均方根误差(RMS),一般要求 RMS < 0.1 像素。
4.2 相机内参与外参的物理意义
相机内参描述的是相机内部光学与成像元件的固有属性,它建立了从相机坐标系到像素坐标系的映射关系。内参矩阵 K 通常表示为:
K = [fx 0 cx]
[ 0 fy cy]
[ 0 0 1]
其中 fx、fy 分别为 x、y 方向上的归一化焦距(单位:像素),cx、cy 为主点坐标(光轴与成像平面的交点)。对于工业面阵相机,fx 与 fy 通常非常接近,但若镜头存在偏心或传感器像素非正方形,两者会有细微差异。内参还包括畸变系数向量 [k1, k2, p1, p2, k3]。
相机外参描述的是相机坐标系相对于世界坐标系的位姿关系,由旋转矩阵 R(3×3)和平移向量 t(3×1)组成。在三维扫描系统中,外参通常用于描述相机与扫描头、转台或机械臂之间的空间关系。外参的标定精度决定了多视角数据拼接的准确性,因此在高精度扫描场景中,外参标定往往需要借助高精度靶标或激光跟踪仪。
| 参数类型 | 符号 | 物理意义 | 典型值范围 | 标定方式 |
|---|---|---|---|---|
| 焦距 fx | fx | x方向像素焦距 | 500~5000 px | 张正友标定 |
| 焦距 fy | fy | y方向像素焦距 | 500~5000 px | 张正友标定 |
| 主点 cx | cx | 光轴与像面交点 | ≈ 分辨率/2 | 张正友标定 |
| 主点 cy | cy | 光轴与像面交点 | ≈ 分辨率/2 | 张正友标定 |
| 径向畸变 | k1, k2, k3 | 径向偏移系数 | -0.5 ~ 0.5 | 非线性优化 |
| 切向畸变 | p1, p2 | 切向偏移系数 | -0.05 ~ 0.05 | 非线性优化 |
| 旋转矩阵 | R | 世界→相机旋转 | 正交矩阵 | 外参标定 |
| 平移向量 | t | 世界→相机平移 | 视安装位置 | 外参标定 |
4.3 标定板设计准则与制作要点
标定板是标定流程中的物理基准,其精度直接决定了标定结果的上限。常见的标定板类型包括棋盘格、圆点阵、ArUco 编码板等。棋盘格因其角点检测算法成熟、亚像素提取精度高而成为工业界首选;圆点阵则适用于大视场或低纹理场景,圆心定位精度更高。
设计标定板时需遵循以下准则:
- 尺寸与视场匹配:标定板在图像中应占据视场面积的 20%~80%,过小则角点提取不稳定,过大则超出景深范围导致边缘模糊。
- 方格数量与大小:建议 9×7 或 11×8 的棋盘格(内角点),方格边长根据工作距离确定,保证每个方格在图像中至少 20×20 像素。
- 平面度要求:标定板必须为刚性平面,平面度误差应小于 0.01mm。陶瓷或玻璃基底优于亚克力,但需注意反光问题。
- 图案精度:采用高精度光绘或丝印工艺,图案位置误差应小于 0.01mm,黑白格边界应锐利无毛刺。
- 环境适应性:在工业现场建议使用漫反射表面,避免镜面反射;若使用背光标定板,需保证光照均匀。
4.4 张正友标定法原理与实操流程
张正友标定法(Zhang's Method)是介于传统标定与自标定之间的经典方法,它只需拍摄不同姿态下的平面标定板图像,即可求解相机内参和外参。其核心思想是利用平面标定板上的共面点建立单应矩阵(Homography),再通过多幅图像的单应矩阵约束求解内参。
具体流程如下:
- 图像采集:固定相机,手持或机械臂夹持标定板,在视场内平移、旋转、倾斜,采集 15~25 幅图像。要求标定板姿态覆盖俯仰、偏航、滚转三个自由度,且每幅图像中棋盘格完整可见。
- 角点提取:使用 OpenCV 的
findChessboardCorners或findCirclesGrid提取特征点,并利用cornerSubPix进行亚像素精化。 - 单应矩阵计算:每幅图像建立从世界平面(Z=0)到像素平面的单应矩阵 H,H = K [r1 r2 t]。
- 内参求解:利用旋转矩阵的正交约束,从多幅图像的单应矩阵线性求解内参初值。
- 外参求解:内参已知后,每幅图像的外参 R、t 可通过单应矩阵分解获得。
- 非线性优化:以重投影误差最小化为目标,使用 Levenberg-Marquardt 算法对所有参数(内参、外参、畸变系数)进行全局优化。
# OpenCV 标定核心代码示例
import cv2
import numpy as np
# 棋盘格内角点数
pattern_size = (9, 6)
objp = np.zeros((pattern_size[0]*pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)
obj_points = [] # 世界坐标
img_points = [] # 像素坐标
for fname in image_files:
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, pattern_size, None)
if ret:
corners_sub = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1),
(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
obj_points.append(objp)
img_points.append(corners_sub)
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(
obj_points, img_points, gray.shape[::-1], None, None)
# 评估重投影误差
total_error = 0
for i in range(len(obj_points)):
imgpoints2, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], mtx, dist)
error = cv2.norm(img_points[i], imgpoints2, cv2.NORM_L2) / len(imgpoints2)
total_error += error
print(f"RMS重投影误差: {total_error/len(obj_points):.4f} px")
4.5 实战案例:结构光扫描系统的双目标定
某汽车零部件检测项目采用双目结构光扫描仪,工作距离 800mm,视场 400×300mm,相机分辨率为 2448×2048,镜头焦距 12mm。项目要求点云精度 ±0.05mm,因此标定精度必须达到亚像素级别。
初始现象:使用出厂默认内参进行三维重建,发现点云在边缘区域出现明显的“碗状”变形,平面度误差达 0.3mm,远超规格要求。
分析过程:首先检查镜头畸变,发现 k1 = -0.12,属于中等桶形畸变,出厂内参未包含畸变校正。其次,左右相机的外参标定采用粗略的手动对齐,旋转矩阵误差约 0.5°,导致双目视差计算存在系统性偏差。
操作步骤:
- 定制玻璃基底棋盘格标定板,方格边长 20mm,精度 ±0.005mm,平面度 0.008mm。
- 在视场内采集 20 幅不同姿态的标定板图像,覆盖中心、边缘、倾斜 30° 等位置。
- 分别对左右相机进行单目标定,获得内参和畸变系数,RMS 误差均小于 0.08px。
- 使用
stereoCalibrate进行双目标定,优化左右相机相对外参,重投影误差 0.12px。 - 对标定后的图像进行畸变校正和立体校正,使极线对齐误差小于 0.5 像素。
结果对比:标定后点云平面度误差从 0.3mm 降至 0.04mm,边缘区域变形基本消除。后续在 200 个工件的批量检测中,重复性精度达到 ±0.02mm。
复盘经验:标定板的姿态多样性比数量更重要;倾斜角度应控制在 15°~45° 之间,过大的倾斜会导致角点提取不稳定。此外,标定环境的光照应均匀,避免强光直射造成反光。
4.6 常见误区与总结复盘
在三维扫描系统的标定实践中,以下误区值得特别注意:
- 误区一:标定板越大越好。标定板尺寸应与视场匹配,过大的标定板在近距离时超出景深,导致边缘角点模糊,反而降低精度。
- 误区二:忽略标定板平面度。普通亚克力板在夹持时会产生微小弯曲,引入系统性误差。建议使用陶瓷或玻璃基底,并采用三点支撑方式固定。
- 误区三:只标定一次。镜头松动、温度变化、振动都会导致内参漂移。在精密测量场景中,建议每次开机后执行快速标定,或使用自标定算法进行在线校正。
- 误区四:忽视重投影误差的分布。RMS 误差小不代表所有区域精度高,应检查误差热力图,若边缘误差明显大于中心,需考虑高阶畸变模型或更换镜头。
总结而言,光学标定是三维扫描系统开发中“投入产出比”最高的环节。一个经过精心设计的标定流程,可以显著提升点云精度和系统稳定性。建议开发团队建立标准化的标定作业指导书,明确标定板规格、图像采集规范、参数验收标准,并将标定数据存档以便追溯。