4、相机标定基础:相机模型、内参外参、畸变模型、标定板与标定流程简介
在Halcon机器视觉项目中,无论是测量工件尺寸、定位元件中心,还是计算毫米像素比(µm/px),其精度上限都直接取决于相机标定的质量。相机标定的本质是建立三维世界坐标与二维图像坐标之间的数学映射关系,并消除镜头畸变带来的误差。本章将系统梳理针孔相机模型、内参与外参的物理意义、畸变模型分类、标定板选型以及标准标定流程,为后续的像素比计算和旋转中心求解打下坚实的理论基础。
4.1 相机模型:从三维世界到二维像素的映射
机器视觉中最常用的相机模型是针孔模型(Pinhole Model)。该模型假设光线沿直线传播,通过光心(Optical Center)投影到成像平面上。尽管真实镜头存在畸变和透镜厚度,但针孔模型作为理想化的数学抽象,为标定提供了基础框架。其核心映射过程可分为四个坐标系的连续变换:世界坐标系 → 相机坐标系 → 图像物理坐标系 → 图像像素坐标系。
世界坐标系(Xw, Yw, Zw)是用户自定义的参考系,通常以标定板平面为Zw=0平面。相机坐标系(Xc, Yc, Zc)以光心为原点,Zc轴沿光轴方向。从世界坐标到相机坐标的变换属于刚体变换,仅包含旋转矩阵R(3×3)和平移向量T(3×1),这组参数被称为外参(Extrinsic Parameters)。外参描述了相机相对于世界坐标系的位姿,对于单目视觉而言,每拍摄一张标定板图像,外参都不同。
从相机坐标到图像坐标的投影由内参决定。理想情况下,相机坐标系中的点(Xc, Yc, Zc)投影到图像物理坐标(x, y)满足:
x = fx * Xc / Zc + cx
y = fy * Yc / Zc + cy
其中fx和fy分别为x、y方向上的归一化焦距(单位:像素),cx和cy为主点(Principal Point)坐标,即光轴与成像平面的交点。这4个参数构成内参矩阵(Intrinsic Matrix)K:
K = [fx 0 cx]
[ 0 fy cy]
[ 0 0 1]
在实际Halcon项目中,我们通常使用calibrate_cameras算子一次性求解内参、外参和畸变系数。值得注意的是,Halcon的标定模型支持多种相机类型,包括面阵相机(Area Scan)、线阵相机(Line Scan)和立体相机(Stereo),不同模型的内参定义略有差异。
4.2 畸变模型:镜头非理想性的数学补偿
真实镜头并非完美针孔,光线通过透镜时会发生折射偏差,导致图像畸变。畸变主要分为两类:径向畸变(Radial Distortion)和切向畸变(Tangential Distortion)。径向畸变源于透镜形状的非理想性,表现为图像点沿径向向内(桶形畸变)或向外(枕形畸变)偏移;切向畸变则源于透镜与成像平面不平行,表现为图像点沿切线方向偏移。
Halcon中采用的畸变模型通常包含5个系数:径向畸变系数k1、k2、k3,以及切向畸变系数p1、p2。校正公式如下:
x_distorted = x * (1 + k1*r² + k2*r⁴ + k3*r⁶) + 2*p1*x*y + p2*(r² + 2*x²)
y_distorted = y * (1 + k1*r² + k2*r⁴ + k3*r⁶) + p1*(r² + 2*y²) + 2*p2*x*y
其中r² = x² + y²,x和y为归一化图像坐标。对于大多数工业镜头,k3通常可以忽略,但在使用广角镜头或高精度测量时,k3的引入能显著提升边缘区域的校正精度。
| 畸变类型 | 系数 | 典型影响 | Halcon算子 |
|---|---|---|---|
| 径向畸变(桶形) | k1 < 0 | 图像边缘向外膨胀,直线变弯 | change_radial_distortion_image |
| 径向畸变(枕形) | k1 > 0 | 图像边缘向内收缩,中心放大 | change_radial_distortion_image |
| 切向畸变 | p1, p2 | 图像呈梯形或平行四边形变形 | calibrate_cameras |
在Halcon中,标定完成后可以使用change_radial_distortion_image算子对图像进行畸变校正,也可以使用map_image配合畸变映射表进行实时校正。对于高精度测量项目,建议在标定后立即校正图像,再进行像素比计算和特征提取。
4.3 标定板选型与标定流程
标定板是标定过程中的基准参照物,其精度直接影响标定结果。Halcon支持多种标定板类型,最常用的是圆点阵列标定板(Caltab)和棋盘格标定板(Checkerboard)。圆点标定板在Halcon中通过gen_caltab算子生成描述文件,其优势在于圆点中心提取精度高、对遮挡鲁棒性好;棋盘格标定板则更适用于角点检测,但需要保证角点清晰可见。
标定板的关键参数包括:marker直径、marker间距、行列数、板厚以及材质。对于高精度测量,建议选择陶瓷或玻璃基底的光学标定板,其热膨胀系数低、平面度好。Halcon的标定板描述文件(.descr)中包含了所有marker的世界坐标,标定过程中通过提取图像中的marker中心并与描述文件匹配,即可建立对应关系。
标准标定流程如下:
- 生成标定板描述文件:使用
gen_caltab生成标定板并输出描述文件,或使用Halcon自带的标定板图像。 - 采集标定图像:在不同位姿(倾斜、平移、旋转)下拍摄10~20张标定板图像,确保标定板覆盖整个视场,且每张图像中marker清晰可辨。
- 提取标定板角点/圆心:使用
find_caltab和find_marks_and_pose算子自动定位标定板并提取marker中心。 - 执行标定:调用
calibrate_cameras算子,输入所有图像的marker坐标和描述文件,求解内参、外参和畸变系数。 - 验证标定精度:使用
calibration_errors查看重投影误差,通常要求均方根误差小于0.1像素。
4.4 案例拆解:Halcon标定实操与精度验证
以下通过一个典型的工业测量场景,演示Halcon标定的完整流程。假设我们需要对一台500万像素面阵相机(2448×2048)进行标定,镜头焦距12mm,工作距离约300mm,视场约150mm×120mm。
第一步:生成标定板描述文件
* 生成30mm×30mm的圆点标定板,marker直径3.75mm,间距7.5mm
gen_caltab (30, 30, 3.75, 7.5, 7, 7, 0, 'caltab.descr', 'caltab.ps')
第二步:采集并读取标定图像
* 假设已采集15张不同位姿的标定板图像
read_image (Image, 'calib_image_' + I + '.png')
第三步:提取标定板marker
find_caltab (Image, Caltab, 'caltab.descr', 3, 112, 5)
find_marks_and_pose (Image, Caltab, 'caltab.descr', 3, 112, 5, 0.9, 30, 10, RCoord, CCoord, StartPose)
第四步:执行标定
calibrate_cameras (CalibData, Errors)
第五步:验证标定结果
* 查看重投影误差
calibration_errors (CalibData, Errors)
* 获取相机内参
get_calib_data (CalibData, 'camera', 0, 'params', CameraParam)
标定完成后,我们得到的内参矩阵可能为:fx=2448.32,fy=2447.85,cx=1224.15,cy=1023.78,畸变系数k1=-0.045,k2=0.012。重投影误差为0.08像素,满足高精度测量要求。
此时,毫米像素比的计算公式为:
像素比(µm/px) = 物距(mm) * 1000 / fx
若物距为300mm,则像素比 = 300 × 1000 / 2448.32 ≈ 122.5 µm/px。但实际项目中,物距可能因机械安装误差而略有变化,因此更推荐使用标定板直接计算像素比:将标定板放置在测量平面上,提取两个已知间距的marker中心,用像素距离除以物理距离即可得到精确的像素比。
4.5 常见误区与总结复盘
在相机标定实践中,工程师常犯以下错误,需要特别注意规避:
- 标定板图像数量不足:少于10张图像容易导致外参求解不稳定,建议至少采集12~15张。
- 标定板位姿单一:如果所有图像都是正对相机拍摄,外参中的旋转矩阵无法被充分约束,标定结果可能退化。应包含倾斜、旋转等多样位姿。
- 忽略畸变校正:标定后直接使用原始图像进行测量,导致边缘区域误差增大。
- 标定板脏污或反光:marker提取精度下降,直接影响标定质量。应定期清洁标定板,并避免强光直射。
- 相机或镜头松动:标定后若相机位置或焦距发生变化,标定参数失效,必须重新标定。
总结而言,相机标定是机器视觉测量的基石。理解针孔模型、内参外参和畸变模型,掌握标定板选型与标准流程,能够帮助工程师在Halcon中高效完成标定任务,并为后续的毫米像素比计算和旋转中心求解提供可靠的数据基础。标定质量的好坏,直接决定了视觉系统能否达到预期的测量精度,因此值得投入足够的时间和精力进行优化。