一、课程导论:什么是相机标定?为什么需要畸变校正?工业场景中的典型应用
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重建与视觉定位
双目立体视觉、结构光扫描——这些技术都依赖精确的相机模型。畸变不校,重建出来的三维点云就像哈哈镜里的脸,完全没法用。
我的经验:在部署任何视觉系统之前,先问自己三个问题:
- 测量精度要求是多少?如果大于0.5mm,可能不需要标定;如果小于0.1mm,必须标定。
- 镜头视场角多大?超过60°,畸变校正就是必选项。
- 相机安装位置会变吗?会变的话,每次安装后都要重新标定外参。
1.4 本章知识体系总览
下面这张图,是我自己画的知识结构。你把它存下来,后面每学一章都可以回来对照着看。
1.5 你需要准备什么?
这门课不是纯理论。我会带着你一步步写代码、跑实验。你需要准备:
- 硬件:一台工业相机(USB或GigE接口都行),一张棋盘格标定板(A4纸打印的也能用,但精度差一些)
- 软件:Python 3.8+,OpenCV 4.5+,NumPy,Matplotlib
- 心态:别怕数学。我会把矩阵运算拆成你能理解的样子。你只要会加减乘除,就能跟上。
一个小建议:如果你手头没有工业相机,用手机摄像头也行。但要注意——手机镜头畸变很大,正好拿来练手。我最早学标定的时候,就是用一部iPhone 6拍的标定板照片。效果出乎意料地好。
好了,第一章就到这里。记住一句话:没有标定的相机,就像没有刻度的尺子。后面我们会一步步把这把尺子做出来。