一、标定基础:什么是相机标定?为什么需要标定?

各位同学,咱们今天聊点实在的。

你手里拿个摄像头,对着世界一拍,图像就出来了。但你想过没有——这张图像里的像素坐标,跟现实世界中的三维位置,到底是怎么对应的?

说白了,相机就是个把三维空间压缩成二维平面的设备。这个压缩过程,是有数学模型的。而相机标定,就是把这个模型的参数给算出来。

1.1 什么是相机标定?

相机标定,简单讲就是:找到相机内部的光学参数和外部的位置姿态参数。

我习惯把它拆成三块来看:

  • 内参:焦距、主点、畸变系数。这些是相机本身的“基因”。
  • 外参:旋转矩阵、平移向量。这些是相机在世界坐标系里的“站位”。
  • 畸变模型:径向畸变、切向畸变。镜头不是完美的,总有点歪歪扭扭。

你想想看,如果不知道这些参数,你拿图像里的一个像素点,根本没法反推它在真实空间里的位置。这就是标定的意义。

核心公式(针孔模型):

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

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

1.2 为什么需要标定?

这个问题,我在项目里被问过无数次。

有一次,客户拿了个工业相机过来,说“我直接测距离,误差有5毫米,是不是相机坏了?”我一看,根本没标定。镜头畸变都没校正,误差不大才怪。

标定的必要性,我总结为三点:

  1. 消除畸变:镜头边缘的桶形或枕形畸变,不校正的话,测量全是歪的。
  2. 建立度量关系:像素距离 → 实际物理距离。没有标定,你只能比大小,不能算尺寸。
  3. 多传感器融合:如果你有双目、或者相机加激光雷达,标定是它们“对齐”的前提。

我曾经踩过的坑:

有一次做视觉引导抓取,标定板没贴平,结果外参算出来全是错的。机器人抓了三次,三次都抓空。后来发现是标定板翘了个角。嗯,标定板一定要贴平,这个细节别忽略。

1.3 单目视觉系统的典型应用场景

单目视觉,就是只用一个摄像头。别觉得它简单,应用场景其实非常广。

应用领域 典型场景 标定需求
工业测量 零件尺寸检测、缺陷检测 高精度内参 + 畸变校正
机器人视觉 视觉引导抓取、AGV导航 手眼标定 + 外参标定
自动驾驶 车道线检测、障碍物测距 内参 + 外参 + 地面标定
安防监控 目标跟踪、区域入侵检测 畸变校正 + 俯视变换
AR/VR 虚拟物体叠加、空间定位 实时标定 + 动态更新

我个人觉得,单目最大的优势就是便宜、简单、部署快。但代价是——它丢失了深度信息。所以标定精度直接决定了你能从二维图像里“挖”出多少三维信息。

1.4 标定的知识体系

这一章的内容,我习惯用一张图来串起来。你看下面这个结构:

相机标定知识体系 相机标定知识体系 相机标定 内参标定 外参标定 畸变校正 焦距 fx, fy 主点 cx, cy 像素尺寸 旋转矩阵 R 平移向量 t 径向畸变 k1,k2,k3 切向畸变 p1,p2 标定的最终目标 建立像素坐标 ↔ 世界坐标的精确映射关系

我的建议:

刚开始学标定,别急着上复杂算法。先把针孔模型吃透,搞清楚内参外参到底在干什么。我见过太多人,OpenCV调个 calibrateCamera 就以为完事了,结果换了个镜头全废。模型理解到位了,工具只是顺手的事。

1.5 标定的输入与输出

标定不是凭空算的。你需要输入一些东西,才能得到输出。

输入 说明 典型值/要求
标定板图像 棋盘格、圆点阵、ChArUco等 至少10-20张,角度多样
标定板物理尺寸 格子边长、圆点间距 精度0.01mm以上
图像特征点坐标 角点、圆心等 亚像素精度提取
输出 说明 用途
内参矩阵 K 3×3矩阵 像素 ↔ 归一化坐标
畸变系数 5个参数 (k1,k2,p1,p2,k3) 图像去畸变
外参 [R|t] 每张图像一组 世界 ↔ 相机坐标变换
重投影误差 标定质量的评价指标 通常 < 0.5像素算合格

嗯,这里要注意:重投影误差不是越小越好。我见过有人硬把误差压到0.01像素,结果过拟合了,换张图就崩。一般0.1~0.3像素就很好了。

1.6 本章小结

这一章咱们把标定的概念、必要性、应用场景和知识体系捋了一遍。说白了,标定就是给相机“配眼镜”——让它看清这个世界,并且知道自己在哪。

后面的章节,我会带你一步步走完整个标定流程。从选标定板、拍图像、提取角点,到算参数、评估质量,每一步我都会把项目里踩过的坑、总结的经验讲给你听。

准备好了吗?咱们开始动手。