4. 相机成像模型

相机成像模型 学习卡片

在Halcon视觉检测系统的项目落地中,相机成像模型是所有标定、测量与定位算法的理论基础。无论是进行单相机二维测量、双目立体视觉,还是手眼机器人引导,最终都要回归到“三维世界点如何映射到二维像素点”这一核心问题上。本章将系统拆解相机成像的四个关键层次:针孔模型、透镜畸变、内参与外参,以及四大坐标系的转换链路。理解这些内容,是后续进行标定板设计、算子选型与精度验证的前提。

4.1 针孔模型:理想化的线性投影

针孔模型(Pinhole Model)是相机成像的最基本抽象。它假设光线沿直线传播,所有场景中的光线通过一个无限小的“针孔”后,在成像平面上形成倒立的实像。在实际工程中,我们通常将成像平面虚拟到针孔前方,以得到正立的图像,便于数学表达。

针孔模型的数学表达式为:

设世界坐标系中一点 P = (X, Y, Z),其在相机坐标系下的坐标为 (Xc, Yc, Zc)。
焦距为 f,主点(光轴与成像平面交点)坐标为 (cx, cy)。

理想投影关系(归一化平面):
x' = Xc / Zc
y' = Yc / Zc

像素坐标:
u = f_x * x' + cx
v = f_y * y' + cy

其中 f_x = f / dx,f_y = f / dy,dx、dy 为单个像素的物理尺寸。

这里需要特别强调的是,针孔模型是线性模型,它假设镜头无畸变、光线严格共线。但在实际工业镜头中,由于镜片加工误差、装配误差以及镜头与传感器不平行等因素,成像会偏离理想位置,因此必须引入畸变模型进行修正。

4.2 透镜畸变模型:径向畸变与切向畸变

透镜畸变是实际成像与针孔模型之间的偏差。Halcon中常用的畸变模型主要包含两类:径向畸变和切向畸变。

  • 径向畸变:由镜片曲率引起,光线越靠近边缘弯曲越严重。表现为图像边缘的直线向内凹(桶形畸变)或向外凸(枕形畸变)。数学模型用 k1、k2、k3 三个系数描述。
  • 切向畸变:由镜头与成像平面不平行引起,表现为图像中的直线在边缘处发生倾斜。用 p1、p2 两个系数描述。

畸变修正公式(以归一化坐标 x'、y' 为输入):

r² = x'² + y'²

