Matlab相机内参标定及参数理解

Matlab相机内参标定

相机的标定有很多种工具和方法,例如opencv,ROS,Visp等都可以进行相机标定。由于最近一直在用Matlab控制KUKA机器人做一些项目,所以我就选择了Matlab进行相机的内外参标定,这里也主要分享和记录在使用Matlab标定过程中的一些方法和细节。

相机成像模型

想要弄懂相机的内外参标定以及明白标定结果的各项参数,首先要知道并理解相机的成像模型。有些博客已经讲的非常清楚,分享一些我参考阅读的博客:
1.https://blog.****.net/lxy_2011/article/details/80675803(五参数模型)
2.https://blog.****.net/striving1234/article/details/78433648(四参数模型)
3.https://blog.****.net/qq_37791134/article/details/80942171

内参数模型

这些博客中均未提到相机成像的参数模型,下面简单介绍下相关的参数模型。相机成像模型主要有三参数,四参数,五参数模型。

四参数模型
Matlab相机内参标定及参数理解
其中Kx,Ky分别为X轴和Y轴的放大系数,这个是可以由相机标定直接得到的,该参数模型是最为常用的。
三参数模型
Matlab相机内参标定及参数理解
如果不考虑放大系数Kx,Ky的差异,构成的相机内参数模型就只有三个参数k,u0,v0.
五参数模型
Matlab相机内参标定及参数理解
在考虑放大系数Kx,Ky的差异与耦合作用的情况下,构成相机的内参数模型就具有五个参数,Matlab标定工具箱得到的结果就是该参数模型。

Zc的理解

由射影几何原理可知,同一图像点可以对应若干个不同的空间点,如图所示:
Matlab相机内参标定及参数理解直线OP上的所有点具有相同的图像坐标。当z=f时,该点就成为图像点在成像平面上的成像点坐标,当z=1时,该点为图像点在焦距归一化成像平面上的成像点坐标。利用相机的内参,就可以求出图像点在焦距归一化成像平面上的成像点坐标:
Matlab相机内参标定及参数理解
Zc表示点在相机坐标系下的Z轴方向的坐标,一般可以理解为深度,相机内参标定是得不到Zc的值,这也是普通针孔相机无法进行3D还原的原因。因为三维世界的坐标点会对应唯一的图像坐标点,但由于Zc未知,是无法还原这一过程的。所以引入归一化平面这个概念,它是一个假想的平面,可以理解为实际点坐标的一种缩放。
可以参考这篇博客https://blog.****.net/weixin_38213410/article/details/89673663

Matlab标定工具箱

在理解了相机的成像模型和参数模型后,我们使用Matlab自带的标定工具箱来进行相机内参的标定。这个很多博客也都有介绍,我只记录一下一些应该注意的地方。

参数勾选

从Matlab应用程序中找到cameraCalibrator或者命令行直接输入cameraCalibrator即可打开标定工具箱,标定前可以自主选择一些参数,如图所示:
Matlab相机内参标定及参数理解勾选2Coefficients表示径向畸变用两个参数表达,勾选3Coefficients表示径向畸变用两个参数表达。Skew是计算两轴的耦合,勾选得到的内参矩阵是五参数模型,不勾选得到的是四参数模型,Tangential Distortion是计算切向畸变的。

标定结果

从文件夹输入相应图片(10张以上)便可以进行标定了。下面是我的标定结果:
Matlab相机内参标定及参数理解
从标定的结果可以得到很多有用的信息,当然最关心的还是cameraParams.IntrinsicMatrix,它得到的其实是之前提到参数模型内参矩阵的转置矩阵。

外参理解

从标定的结果我们还可以得到Camera Extrinsics,它表示相机固定不动,每次相机相对于拍摄图片的位姿。这个位姿求解是利用PnP原理得到的,相机相对于世界坐标系的位姿在手眼相机标定中有很重要的作用,具体使用我会在下一篇博客中讲到。
Matlab相机内参标定及参数理解这张图就是Matlab标定得到的,可以直观看到每次拍摄的照片相对于相机的位置,也就是相机的外参。

总结

相机内参标定教程非常多,这里也只是总结并记录一下自己在使用过程中的一些理解,希望对大家有所帮助。为了方便采集图片和内外参标定,我还用matlab编写了GUI,后续也会分享。我会在下一篇中继续介绍手眼相机的标定原理以及方法。