1. 课程导论

1.1 相机标定——给机器一双“懂数学”的眼睛

大家好,我是你们这门课的主讲。在工业视觉领域摸爬滚打了十几年,我见过太多“眼睛挺好使,脑子不好使”的相机系统。

什么叫“脑子不好使”?就是你拍出来的图像,像素坐标和真实世界的物理坐标对不上号。说白了,相机标定就是干这个的——建立从三维世界到二维图像的一一映射关系。

我个人习惯把标定理解为三个步骤:

  • 第一步:确定相机内部参数——焦距、主点、畸变系数。这些是相机出厂就有的“基因”,但每台都不一样。
  • 第二步:确定相机外部参数——旋转矩阵和平移向量。相机装在机械臂上还是固定在三脚架上?位置变了,参数就得重新算。
  • 第三步:求解映射矩阵——把前两步合起来,得到一个3×4的投影矩阵。有了它,图像上的每个像素都能找到它在世界坐标系里的“老家”。

核心公式(针孔模型):

s * [u, v, 1]^T = K * [R | t] * [X, Y, Z, 1]^T

其中:
(u, v) —— 图像像素坐标
(X, Y, Z) —— 世界坐标
K —— 内参矩阵(3×3)
[R | t] —— 外参矩阵(3×4)
s —— 尺度因子

嗯,这里要注意:这个公式是理想针孔模型。实际镜头有畸变,所以后面还要加畸变校正这一步。

1.2 为什么非做畸变校正不可?

你想想看,工业镜头为了大视场、小体积,普遍用了广角设计。广角镜头天生就有畸变——直线拍出来是弯的。

我记得有一次在3C电子厂做项目,客户用500万像素相机检测手机中框的直线度。结果怎么测都不合格,后来一查,是镜头畸变把直线拍成了弧线。校正之后,良率直接从82%跳到了97%。

畸变主要分两类:

畸变类型 表现 产生原因 校正难度
径向畸变 画面边缘向内凹(桶形)或向外凸(枕形) 镜头曲面折射不均匀 中等(3阶多项式即可)
切向畸变 画面像被“拧”了一下 镜头与传感器不平行(装配误差) 较高(需同时标定6个系数)

避坑指南:我曾经在一个项目中只做了径向畸变校正,忽略了切向畸变。结果在视场边缘的测量误差仍然有0.3mm。后来加上切向校正,误差降到0.05mm以内。所以,工业级应用必须同时校正两种畸变。

1.3 工业场景中的典型应用

畸变校正不是学术游戏,它直接决定工业视觉系统的成败。我挑三个最常见的场景说说:

场景一:高精度测量

比如PCB板上的焊盘位置检测。一个焊盘直径0.3mm,如果畸变不校正,边缘误差可能达到0.1mm——直接导致误判。校正后,重复精度能稳定在0.02mm以内。

场景二:机器人引导

机械臂抓取工件时,相机告诉它“目标在像素坐标(500, 300)”。如果不做畸变校正,这个坐标映射到世界坐标时会有偏差。我见过一个案例,偏差导致机械臂抓空,直接撞坏了夹具。

场景三:3D重建与视觉定位

双目立体视觉、结构光扫描——这些技术都依赖精确的相机模型。畸变不校,重建出来的三维点云就像哈哈镜里的脸,完全没法用。

我的经验:在部署任何视觉系统之前,先问自己三个问题:

  1. 测量精度要求是多少?如果大于0.5mm,可能不需要标定;如果小于0.1mm,必须标定。
  2. 镜头视场角多大?超过60°,畸变校正就是必选项。
  3. 相机安装位置会变吗?会变的话,每次安装后都要重新标定外参。

1.4 本章知识体系总览

下面这张图,是我自己画的知识结构。你把它存下来,后面每学一章都可以回来对照着看。

相机标定与畸变校正知识体系 相机标定 内参标定 外参标定 畸变校正 焦距 f_x, f_y 主点 c_x, c_y 旋转矩阵 R (3×3) 平移向量 t (3×1) 径向畸变 k1,k2,k3 切向畸变 p1,p2 高精度测量 机器人引导 3D重建/定位 说明:本课程将依次覆盖内参标定 → 外参标定 → 畸变校正 → 工业应用全流程 每章均配有代码实现与真实项目案例

1.5 你需要准备什么?

这门课不是纯理论。我会带着你一步步写代码、跑实验。你需要准备:

  • 硬件:一台工业相机(USB或GigE接口都行),一张棋盘格标定板(A4纸打印的也能用,但精度差一些)
  • 软件:Python 3.8+,OpenCV 4.5+,NumPy,Matplotlib
  • 心态:别怕数学。我会把矩阵运算拆成你能理解的样子。你只要会加减乘除,就能跟上。

一个小建议:如果你手头没有工业相机,用手机摄像头也行。但要注意——手机镜头畸变很大,正好拿来练手。我最早学标定的时候,就是用一部iPhone 6拍的标定板照片。效果出乎意料地好。

好了,第一章就到这里。记住一句话:没有标定的相机,就像没有刻度的尺子。后面我们会一步步把这把尺子做出来。