张正友相机标定方法

计算机视觉与精密测量的基石技术
视觉测量领域科普

什么是相机标定?

相机标定是计算机视觉中的基础技术,就像给相机"配眼镜"一样,让我们能够准确理解相机看到的世界。

简单理解:想象你戴着一副有度数的眼镜看世界,所有的物体都会发生扭曲。相机标定就是要找到这个"扭曲规律",让我们能够从扭曲的图像中恢复出真实的世界。

相机标定需要确定两类参数:

内参数(相机内部特性)

焦距:相机镜头的焦距长度

主点:光轴与图像平面的交点

畸变系数:镜头造成的图像扭曲程度

外参数(相机与世界的关系)

旋转矩阵:相机相对于世界坐标系的旋转

平移向量:相机在世界坐标系中的位置

张正友标定法的革命性贡献

1998年,张正友博士在微软研究院提出了一种基于平面棋盘格的相机标定方法,彻底改变了计算机视觉领域。

历史背景:在张正友标定法之前,相机标定需要昂贵的3D标定物或者复杂的设备。张正友的方法只需要一张简单的棋盘格纸就能完成高精度标定!

🎯 简单易用

只需要一张打印的棋盘格标定板

💰 成本低廉

无需昂贵的3D标定设备

🎯 精度高

标定精度可达亚像素级别

🔄 灵活性强

可以任意移动标定板进行标定

核心数学原理

张正友标定法的核心思想是利用平面棋盘格在不同位置和角度下的图像来建立约束方程。

基本投影方程:
s · [u, v, 1]ᵀ = K · [R | t] · [X, Y, Z, 1]ᵀ

其中:

K:相机内参矩阵

[R | t]:外参矩阵(旋转和平移)

[u, v]:图像坐标

[X, Y, Z]:世界坐标

关键洞察:对于平面标定板,Z=0,这大大简化了计算!通过观察同一个平面在不同位置的投影,可以求解出所有的标定参数。

内参矩阵初始化方法

张正友标定法通过多种策略来初始化相机内参矩阵,为后续优化提供良好的初值。

1. 线性方法(不考虑畸变)

DLT + SVD方法:将相机标定问题转化为线性最小二乘问题,通过奇异值分解(SVD)求解初始参数。
单应矩阵约束:
H = K · [r₁ r₂ t]
其中 [r₁ r₂] 为旋转矩阵的前两列

计算单应矩阵

对每张标定图像,通过2D-3D点对应关系计算单应矩阵H,然后通过多组单应矩阵求解内参矩阵K。

简单假设初始化

基于图像几何的简单假设:主点位于图像中心 (cx=w/2, cy=h/2),焦距相等 (fx=fy=w)。

几何信息利用

利用标定板的已知几何信息和相机的物理参数:fx=f/dx, fy=f/dy(其中f为物理焦距,dx/dy为像素尺寸)。

2. 建立2D-3D对应关系

🎯 单应矩阵

建立平面到图像的投影变换

要求特征点在同一平面上

📐 基础矩阵

描述两幅图像间的几何关系

用于立体视觉系统

优化策略:
先计算单应矩阵,然后通过多组单应矩阵求解K
线性优化初值 → 非线性优化精化

畸变校正与优化算法

初始线性解只是起点,考虑镜头畸变后需要采用非线性优化方法获得高精度标定结果。

非线性最小二乘优化

🔄 Levenberg-Marquardt算法

最常用的非线性优化方法,结合了高斯-牛顿法和梯度下降法的优点

🧬 遗传算法

全局优化算法,适用于复杂的多参数优化问题

🔥 模拟退火算法

概率型全局优化算法,能够避免局部最优解

重投影误差最小化

目标函数:
min Σᵢⱼ ||mᵢⱼ - m̂(K, Rᵢ, tᵢ, Mⱼ)||²
其中 mᵢⱼ 为观测点,m̂ 为重投影点
影响精度的主要因素:
  • 角点检测的亚像素精度
  • 标定板制作精度(误差应在1mm以内)
  • 拍摄角度的多样性分布
  • 图像质量和光照条件

标定精度分析

不同相机分辨率下的标定精度表现,为实际应用提供参考数据。

圆心误差说明:
重投影误差评估了从三维空间点到二维图像点的投影与实际观测到的二维图像点之间的差异,度量方式是L2距离的均值

精度标准与期望值

📷 130万像素相机

圆心误差:0.06像素

标准差:0.04像素

适用场景:一般工业应用

📷 2000万像素相机

圆心误差:0.4像素

标准差:0.3像素

适用场景:高精度测量

圆心亚像素提取技术

亚像素定位算法:
• Harris角点检测 + 二次曲面拟合
• 梯度法亚像素定位
• 模板匹配细化

📊 拍摄角度对精度的影响

标定板的姿态分布直接影响参数估计的稳定性:

🎯 理想角度

15°-45° 倾斜角度

覆盖图像各个区域

