当前棋盘格状态:
位置 T = -
旋转 R = -

相机标定原理 (张正友棋盘格法)

目的:就像给人的眼睛配眼镜一样,我们需要知道相机的“度数”(内参)和它“看东西的角度”(外参),从而建立 3D 真实世界与 2D 照片像素之间的精确映射关系。

两大核心参数:

内参 (Intrinsics):相机出厂自带的属性(相当于眼睛的结构)。包括:焦距 $(f_x, f_y)$,光学中心 $(c_x, c_y)$,以及镜头畸变系数。

外参 (Extrinsics):相机在 3D 空间中的位置和姿态。包括:旋转矩阵 $R$ 和平移向量 $T$。

步骤 0: 核心映射公式

相机的成像过程,本质上就是把一个 3D 坐标点变成照片上的 2D 像素点。数学上通过一个经典的矩阵乘法表示。

👉 点击查看:核心公式与所有参数的详细图文解释

张正友标定法怎么做?
我们用一个已知精确尺寸的棋盘格。由于棋盘格是平面的,我们可以假设棋盘格上的点都在 $Z=0$ 的平面上。我们需要让相机从不同角度拍摄至少 3 张以上的棋盘格照片,提取角点信息来反推相机的参数。

步骤 1: 拍摄姿态 1

拿着棋盘格在相机前摆好第一个姿势,拍下一张照片。注意观察右下角【相机实时画面】中的 2D 投影。系统会自动提取图像中棋盘格黑白相交的角点。

步骤 2: 拍摄姿态 2 (倾斜)

将棋盘格倾斜一个角度,再拍一张。为什么要倾斜?因为如果棋盘格一直平行于相机,我们就无法计算出镜头不同深度的透视畸变和完整的焦距信息。

步骤 3: 拍摄姿态 3 (旋转)

换个方向,再旋转和倾斜一下,拍下第三张。每一张照片,都会提供一组 $H$ 矩阵(单应性矩阵)。

步骤 4: 拍摄姿态 4 (远近变化)

将棋盘格拉远或拉近。获取丰富的数据可以极大地提高标定的精度,降低误差。

步骤 5: 提取参数与优化

标定计算可以简单理解为“解方程”。

第一步:求单应性矩阵 $H$ (Homography)

因为我们将棋盘格固定在 $Z=0$ 的平面上,投影公式被极大地简化,计算机会提取出照片平面和棋盘格平面之间的直接映射关系,这个 $3 \times 3$ 的矩阵被称为单应性矩阵 $H$

👉 硬核数学:K 矩阵与 H 矩阵是如何推导的?点击查看 3D 演示页面

第二步:解出内参 $K$

虽然未知数很多,但我们知道物理世界中的常识:旋转矩阵 $R$ 代表相机的三个轴,因此它的列向量必须互相垂直长度相等(均为 1)

利用这两个几何常识,每张照片的 $H$ 都能帮我们列出 2 个纯粹关于内参 $K$ 的方程。因为 $K$ 里有 5 个未知数,所以我们至少需要 3 张不同角度的照片(提供 6 个方程),就能把内参 $K$ 彻底算出来!

第三步:反推每张图的外参

既然相机的“眼睛结构”(内参 $K$)已经知道了,我们把它代回公式,就可以轻松反向推算出拍每一张照片时,相机相对于棋盘格到底在什么位置,也就是外参 $(R, T)$

第四步:微调误差(考虑畸变)

实际上镜头不是完美的,边缘会有鱼眼变形。计算机会把上面算出来的结果作为初值,采用一种叫 LM 非线性优化算法 的方法,反复微调数值,直到把所有的误差(重投影误差)降到最低,从而得到最精确的最终结果。