基于Tsai两步法的相机标定MATLAB程序实现
项目介绍
本项目在MATLAB环境下实现了经典的Tsai两步标定法(Tsai's Two-Step Method)。该算法由Roger Tsai提出,是计算机视觉领域极具影响力的相机标定算法之一。其核心思想是利用径向一致性约束(Radial Alignment Constraint, RAC)先通过线性变换求解相机的大部分外参(旋转矩阵和平移向量的一部分),随后在第二步中通过辅助线性方程和非线性优化求解焦距、深度平移及径向畸变系数。本项目不仅提供了完整的算法实现,还包含了标定数据的模拟生成、噪声模拟以及标定结果的可视化评估功能。
功能特性
- 自动生成标定数据:程序能够模拟生成具有多层深度信息的3D特征点,并根据预设的真实内参和外参计算对应的2D像素坐标。
- 畸变模型模拟:支持径向畸变模型(k1系数),能够模拟真实相机在成像过程中产生的几何形变。
- 两步法逻辑实现:
- 第一步:利用RAC约束在线性框架下求解旋转矩阵和平移向量的Tx、Ty。
- 第二步:在线性估计焦距f和深度平移Tz的基础上,通过非线性优化进一步精确化参数。
- 鲁棒性验证:支持向观测坐标中添加高斯噪声,以测试算法在非理想环境下的标定精度。
- 多维可视化展示:提供3D空间点位与相机位置关系图、观测点与重投影点对比图以及重投影误差矢量分布图。
使用方法
- 环境配置:确保计算机已安装MATLAB(建议R2016b及以上版本),并安装了Optimization Toolbox(用于非线性精修步骤)。
- 运行程序:在MATLAB命令行窗口中直接运行主脚本函数。
- 参数调整:用户可以在脚本起始位置修改真实焦距、主点坐标、畸变系数以及外参矩阵的相关参数,以测试不同场景下的标定效果。
- 结果查看:程序运行结束后,控制台将输出真实参数与估计参数的对比数值,并自动弹出两张可视化分析图表。
系统要求
- 软件平台:MATLAB R2016b 或更高版本。
- 必备工具箱:Optimization Toolbox(优化工具箱)。
- 硬件要求:标准PC配置,无需特殊图形加速卡。
实现逻辑说明程序的实现流程严格遵循Tsai两步法的数学模型,具体步骤如下:
- 数据准备阶段
程序首先通过代码定义了一组真实的相机内参(焦距f=800,主点在图像中心)和外参(旋转采用10, -5, 15度的欧拉角,平移在Z轴方向设定为1200mm)。利用meshgrid生成两层不同高度的3D点集,确保标定点非共面,以提高求解稳定性。通过投影方程和径向畸变公式计算出带有0.1像素噪声的观测点坐标。
- 第一步:线性求解外参(RAC约束)
这一步的核心是利用“径向一致性”原理,即忽略畸变的情况下,图像中心到观测点的矢量与空间点在相机坐标系下的投影矢量方向一致。程序构造了一个超定线性方程组 A * L = B,其中未知量L包含了旋转矩阵前两行与Tx、Ty的关系。通过最小二乘法解出L后,利用旋转矩阵的行向量模长为1的特性确定缩放因子和Ty的绝对值,进而恢复出Tx和旋转矩阵的前两行。
- 旋转矩阵正交化
由于线性解得出的旋转矩阵分量通常不满足正交性约束,程序通过对初步得到的旋转矩阵进行奇异值分解(SVD),并取U*V'来强制结构化,确保得到一个标准的正交旋转矩阵。
- 第二步:初定焦距与深度平移
在已知旋转矩阵和部分平移参数的基础上,程序建立关于焦距f和深度平移Tz的线性方程组。通过投影模型的简单变形,再次利用最小二乘法快速获得这两个参数的初始估计值。
- 第三步:非线性优化精修
程序将前两步得到的f、Tz以及初始设为0的畸变系数k1作为初值,调用非线性优化器。优化目标是最小化所有特征点的重投影误差(即观测像素点与模型预测点之间的欧氏距离之和)。这一步能够同时修正线性阶段带来的偏差并准确捕获径向畸变。
关键函数与算法分析
- 主循环逻辑:负责整个标定流程的串联,从数据合成到RAC线性解,再到结果的打印输出。
- 重投影误差计算函数:这是优化阶段的核心。它接收当前的内外参数,执行3D到2D的投影变换。该函数首先将世界坐标转换至相机坐标,应用透视转换获得归一化坐标,随后根据Tsai定义的畸变模型(1+k1*r^2)对坐标进行缩放,最后映射回像素平面计算误差。
- 坐标居中处理:为了消除主点偏移对线性求解的影响,程序在进入RAC计算前将观测坐标减去主点坐标(初定为图像中心)。
- 欧拉角转换函数:实现将角度形式的姿态参数转换为3x3旋转矩阵的标准ZYX序列算法,用于生成模拟数据。
- 结果可视化逻辑:
- 3D图展示:使用plot3绘制标定板点的分布,并计算相机旋转平移的逆变换(-R' * T)来准确定位相机在世界坐标系中的空间位置。
- 误差矢量图:利用quiver函数将每个点的投影误差以矢量箭头形式放大显示,便于直观判断是否存在系统性偏差。