2. 相机成像基础

在机器视觉项目中,相机标定是所有测量、定位、识别任务的前提。无论是使用HALCON进行尺寸测量、机器人引导还是缺陷检测,理解相机如何将三维世界映射为二维像素,是建立标定策略、选择标定板、设计光源与安装方式的根本依据。本章从几何光学与代数投影两个维度,系统拆解针孔模型、透镜畸变、内参外参的物理意义,并给出世界坐标到像素坐标的完整变换链路。只有透彻理解这些基础,才能在HALCON中正确选择标定方法(如CalibrateCameras、CalibrateHandEye),并合理解释重投影误差、标定板位姿等关键输出。

世界坐标系 Xw Yw Zw 相机坐标系 Xc Yc Zc 透镜 光心Oc 图像平面 像素坐标系 (u,v) 主点 外参 R, t 世界→相机 内参 f, cx, cy 相机→像素 畸变 k1,k2,p1,p2 径向+切向 变换链路: 世界(Xw,Yw,Zw) → 外参(R,t) → 相机(Xc,Yc,Zc) → 内参(f,cx,cy) → 像素(u,v)

上图展示了从世界坐标到像素坐标的完整映射链路。外参描述相机在世界中的位姿(旋转矩阵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
经验提醒:HALCON中焦距参数f与像元尺寸sx、sy是分开存储的,实际fx = f / sx。标定时若像元尺寸不准确,会导致fx、fy比例异常,进而影响三维重建精度。建议优先从相机Datasheet获取精确像元尺寸。

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像素,可尝试更换畸变模型或增加标定图像数量。

实战场景:某3C产线使用4mm广角镜头检测手机中框尺寸,视野约200mm×150mm。标定时发现边缘点重投影误差达0.35像素,导致边缘直线度测量偏差±0.05mm。改用Division模型并增加至20幅标定图像后,误差降至0.08像素,测量重复性提升至±0.01mm。

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标定步骤):

  1. 准备标定板(如HALCON标准标定板,7×7圆点或棋盘格),测量其单个方格/圆点间距。
  2. 采集15-25幅不同位姿的标定板图像,覆盖视场各区域,倾斜角度控制在±30°以内。
  3. 使用find_calib_object提取标定板特征点。
  4. 调用calibrate_cameras进行标定,输出内参、畸变系数及每幅图像的外参。
  5. 检查重投影误差,若大于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。计算流程:

  1. 利用内参反算归一化坐标:x'=(320-cx)/fx=0.05,y'=(240-cy)/fy=-0.03。
  2. 畸变修正后得到(x_corr, y_corr)。
  3. 相机坐标:Xc=x_corr*Zc=25mm,Yc=y_corr*Zc=-15mm,Zc=500mm。
  4. 通过外参(相机到机器人工具)和机器人正运动学,转换到机器人基座坐标。
风险提示:当Zc估计不准确时(如使用单目视觉),像素坐标对应的空间点是一条射线而非唯一确定点。实际项目中必须明确测量平面(Zc=常数)或使用双目/结构光获取深度。HALCON中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文件),并在项目文档中记录标定时的温度、焦距设置等环境参数,以便后续复现或排查问题。

工程建议:在HALCON中,标定完成后可使用get_calib_data查看每幅图像的外参,检查标定板位姿是否覆盖视场四角与中心。若某区域无标定板覆盖,该区域的重投影误差可能较大,测量时应避开或补充标定。