借助MATLAB标定工具箱标定相机

1-2  借助MATLAB标定工具箱标定相机

  上篇文章讲述了相机成像和标定原理,这篇文章我们讲述如何利用MATLAB中的标定工具箱标定单目相机和双目相机的参数。

MATLAB标定工具箱下载和标定准备工作

MATLAB安装中没有相机标定工具箱,大家可以从下面给出的链接直接进入下载Toolbox_calib.zip,下载完之后解压到Toolbox_calib文件夹,接着打开matlab,在“预设路径”(英文版本为“set path”)中加入Toolbox_calib文件夹的绝对路径,然后就可以利用该工具箱标定相机了。

标定工具箱下载地址:http://www.vision.caltech.edu/bouguetj/calib_doc/download/index.html

相机标定需要借助平面标定板,标定板有棋盘格标定板和圆形标定板,分别如图1和图2所示,普遍使用的是棋盘格标定板。

借助MATLAB标定工具箱标定相机_第1张图片

图1

借助MATLAB标定工具箱标定相机_第2张图片

图2

要想对相机进行标定,我们首先要用相机从不同位置以不同角度采集总共10组以上图片(单目相机是10幅图,双目相机是10组左右图)。这里我们以双目相机为例介绍单个相机参数标定和两个相机之间的立体标定。图3所示是我们使用的一款嵌入式双目相机,基线为60mm。

借助MATLAB标定工具箱标定相机_第3张图片

图3

我们将左相机采集到的第一幅图片命名为left_0.bmp,右相机采集到的第一幅图片命名为right_0.bmp,第二幅图片命名为left_1.bmp和right_1.bmp。其中,left_和right_分别为左、右图的basename(基名),bmp为图片格式。

标定工具箱功能介绍

打开MATLAB,首先更改当前工作目录为要标定相机图片文件夹的地址,比如我想标定左相机,将当前工作目录改为左相机图片存储文件夹left1的地址。然后在命令窗口中输入“calib_gui”,弹出如图4所示的窗口。

借助MATLAB标定工具箱标定相机_第4张图片

图4

选择第一个“Standard”进入如图5所示的标定主界面。

借助MATLAB标定工具箱标定相机_第5张图片

图5

这里我们先介绍这些按键的功能,然后详细讲述如何相机的标定过程。

1.Image name和Read images都是用来从磁盘中读取图片到MATLAB工作空间中。二者功能一样,但是偶尔使用Read images读取图片会报错,建议使用Image name读取图片。

2.Extract grid corners用来从标定板图片中提取角点(即标定要用到的特征点)。

3.Calibration的功能是标定相机的内参数和外参数。其中相机内参数包括焦距、中心点在像素坐标系中的坐标和畸变系数。外参数为从相机坐标系到标定板坐标系的位姿变换关系,外参数为旋转向量omc和平移向量Tc。

4.Show Extrinsic可以将提取过角点的标定板和对应相机的相对位置关系展示出来。

5.Reprojec on images将标定过程中提取到的角点重投影到原图像中,并且统计重投影点与真实点之间的偏差大小(单位为pixel)和方向。

6.Analyse error分析重投影过程中的误差。

7.Add/Suppress images可以在标定后重新添加一些或者去除原来的某些图片重新进行标定。

8.Save可以将标定的结果Calib_Results.m存储到当前工作目录中。

9.Load可以将磁盘中的文件中数据导入到工作空间中。

10.Exit实现退出标定过程的功能。注意:标定到一半想退出标定过程是,一定得点击“Exit”,否则会出现一些回调函数报错的问题而导致不能正常使用。

11.Comp.Extrinsic可以重新提取图像交点并且在命令窗口输出该图像对应位置相机坐标系和标定板坐标系之间变换的齐次变换矩阵。

12.Undistort image可以将某幅或者所有图像对应的无畸变的图像存储到当前工作目录中。

13.Export calib data可以将标定过程中的中间数据导出存储到当前工作目录中,该文件可以可以用Notepad++打开查看。

14.Show calib results可以将标定的内参结果输出到命令行窗口中。

好了,每个按键的功能讲完后,接下来我们将如何标定单目相机以及实现双目相机之间的立体标定。

单目相机标定

每个相机做好之后,其内参数值都是确定的,是可以通过标定得到的。当然这儿提到的相机是固定焦距的相机;变焦距的相机改变到某个焦距后,也可以通过标定得到当前焦距下相机的内参数和外参数。

我们标定相机前,我们首先要从不同位置不同角度采集至少10幅标定板图片,这里我以双目相机拍摄到的左相机图片为例讲解。我们拍摄了10幅左相机图像,存储在left1文件夹中。

接着我们打开matlab,将标定工具箱的路径加入到“set path”中,然后将工作目更改为left1文件夹的路径,如图6所示,图6正上方红框为当前工作目录,改为left1文件件路径,左边红框中为该文件夹中的左相机采集到的图像。

借助MATLAB标定工具箱标定相机_第6张图片

图6


上述是一些准备工作,接下来我们介绍标定的具体流程。

