2. 相机成像基础
在机器视觉项目中,相机标定是所有测量、定位、识别任务的前提。无论是使用HALCON进行尺寸测量、机器人引导还是缺陷检测,理解相机如何将三维世界映射为二维像素,是建立标定策略、选择标定板、设计光源与安装方式的根本依据。本章从几何光学与代数投影两个维度,系统拆解针孔模型、透镜畸变、内参外参的物理意义,并给出世界坐标到像素坐标的完整变换链路。只有透彻理解这些基础,才能在HALCON中正确选择标定方法(如CalibrateCameras、CalibrateHandEye),并合理解释重投影误差、标定板位姿等关键输出。
上图展示了从世界坐标到像素坐标的完整映射链路。外参描述相机在世界中的位姿(旋转矩阵R和平移向量t),内参描述光心投影与像素缩放关系,畸变参数则修正透镜的非理想成像。下面逐一展开。
2.1 针孔模型:理想投影的数学表达
核心原理:针孔模型假设光线沿直线传播,通过光心(投影中心)在图像平面上形成倒立实像。为简化计算,通常将图像平面对称放置于光心前方,形成正立虚像。设相机坐标系中一点P(Xc, Yc, Zc),其理想投影点坐标为:
x' = Xc / Zc
y' = Yc / Zc
其中(x', y')为归一化平面坐标(焦距f=1)。实际像素坐标需乘以焦距并平移主点:
u = fx * x' + cx
v = fy * y' + cy
fx、fy分别为u、v方向的等效焦距(单位:像素),cx、cy为主点坐标(光轴与图像平面的交点)。在HALCON中,内参以相机参数元组表示,例如['area_scan_division', 0.008, 0.000006, 0.000006, 640, 512, 1280, 1024],其中0.008为焦距(米),0.000006为像元尺寸(米/像素)。
| 参数符号 | 物理含义 | 单位 | HALCON示例值 |
|---|---|---|---|
| f | 焦距(等效) | 米 | 0.008 |
| sx, sy | 像元尺寸 | 米/像素 | 6e-6 |
| cx, cy | 主点坐标 | 像素 | 640, 512 |
| Width, Height | 图像分辨率 | 像素 | 1280, 1024 |
2.2 透镜畸变:径向与切向的修正
核心原理:实际镜头存在制造误差与装配误差,导致光线偏离理想路径。畸变主要分为两类:
- 径向畸变:由透镜曲面形状引起,光线越远离光轴弯曲越严重。用k1、k2、k3描述,修正公式为:
x_corr = x' * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_corr = y' * (1 + k1*r² + k2*r⁴ + k3*r⁶)
其中r² = x'² + y'²。 - 切向畸变:由透镜与传感器不平行引起,用p1、p2描述:
x_corr = x' + 2*p1*x'*y' + p2*(r² + 2*x'²)
y_corr = y' + p1*(r² + 2*y'²) + 2*p2*x'*y'
判断方法:在HALCON中,畸变模型分为Division模型和Polynomial模型。Division模型仅用k1(有时加k2),适合广角镜头;Polynomial模型用k1-k3,适合标准工业镜头。标定时可通过重投影误差判断模型是否合适——若误差大于0.1像素,可尝试更换畸变模型或增加标定图像数量。
2.3 内参与外参:从世界到像素的桥梁
核心原理:内参矩阵K描述相机坐标系到像素坐标系的映射:
K = [fx 0 cx]
[ 0 fy cy]
[ 0 0 1]
外参由旋转矩阵R(3×3)和平移向量t(3×1)组成,描述世界坐标系到相机坐标系的刚体变换:
Pc = R * Pw + t
综合后,世界坐标到像素坐标的完整投影方程为:
s * [u, v, 1]ᵀ = K * [R | t] * [Xw, Yw, Zw, 1]ᵀ
其中s为尺度因子(等于Zc)。
操作流程(HALCON标定步骤):
- 准备标定板(如HALCON标准标定板,7×7圆点或棋盘格),测量其单个方格/圆点间距。
- 采集15-25幅不同位姿的标定板图像,覆盖视场各区域,倾斜角度控制在±30°以内。
- 使用
find_calib_object提取标定板特征点。 - 调用
calibrate_cameras进行标定,输出内参、畸变系数及每幅图像的外参。 - 检查重投影误差,若大于0.1像素则补充图像或调整标定板位姿。
| 标定项 | 输入 | 输出 | HALCON算子 |
|---|---|---|---|
| 单相机标定 | 标定板图像、板参数 | 内参、畸变、外参 | calibrate_cameras |
| 手眼标定 | 机器人位姿、相机外参 | 手眼矩阵 | calibrate_hand_eye |
| 双目标定 | 左右相机图像 | 相对外参、本征矩阵 | calibrate_stereo_system |
2.4 世界坐标与像素坐标的变换链路
核心原理:完整变换分为四步:世界→相机(外参)、相机→归一化平面(透视投影)、归一化→畸变修正、畸变修正→像素(内参)。在HALCON中,project_3d_point算子可直接实现该链路,而image_points_to_world_plane则用于将像素坐标映射到指定世界平面(如测量平面)。
案例拆解:某机器人抓取系统需将像素坐标转换为机器人基座坐标。已知相机安装在机器人第六轴法兰上(眼在手上),标定得到手眼矩阵为H(4×4)。某目标点在图像中的像素坐标为(320, 240),深度Zc=500mm。计算流程:
- 利用内参反算归一化坐标:x'=(320-cx)/fx=0.05,y'=(240-cy)/fy=-0.03。
- 畸变修正后得到(x_corr, y_corr)。
- 相机坐标:Xc=x_corr*Zc=25mm,Yc=y_corr*Zc=-15mm,Zc=500mm。
- 通过外参(相机到机器人工具)和机器人正运动学,转换到机器人基座坐标。
image_points_to_world_plane要求指定世界平面方程,否则结果无意义。
2.5 常见误区与总结复盘
误区一:忽略畸变直接使用针孔模型。在广角镜头或低畸变工业镜头中,边缘畸变可达5-10像素,直接测量会引入显著误差。即使使用远心镜头,也应标定以获取精确的放大倍率。
误区二:标定板图像数量不足或位姿单一。少于10幅图像或所有图像均平行于相机光轴,会导致内参求解病态,重投影误差虚低但实际测量偏差大。
误区三:混淆内参中的fx与f。HALCON中f是物理焦距(米),fx=f/sx是像素焦距。手动修改内参时务必保持单位一致。
误区四:外参的旋转矩阵R不满足正交性。标定结果中R应满足RᵀR=I且det(R)=1,若偏差过大说明标定失败。
总结复盘:相机标定的本质是求解内参、畸变、外参的最优估计。HALCON提供了完整的标定工具链,但理解底层模型是正确使用的前提。建议每次标定后保存标定数据(.cal文件),并在项目文档中记录标定时的温度、焦距设置等环境参数,以便后续复现或排查问题。
get_calib_data查看每幅图像的外参,检查标定板位姿是否覆盖视场四角与中心。若某区域无标定板覆盖,该区域的重投影误差可能较大,测量时应避开或补充标定。