MATLAB摄像机标定工具箱 (MATLAB Camera Calibration Toolbox)
项目简介
本工具箱是一套基于MATLAB开发的完整摄像机标定解决方案。它采用单文件架构,不依赖外部辅助文件,通过数学模型模拟和计算,精确获取摄像机的几何参数和光学特性。该项目实现了从数据生成、初值估计到非线性优化的完整流程,重点基于张正友标定法(Zhang's Method)实现单目内参标定,并在此基础上模拟了双目立体视觉系统的相对位姿计算。
功能特性
- 全流程模拟仿真:内置数据生成引擎,能够自动生成虚拟棋盘格与带有高斯噪声及畸变的模拟摄像机图像数据,用于验证算法的准确性(Ground Truth对比)。
- 单目摄像机标定:
* 基于DLT算法计算单应性矩阵。
* 利用闭形式解(Closed-form solution)求解内参矩阵初值。
* 基于正交约束恢复外参初值。
- 高精度畸变模型:支持径向畸变(k1, k2)和切向畸变(p1, p2)的混合模型计算。
- 非线性全局优化:集成Levenberg-Marquardt算法进行Bundle Adjustment(光束平差),最小化全局重投影误差。
- 立体标定模拟:基于单目优化结果,计算双目摄像机系统间的相对旋转和平移关系。
- 结果可视化与评估:提供详细的文本报告,输出焦距、主点、畸变系数及重投影误差统计,并包含可视化绘图功能。
系统要求
- MATLAB R2016a 或更高版本
- Optimization Toolbox(用于非线性最小二乘求解器
lsqnonlin)
使用方法
由于本项目所有功能均封装在单一脚本中,使用非常简便:
- 确保MATLAB环境已安装优化工具箱。
- 直接运行主函数。
- 程序将自动执行以下步骤:
* 初始化标定板参数和真实相机参数。
* 生成包含噪点的模拟观测数据。
* 执行标定算法流程。
* 在控制台输出标定结果与真实值的对比报告。
* 弹出图形窗口展示标定结果的三维可视化。
核心算法与实现细节
本项目代码完全自主实现,未直接调用MATLAB内置的标定APP接口,而是从底层复现了计算机视觉中的经典算法。以下是主要模块的实现逻辑分析:
1. 数据生成与仿真
系统首先定义了真实的相机内参(fx, fy, cx, cy)和畸变参数(k1, k2, p1, p2)。
generateCheckerboardPoints 函数在Z=0平面上生成标准的棋盘格世界坐标。
generateSyntheticViews 函数负责生成多视角的模拟数据,它随机生成摄像机绕随机轴的旋转和平移向量,通过投影函数将3D点映射到2D像素平面,并人为添加高斯噪声以模拟真实的传感器误差。
2. 投影模型与畸变处理
projectPoints 函数实现了完整的成像模型。它首先将世界坐标转换到相机坐标系,归一化后应用布朗-康拉迪(Brown-Conrady)畸变模型。代码显式计算了径向畸变项(r^2, r^4)和切向畸变项,最后将校正后的归一化坐标映射到像素坐标系。
3. 单应性矩阵计算 (Homography)
在
computeHomography 函数中,利用直接线性变换(DLT)算法处理世界坐标与像素坐标的对应关系。通过构建线性方程组并进行奇异值分解(SVD),取最小奇异值对应的右奇异向量作为解,从而恢复出单应性矩阵 H。
4. 内参初值估计 (Zhang's Method)
computeIntrinsics 函数实现了张正友标定法的核心代数求解过程。它利用单应性矩阵的性质(旋转矩阵列向量的正交性和等模性),构建关于绝对二次曲线图像 B 的约束方程组。通过求解该方程组并利用Cholesky分解原理,从矩阵 B 中解析出焦距、主点和倾斜因子等内参初值。
5. 外参恢复
在获得内参矩阵 K 后,
computeExtrinsics 函数结合 K 的逆矩阵和单应性矩阵计算每张图像对应的旋转矩阵 R 和平移向量 t。为了通过数学强制约束保证 R 的正交性,代码对计算出的旋转矩阵进行了SVD分解与重构,通过罗德里格斯变换(Rodrigues)将旋转矩阵转换为旋转向量以便后续优化。
6. 非线性全局优化 (Bundle Adjustment)
这是标定精度的关键步骤。
bundleAdjustment 函数构建了一个庞大的参数向量,包含:
- 5个内参(fx, fy, cx, cy, skew由优化器隐式处理或约束)。
- 4个畸变系数 (k1, k2, p1, p2)。
- 所有视图对应的旋转向量和平移向量。
使用
lsqnonlin 函数(Levenberg-Marquardt算法)最小化目标函数
costFunction。该目标函数计算所有标定点在所有图像上的重投影误差(观测像素坐标与模型投影坐标的欧氏距离)。
7. 立体标定计算
在
main 函数的最后部分,系统模拟了双目立体标定过程。它选取优化后的第一张和第二张图像的外参(假设分别对应左、右相机),通过刚体变换公式计算两个相机之间的相对旋转
stereo_R 和相对平移
stereo_T,实现了从单目参数到立体参数的推导。