1.读入图片:在命令行窗口中输入calib_gui,然后按回车,在弹出如图4所示窗口中点击Standard进入图5所示的标定主窗口,然后点击Image names,在图7所示命令窗口中先输出第一句,我们输入标定图片的基名left_,然后按回车键;在弹出的第二句命令后我们输入图片格式bmp,然后按回车键 。当看到图7中Figure 2中展示的是读入的图片的时候,读入图片完成。

借助MATLAB标定工具箱标定相机_第7张图片

图7

2.角点提取:在任务栏中打开标定主窗口,点击Extract corners,在8所示标1的地方按回车键(回车键都代表采用括号中的默认值,这儿就是“所有图片”),在标2的地方输入你要选择的图像x方向的窗口数目8然后按回车键(直接按回车键表示输入默认值6),接着在标3的地方输入你要选择的图像y方向的窗口数目8然后按回车键,在标4的地方直接按回车键,然后依次地提取每一幅图像中的角点。第一幅图中角点提取分为选择区域和输入参数,其余图像都只需要选择区域(参数默认使用第一幅图像提取交点时录入的参数)即可。

借助MATLAB标定工具箱标定相机_第8张图片

图8

1)提取区域:在第一幅图像中选择8x8格子区域的四个顶点,左上角点为第一个点,然后按顺时针方向选择剩下三个顶点,如图9所示。

借助MATLAB标定工具箱标定相机_第9张图片

图9

2)输入参数:在图10中标1的地方输入一个棋盘格子在x方向(图像列方向)尺寸然后按下回车,在标2的地方输入一个棋盘格子在x方向(图像行方向)尺寸然后按下回车,在标3的地方直接按下回车完成第一幅图像的角点提取,提取完后的角点图如图11所示。

借助MATLAB标定工具箱标定相机_第10张图片

图10

借助MATLAB标定工具箱标定相机_第11张图片

图11

依次提取完所有图像的参与标定的角点(不同图像间都选择同样的角点),所有图像的角点都提取完后,命令行窗口会提示“done”。

3.参数标定:在任务栏中单开隐藏的标定主窗口,点击Calibration,进行相机标定,命令行中显示如图12所示。

借助MATLAB标定工具箱标定相机_第12张图片

图12

我们看到内参数有两个,初始化后的内参和优化后的参数,优化后的参数矫正畸变之后得到的,是我们要用的结果,外参数在命令行看不到。

4.存储标定结果:经过前三步,我们已经完成了相机内、外参数的标定,我们需要将结果存储出来,点击标定主界面中的Save按键将标定结果Calib_Results.m和Calib_Results.mat。其中,从Calib_Results.m中可以直接查看内外参数,Calib_Results.mat用于进行双目相机之间的立体标定。

5.点击Show Extrinsic显示相机和标定板坐标系之间的相对关系,如图13所示。图13右下角标号为1的按键可以在该图中移除相机或者加入相机,标号为2的按键可以切换成相机不动或者标定板不动的模式。

借助MATLAB标定工具箱标定相机_第13张图片

图13

6.点击Reproject on images将选择的角点重投影到某一幅图像中,如图14所示。图14左图显示了重投影点与原先提取角点之间偏差的方向,右图统计了所有点对应的重投影偏差。

借助MATLAB标定工具箱标定相机_第14张图片

图14

7.点击Undistort images将无畸变的理想图像存储到当前工作目录中,如图15左下角红色框所示。

借助MATLAB标定工具箱标定相机_第15张图片

图15

8.Export calib data可以将标定过程中的数据导出到当前工作目录下。

9.Show calib results可以将标定内参结果打印输出到命令行窗口中。

前四个步骤就已经完成了相机内外参数的标定,5-9只是一些附加的功能,平时可能用不到的。

双目相机的立体标定

在单目标定中我们介绍了单目相机标定的步骤,并且得到了双目相机中左相机的内外参数,在进行双目立体标定之前,我们用单目标定的方法标定右相机内外参数,将左相机标定得到的Calib_Results.mat重命名为Calib_Results_left.mat,将右相机标定得到的Calib_Results.mat重命名为Calib_Results_right.mat。下面讲述如何对双目相机之间的关系进行标定。

1.打开matlab,将Calib_Results_left.mat文件和Calib_Results_right.mat拷贝到当前工作目录中。

2.在命令行中输入stereo_gui,弹出如图16所示的窗口,点击“Load left and right calibretion files”,在图17所示命令行窗口标号1的地方输入左相机标定完的mat文件名,然后按回车键(如果按步骤1之前将文件名称按我说的改过,则直接按回车键);在标号2的地方输入右相机标定完的mat文件名,然后按回车键,会看到控制窗口中显示左右相机的内参数。

借助MATLAB标定工具箱标定相机_第16张图片

图16

借助MATLAB标定工具箱标定相机_第17张图片

图17

3. 点击Run stereo calibration进行双目相机立体标定,结果如图18所示。


图18

4.点击Show Extrinsics of stereo rig可以打印双目相机和标定板之间坐标系之间的相对位置关系,如图18所示。

借助MATLAB标定工具箱标定相机_第18张图片

图19

如何实现双目相机的立体标定我们就介绍这么多,如果有感兴趣的可以去探索其他按键所对应的功能。

你可能感兴趣的:(相机标定)