第一章 标定基础:相机标定的定义、为什么需要标定、标定的核心目标

大家好,我是你们这门课的老朋友。做了这么多年机器视觉,我敢说,标定是门槛,也是分水岭。很多人觉得标定就是拍几张棋盘格照片,跑个算子就完事了。嗯,我以前也这么想,直到在一条产线上被一个0.1毫米的偏差折磨了整整三天……从那以后,我再也不敢小看这一步了。

说白了,相机标定就是给相机“配眼镜”。你想想看,相机镜头天生就有畸变,安装位置也不可能理想。如果不做标定,你测出来的尺寸、定位的位置,全是“近视眼”看出来的,能准吗?

一句话总结:相机标定 = 建立从“像素坐标”到“真实世界坐标”的数学映射关系,同时修正镜头畸变。

1.1 为什么非要标定?

我遇到过不少刚入行的朋友,上来就问:“我相机分辨率这么高,直接算像素不行吗?”

当然不行。原因有三:

  • 镜头不是完美的:广角镜头有桶形畸变,长焦镜头有枕形畸变。你拍出来的直线,在图像边缘可能是弯的。
  • 相机装不“正”:安装时相机平面和被测物平面很难平行。一个5度的倾斜,在视野边缘就能带来几个像素的误差。
  • 像素不是毫米:一个像素到底对应多少毫米?这个比例在视野中心和边缘是不一样的,必须通过标定算出来。

我的经验:在3C电子行业的精密装配项目中,如果不做标定,0.5mm的定位精度都很难保证。做了标定之后,0.05mm都是常规操作。差距就是这么大。

1.2 标定的核心目标:三个“参数”

标定到底在算什么?其实就三样东西:内参、外参、畸变系数。我习惯把它们比作相机的“身份证”、“户口本”和“病历本”。

参数类型 包含内容 通俗理解 影响什么
内参 焦距(fx, fy)、主点(cx, cy) 相机的“身份证”——焦距多长、感光芯片中心在哪 像素坐标与物理坐标的比例关系
外参 旋转矩阵(R)、平移向量(T) 相机的“户口本”——它相对于世界坐标系在哪、朝哪看 相机坐标系与世界坐标系的转换
畸变系数 径向畸变(k1,k2,k3)、切向畸变(p1,p2) 相机的“病历本”——镜头有什么“毛病” 图像几何失真修正

1.3 内参:相机的“身份证”

内参是相机本身的固有属性。同一个相机,只要不换镜头、不调焦距,内参就是固定的。

Halcon里最常用的内参矩阵长这样:

// Halcon 内参格式(以标定文件形式存储)
// 顺序:焦距fx, 焦距fy, 主点cx, 主点cy, 图像宽, 图像高
// 例如一个500万像素相机:
// 0.008mm 像素尺寸,12mm镜头
// fx = 12 / 0.008 = 1500 像素
// fy = 12 / 0.008 = 1500 像素
// cx = 2592 / 2 = 1296 像素
// cy = 1944 / 2 = 972 像素

// 实际Halcon标定后得到的相机参数
CameraParam := [0.008, 0, 0.000008, 0.000008, 1296, 972, 2592, 1944]
// 注意:Halcon的标定参数格式比较特殊,后面章节会详细讲

曾经踩过的坑:有一次我换了个镜头,忘了重新标定,直接用旧的内参。结果测量结果偏了0.3mm。记住:动了镜头,必须重新标定!

1.4 外参:相机的“户口本”

外参描述的是相机在世界坐标系中的位置和姿态。说白了,就是相机“站在哪”、“朝哪看”。

外参包含两部分:

  • 旋转矩阵 R:3x3矩阵,描述相机坐标系相对于世界坐标系的旋转
  • 平移向量 T:3x1向量,描述相机坐标系原点在世界坐标系中的位置

在Halcon中,外参通常用位姿(Pose)来表示:

// Halcon 位姿格式
// [X, Y, Z, RX, RY, RZ, 位姿类型]
// 例如:相机在世界坐标系中位于(100, 200, 500)mm处
//       绕X轴旋转180度,绕Y轴旋转0度,绕Z轴旋转0度
Pose := [100, 200, 500, 180, 0, 0, 0]

1.5 畸变系数:相机的“病历本”

畸变是镜头天生的“毛病”。主要有两种:

  • 径向畸变:光线在镜头边缘弯曲得更厉害。广角镜头尤其明显,拍出来的直线会变成弧线。
  • 切向畸变:镜头和感光芯片不平行导致的。虽然不常见,但高精度测量时必须考虑。

Halcon的畸变模型用5个参数描述:

// Halcon 畸变系数
// [k1, k2, k3, p1, p2]
// k1, k2, k3: 径向畸变系数
// p1, p2: 切向畸变系数
// 一般标定后,k1和k2是主要项,k3通常很小
DistortionCoeffs := [-0.15, 0.02, 0.001, 0.0005, 0.0002]

我的习惯:标定完成后,我通常会先看一眼畸变系数。如果k1的值大于0.3,说明镜头畸变很严重,建议换镜头或者用更复杂的标定板。如果k1在0.1以内,说明镜头质量不错。

1.6 标定的知识体系

下面这张图是我自己总结的标定知识框架,帮你理清思路:

相机标定知识体系 相机标定 内参(身份证) 外参(户口本) 畸变系数(病历本) 焦距 fx, fy 主点 cx, cy 旋转矩阵 R + 平移向量 T 径向畸变 k1,k2,k3 切向畸变 p1,p2 为什么需要标定? ① 镜头畸变导致图像变形 (直线变曲线) ② 安装角度偏差 (相机平面不平行) ③ 像素与物理单位转换 (像素不是毫米) 标定结果:像素坐标 → 世界坐标(毫米级精度)

1.7 标定的最终目标

说了这么多,标定的最终目标其实就一个:让图像中的每一个像素,都能精确对应到真实世界中的一个物理位置。

在Halcon中,标定完成后,你可以做两件最重要的事:

  1. 畸变校正:把变形的图像“拉直”,让直线变回直线
  2. 测量与定位:把像素坐标转换成毫米坐标,进行精确测量

记住这个公式:

标定精度决定了测量精度。标定误差1个像素,测量误差可能就是0.1mm甚至更大。所以,标定是机器视觉的基石,马虎不得。