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

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 所示,其中原点为黄色矩形标记点。

Matlab工具箱实现张正友相机标定_第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.zipMatlab工具箱实现张正友相机标定_第2张图片

图2 20张棋盘图

      打开matlabR2021a自带的App “Camera Calibrator”

Matlab工具箱实现张正友相机标定_第3张图片

图3 Camera Calibrator位置示意图

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

Matlab工具箱实现张正友相机标定_第4张图片

图4 运行示意图

3. 实验结果

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

图5 以摄像头为参考系

Matlab工具箱实现张正友相机标定_第6张图片

图6 以平面为参考系

Matlab工具箱实现张正友相机标定_第7张图片

图7 像素平均误差

4. 总结

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

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

你可能感兴趣的:(数字图像处理,Matlab,相机标定,张正友,matlab,计算机视觉)