1. 视觉标定基础

做机器视觉这么多年,我始终觉得标定是门槛。很多人一上来就调算法、跑模型,结果精度死活上不去——回头一看,标定就没做扎实。今天咱们先把地基打牢。

1.1 相机成像模型:小孔成像的数学化

相机成像,说白了就是小孔成像的升级版。光线从物体表面反射,穿过镜头中心(光心),投射到传感器上。这个过程在数学上可以用一个模型来描述。

我个人习惯把成像模型拆成两步:

  1. 刚体变换:物体从世界坐标系转到相机坐标系
  2. 透视投影:从三维空间投影到二维像平面

你想想看,一个三维点 (X, Y, Z) 怎么变成像素 (u, v) 的?中间经历了三次坐标变换。我刚开始做项目时,总觉得这些坐标系绕来绕去很烦,后来发现只要理清每一步的矩阵运算,其实很直观。

核心公式(齐次坐标形式):

Z_c * [u, v, 1]^T = K * [R | t] * [X_w, Y_w, Z_w, 1]^T

其中:
K —— 内参矩阵(焦距、主点、畸变)
[R | t] —— 外参矩阵(旋转 + 平移)
Z_c —— 物体在相机坐标系下的深度

1.2 四大坐标系:从世界到像素

这四个坐标系,是标定绕不开的基本功。我见过不少工程师把相机坐标系和图像坐标系搞混,结果标定出来的参数全是错的。

坐标系 符号 维度 单位 说明
世界坐标系 Ow-XwYwZw 3D mm / m 用户自定义,描述物体在真实空间的位置
相机坐标系 Oc-XcYcZc 3D mm / m 光心为原点,Zc 沿光轴方向
图像坐标系 O-xy 2D mm 物理单位,描述投影点在像平面的位置
像素坐标系 O0-uv 2D pixel 离散整数坐标,左上角为原点

嗯,这里要注意:图像坐标系和像素坐标系不是一回事。图像坐标系是连续的物理坐标(毫米),像素坐标系是离散的整数坐标(像素)。两者之间差一个缩放因子和偏移量。

我的经验: 在写标定代码时,先把四个坐标系的转换关系画在纸上。我曾经在一个项目中,因为混淆了图像坐标系和像素坐标系,导致手眼标定结果偏差了 2 个毫米。排查了整整一天才发现问题。

1.3 内参:相机的“出厂参数”

内参矩阵 K 描述了相机内部的几何特性。它包含以下参数:

K = [fx,  0,  cx;
      0,  fy,  cy;
      0,   0,   1]
  • fx, fy:焦距在 x、y 方向的像素当量(单位:pixel)
  • cx, cy:主点坐标,即光轴与像平面的交点(单位:pixel)

为什么 fx 和 fy 可能不一样?因为传感器像素不一定是正方形。我在用工业相机时遇到过不少非正方形像素的传感器,这时候 fx ≠ fy 是正常的。

内参还包括畸变系数:

  • 径向畸变:k1, k2, k3(桶形/枕形畸变)
  • 切向畸变:p1, p2(镜头与传感器不平行)

避坑指南: 我曾经在一个项目中,用了默认的畸变模型(只标定 k1, k2),结果图像边缘的误差始终降不下去。后来换成三参数径向畸变模型(k1, k2, k3),精度才达标。如果你的镜头视场角较大,建议至少标定 k1, k2, k3 三个径向畸变参数。

1.4 外参:相机在空间中的“姿态”

外参描述的是相机坐标系相对于世界坐标系的位姿。它由两部分组成:

  • 旋转矩阵 R:3×3 正交矩阵,描述三个轴的旋转
  • 平移向量 t:3×1 向量,描述光心在世界坐标系中的位置

外参的物理意义很直观:你把相机放在哪里、朝哪个方向拍。同一个物体,换个角度拍,外参就变了。但内参不变——除非你动了镜头焦距或光圈。

我习惯用欧拉角或四元数来表示旋转,但在标定算法中,旋转矩阵更常用。为什么?因为矩阵运算方便,而且没有万向锁问题。

1.5 知识体系总览

下面这张图,是我做标定培训时必画的框架。它把本章的核心知识点串在了一起。

视觉标定基础 · 知识体系 相机成像模型 四大坐标系 世界 → 相机 → 图像 → 像素 刚体变换 + 透视投影 内参矩阵 K fx, fy, cx, cy 畸变系数:k1,k2,k3,p1,p2 外参 [R | t] 旋转矩阵 R(3×3) 平移向量 t(3×1) 标定的本质:通过已知 3D-2D 点对,求解内参 K 和外参 [R | t] 畸变校正属于内参标定的子任务,不可跳过

1.6 标定的本质:一句话总结

标定到底在干什么?说白了就是:已知一组 3D 点(世界坐标)和对应的 2D 点(像素坐标),求解相机内参和外参。

你拿一个棋盘格标定板,拍几张不同角度的照片。棋盘格的角点在世界坐标系下的坐标是已知的(比如每个格子 30mm),在图像中的像素坐标可以通过角点检测算法得到。有了这些对应关系,就能解出 K 和 [R | t]。

标定流程(简化版):

  1. 拍摄标定板图像(至少 10-15 张,角度要丰富)
  2. 提取角点亚像素坐标
  3. 建立 3D-2D 对应关系
  4. 用最小二乘法求解内参和外参
  5. 优化畸变系数
  6. 验证重投影误差(通常 < 0.1 pixel 算合格)

我的建议: 标定板不要用反光材质,最好用磨砂亚光板。我曾经用玻璃基板的标定板,结果反光导致角点检测总是飘,重投影误差死活降不到 0.1 以下。换成陶瓷基板后,一次就过了。

好了,这一章的基础概念就讲到这里。记住这四个坐标系、内参和外参的含义,后面讲张正友标定法和手眼标定时,你会回来感谢我的。