径向修正:
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² + 2*x'²)
y_tangential = p1*(r² + 2*y'²) + 2*p2*x'*y'

最终归一化坐标:
x_corrected = x_radial + x_tangential
y_corrected = y_radial + y_tangential

在Halcon中,畸变系数通过 calibrate_cameras 算子自动求解。对于高精度测量项目,建议使用 calibrate_cameras 的“division model”或“polynomial model”,并根据镜头视场角选择合适的畸变阶数。对于普通工业镜头,k1、k2 通常足够;对于广角镜头或鱼眼镜头,才需要引入 k3。

工程提示:在Halcon中,畸变模型的选择直接影响标定精度。对于标准工业镜头(焦距8mm-50mm),推荐使用多项式模型(polynomial model)并设置3个径向畸变系数(k1, k2, k3)。若镜头视场角小于60度,可只启用k1、k2以降低过拟合风险。

4.3 内参与外参:相机自身的“基因”与在空间中的“姿态”

相机参数分为内参(Intrinsic Parameters)和外参(Extrinsic Parameters),两者在标定与测量中扮演不同角色。

参数类型 包含内容 物理意义 Halcon中的表示
内参 焦距 f_x、f_y,主点 c_x、c_y,畸变系数 k1、k2、k3、p1、p2 描述相机光学系统与传感器之间的固定关系,与相机位置无关 相机内参元组:[f, k1, k2, p1, p2, cx, cy, width, height] 或扩展模型
外参 旋转矩阵 R(3x3)和平移向量 T(3x1) 描述相机坐标系相对于世界坐标系的位姿(旋转+平移) 位姿类型 pose,包含7个元素:3个平移量 + 4个四元数(或欧拉角)

内参是相机出厂后相对固定的属性,但会受温度、振动、镜头松动等因素影响,因此在项目验收前必须进行现场标定。外参则随相机安装位置变化而变化,在机器人引导或双目系统中,外参标定是系统集成的关键步骤。

4.4 四大坐标系转换:从世界到像素的完整链路

视觉测量中涉及四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。理解它们之间的转换关系,是进行手眼标定、三维重建和测量规划的基础。

转换链路如下:

  1. 世界坐标系 → 相机坐标系(刚体变换,由外参决定)
  2. 相机坐标系 → 图像坐标系(透视投影,由内参中的焦距决定)
  3. 图像坐标系 → 像素坐标系(离散化,由主点与像素尺寸决定)

完整转换公式(齐次坐标形式):

设世界坐标点 P_w = [X, Y, Z, 1]^T

步骤1:外参变换
P_c = [R | T] * P_w

步骤2:归一化投影
x' = Xc / Zc
y' = Yc / Zc

步骤3:畸变修正(见4.2节)

步骤4:像素坐标
u = f_x * x_corrected + c_x
v = f_y * y_corrected + c_y

在Halcon中,这一系列变换被封装为 project_3d_point 算子。实际使用时,我们通常通过 image_points_to_world_plane 或 world_plane_to_image_points 进行双向转换,而无需手动编写矩阵运算。

4.5 案例场景:基于标定板的Halcon相机标定流程

以下是一个典型的Halcon标定流程,用于获取相机内参和外参,并验证标定精度。

* 1. 创建标定板描述文件
create_calib_data ('calibration', 'camera', 1, 1, CalibDataID)
set_calib_data_cam_param (CalibDataID, 0, 'area_scan_division', [0.008, 0, 0, 0, 0, 0, 0, 0])
set_calib_data_calib_object (CalibDataID, 0, 'calplate.cpd')

* 2. 读取标定板图像(建议采集10-15张不同位姿)
read_image (Image, 'calib_image_01.png')
find_calib_object (Image, CalibDataID, 0, 0, 0, [], [])
get_calib_data (CalibDataID, 'camera', 0, 'init_params', InitParams)

* 3. 执行标定
calibrate_cameras (CalibDataID, Errors)

* 4. 获取标定结果
get_calib_data (CalibDataID, 'camera', 0, 'params', CameraParam)
get_calib_data (CalibDataID, 'calib_obj_pose', [0, 0], 'pose', PoseOfCalibPlate)

* 5. 精度验证:反投影误差
get_calib_data (CalibDataID, 'camera', 0, 'errors', Errors)
* 平均误差应小于0.1像素
标定精度验收标准:
  • 平均反投影误差(Mean Error)< 0.1 像素(高精度测量)
  • 最大反投影误差(Max Error)< 0.3 像素
  • 标定板图像数量 ≥ 10 张,且覆盖视场中心与边缘
  • 标定板倾斜角度范围:15° ~ 45°

4.6 常见误区与复盘

在项目实践中,工程师在相机建模与标定环节常犯以下错误,需要重点规避:

误区一:忽略畸变模型的选择。 使用Halcon默认的标定算子时,若镜头畸变较大(如广角镜头),仍使用仅含k1、k2的模型,会导致边缘测量误差超过0.5mm。复盘建议:根据镜头焦距和视场角,在 set_calib_data_cam_param 中显式指定畸变模型类型与阶数。
误区二:标定板位姿过于单一。 若所有标定图像中,标定板均平行于相机成像平面,则无法准确求解焦距与主点,导致外参解算不稳定。复盘建议:确保标定板在视场中呈现不同倾斜角度、不同位置、不同旋转方向,且覆盖整个视场区域。
误区三:混淆图像坐标系与像素坐标系。 图像坐标系以物理尺寸(mm)为单位,原点在光轴与成像平面交点;像素坐标系以像素为单位,原点在图像左上角。在编写自定义转换代码时,若忘记加上主点偏移(cx, cy),会导致所有测量结果产生系统性偏移。
误区四:外参标定后未进行验证。 在机器人手眼标定中,仅计算出手眼矩阵而不进行实际抓取测试,往往在运行阶段才发现误差。复盘建议:标定完成后,使用标准量块或已知尺寸的工件进行重复测量,验证不同位姿下的测量一致性。

4.7 本章小结

相机成像模型是视觉检测系统的数学基石。针孔模型提供了线性投影的基准,透镜畸变模型修正了实际镜头的非线性偏差,内参描述了相机自身的固有属性,外参则定义了相机在空间中的位姿。四大坐标系的转换链路将三维世界点与二维像素点紧密关联,是标定、测量、定位等一切视觉算法的核心。在Halcon项目中,正确选择畸变模型、规范执行标定流程、严格验证标定精度,是确保系统稳定可靠的关键。下一阶段的学习中,我们将基于本章的成像模型,深入探讨标定板的设计原理与Halcon标定算子的参数细节。