⚠️ 避免角度

正对相机 (0°)

过大倾斜 (>60°)

📸 图像采集策略

🎯 推荐角度

15°-35°

适中的倾斜角度确保参数估计稳定

📐 推荐姿势

正、前倾、后倾
左倾、右提、右倾、左提

📏 推荐距离

近视场、对焦距离
远视场

💡 采集策略要点:
  • 多角度覆盖确保约束充分
  • 不同距离保证景深变化
  • 标定板充满图像2/3区域
  • 至少15张图像,推荐20-30张

OpenCV实现详解

张正友标定法在OpenCV中的具体实现和关键函数调用。

核心函数库

cv::calibrateCamera

功能:计算相机内参数矩阵、畸变系数和外参数

输入:世界坐标点、图像坐标点、图像尺寸

输出:内参矩阵K、畸变系数、旋转和平移向量

说明:得到的旋转和平移向量表示世界坐标系到相机坐标系的转换

cv::projectPoints

功能:根据标定结果计算重投影点坐标

应用:验证标定精度,计算重投影误差

cv::stereoCalibrate

功能:计算双目相机系统的外参数

输出:两相机间的旋转矩阵R和平移向量t

实现流程:
  1. 使用 cv::findChessboardCorners 检测角点
  2. 用 cv::cornerSubPix 进行亚像素精化
  3. 调用 cv::calibrateCamera 完成标定
  4. 通过 cv::projectPoints 验证精度
世界坐标系的坐标值是唯一的:
相机的外参描述了从世界坐标系到相机坐标系的刚性转换
标定过程中确定的是相机相对于标定板的姿态

标定步骤详解

准备标定板

制作或打印一个黑白相间的棋盘格标定板,确保方格大小已知且精确。

采集图像

用待标定的相机拍摄标定板在不同位置、不同角度的图像,通常需要10-20张图像。

角点检测

使用Harris角点检测或其他算法精确提取每张图像中棋盘格的角点坐标。

建立约束方程

根据世界坐标与图像坐标的对应关系,建立线性方程组。

求解内参数

通过最小二乘法或其他优化方法求解相机内参矩阵。

计算外参数

对于每张图像,计算相机相对于标定板的位姿参数。

畸变校正

估算径向畸变和切向畸变参数,完成完整的相机模型。

精度验证

使用重投影误差等指标验证标定结果的准确性。

实际应用示例

🔬 智能标定模拟器

体验完整的张正友标定流程,实时查看标定过程和结果:

📋 标定结果示例

内参矩阵 K:
[800.5 0.0 320.0]
[0.0 800.2 240.0]
[0.0 0.0 1.0 ]

📏 重投影误差:0.23 像素

🔄 畸变系数:k1=-0.12, k2=0.08

📸 使用图像:15 张

📐 可视化标定板

点击下方的标定板查看标定原理:

💡 提示:标定板的方格大小必须精确已知,通常为20-30mm

应用领域

机器人视觉:机器人需要准确抓取物体

自动驾驶:车载摄像头需要精确测距

工业检测:产品尺寸的非接触测量

医学影像:内窥镜等医疗设备的标定

增强现实:虚拟物体的精确叠加

三维重建:从多个视角重建物体的3D模型

技术要点与注意事项

标定板制作规格

📏 尺寸精度

方格大小:20-30mm

误差要求:≤ 1mm

平整度:≤ 0.1mm

🎨 视觉质量

对比度:黑白清晰分明

打印精度:600dpi以上

材质:硬质板材

图像采集策略

拍摄角度控制

推荐角度:15°-45° 倾斜范围

避免角度:正对相机(0°)或过大倾斜(>60°)

覆盖要求:图像各个区域都要有标定板出现

图像质量要求

充满程度:标定板占据图像2/3区域

图像数量:至少3张,推荐10-20张

光照条件:均匀无阴影,避免过曝和欠曝

精度影响因素分析

关键影响因素优先级:
  1. 角点检测精度:亚像素级定位算法的选择
  2. 标定板规格:制作精度直接影响标定误差(±1mm内)
  3. 拍摄角度分布:多角度确保参数估计稳定性
  4. 圆心提取精度:影响重投影误差计算

精度期望值参考

不同分辨率下的典型精度:
• 130万像素:圆心误差 0.06px,标准差 0.04px
• 2000万像素:圆心误差 0.4px,标准差 0.3px
• 5000万像素:圆心误差 0.2px,标准差 0.15px

🎯 标定质量评判准则

✅ 优秀标定

重投影误差 < 0.3px

可用于高精度测量

⚠️ 需要优化

重投影误差 > 0.7px

建议重新采集数据

专业建议:标定是一个迭代优化的过程。通过 DLT+SVD 获得线性初值后,使用 Levenberg-Marquardt 算法进行非线性优化。实际应用中建议定期重新标定以保持最佳性能,特别是在环境温度变化较大的场合。
🏠 回到首页