Matlab工具箱实现张正友相机标定

该博客介绍了二维和三维棋盘点的坐标表示,以及在相机标定中的齐次坐标转换。通过张正友标定方法,利用8个方程(4组对应点)解决4x4的外参矩阵,并探讨了超定方程组的最小二乘优化。实验过程使用matlabR2021a的CameraCalibrator App,展示了标定结果,指出误差可能源于棋盘偏离标准位置。文章指出该方法对径向畸变的处理,但忽略了切向畸变,存在轻微误差。
摘要由CSDN通过智能技术生成

1. 基本原理

       一个二维平面中的棋盘点m和一个三维空间内的棋盘点M可以表示如下:

       它们对应的齐次坐标\hat{m}\hat{M}可以表示如下:

       如果mM是同一个点,那么他们的转换关系可以写为:

其中A=\begin{bmatrix} \alpha & \gamma & u_0\\ 0 & \beta & v_0\\ 0 &0 & 1 \end{bmatrix}s是任意的比例因子,[R\ t]是外参矩阵,R是旋转矩阵,t是平移矩 阵,A是相机内参矩阵,(u_0,v_0)是坐标的主点,\alpha\beta分别是图像在uv轴的比例因子, \gamma是描述两个坐标轴倾斜角的参数。

       进一步地,假定棋盘点所在平面在世界坐标系中的Z坐标为0,且X, Y轴与棋盘格的方向重合,原点为检测到棋盘格点的首点,如图 1 所示,其中原点为黄色矩形标记点。

图 1 示意图 

       那么可以得到如下式子:

       则点M和它在棋盘上的映射点m的关系可以用单应矩阵H表示如下:

       这里H=A[r_1,r_2,t]\hat{M}=[X, Y, 1]^T。显然H是一个 3*3 的矩阵,自由度是 8。需要 8 个 方程即 4 组对应点,但是通常情况下,为了得到更准确的解,需要大于 4 对的对应点, 方程组就会变成超定的,此时可以使用最小二乘法进行优化得到最后的解H

2. 实验过程和步骤

       原始Camera Calibration工具箱链接如下。由于其最近更新为2003年,版本较新的matlab运行这个工具箱的代码会出现很多错误。因此,本文只采用它提供的20张棋盘图,利用matlabR2021a内置的工具箱完成实验。

Camera Calibration Toolbox for Matlab (stanford.edu)http://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/example.html通过下面的链接下载用于标定 20 张的棋盘图,如图 2 所示

http://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/calib_example.ziphttp://robots.stanford.edu/cs223b04/JeanYvesCalib/htmls/calib_example.zip

图2 20张棋盘图

      打开matlabR2021a自带的App “Camera Calibrator”

图3 Camera Calibrator位置示意图

       导入下载的20张图片后点击Calibrate即可完成标定。

图4 运行示意图

3. 实验结果

       从图7中可以看出第5、18、19、20张图的平均误差较大,其中第5张图的平均误差最大。观察误差较大的4张图与其他16张图的不同点,猜测可能是因为棋盘偏离标准位置所导致的,这里的标准位置我认为是棋盘平面与相机方向正交或平行。

图5 以摄像头为参考系

图6 以平面为参考系

图7 像素平均误差

4. 总结

算法优点:张正友标定方法相比于经典方法显得十分灵活和简便,只需要摄像机从不同方向观测标定板即可。

局限性:摄像机拍照时通过透镜把实物投影到像平面上,但是由于透镜的精度及其他问题,得到的图像会出现失真的情况。因此我们需要考虑成像畸变的问题。透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等,但都没有径向和切向畸变影响显著。张正友标定方法只关注了影响最大的径向畸变,忽略了切向畸变,所以标定数据和实际仍存在轻微误差。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Toblerone_Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值