相机标定理论及matlab实现

1. 相机标定

相机标定主要是通过相机模型建立起目标物体的三维空间坐标和二维图像坐标之间的转换关系,是实现计算机视觉的基础。本文主要介绍相机标定技术及其原理,从而求出相机的内部参数,实现相机标定。

1.1 坐标系定义及转换

为了介绍相机标定技术及原理,定量地描述相机成像过程,需要引入四种坐标系,而相机标定的实质即是求解各个坐标系之间的转换关系。

  1. 像素坐标系
    相机采集到的图像通过模数转换和离散采样之后得到数字图像。每一幅数字图像实际上是一个M×N的数组,M行N列中的元素即为像素,像素值的大小代表灰度图像在该点的灰度值。像素坐标系如图所示,其坐标原点O0位于成像平面的左上角,横轴和竖轴定义为u和v,单位为像素。
    在这里插入图片描述

  2. 图像坐标系
    图像坐标系如图所示,其原点建立在相机光轴和成像平面的交点上,该点一般是图像的中心点。图像坐标系的x轴和y轴与像素坐标系的u轴和v轴平行,该坐标系以毫米作为单位。
    在这里插入图片描述
    假设图像坐标系的原点O1在像素坐标系中的坐标为(u0,v0),每个像素在x轴和y轴上的物理尺寸分别为dx和dy,则对于图像中的任一像素点的图像坐标和像素坐标的关系如下:
    在这里插入图片描述
    为了使用方便,采用齐次坐标与矩阵形式把上式表示为:
    在这里插入图片描述

  3. 相机坐标系
    相机坐标系如图所示,该坐标系是以相机透镜中心点Oc为原点建立的三维坐标系,横竖轴Xc和Yc分别与图像坐标系的x轴和y轴平行,Zc轴重合于光轴且垂直于成像面,透镜中心点到成像平面之间的距离Oc O1为相机的焦距f。
    在这里插入图片描述

  4. 世界坐标系
    世界坐标系是空间里的参照基准坐标系,其原点的选取是任意的,主要用来描述相机以及周围环境的位置信息。
    在这里插入图片描述
    世界坐标系Ow-XwYwZw如图2.4所示,可以用旋转和平移来描述世界坐标系和相机坐标系的一一对应关系。对于世界坐标系中的任意一点P(Xw,Yw,Zw),该点在相机坐标系下的坐标为(Xc,Yc,Zc),则世界坐标系和相机坐标系之间的转换关系可以表示为:
    在这里插入图片描述
    其中R为3×3的旋转矩阵,有三个独立变量,包含相机坐标系绕世界坐标系的三个坐标轴旋转的方向余弦;t为平移向量,代表沿着世界坐标系的三个坐标轴方向平移,也有三个独立的变量。将点P用齐次坐标表示,则世界坐标系和相机坐标系之间的转换关系为:
    在这里插入图片描述
    因此可以用矩阵M1来表示世界坐标系和相机坐标系之间的转换,矩阵M1称为相机的外部参数矩阵。

1.2 相机模型

相机模型分为线性和非线性两种模型。线性模型不考虑镜头畸变,是一种理想化模型,又称小孔成像模型,由于这种模型原理简单、计算方便,常作为相机标定原理介绍的模型。本文主要通过相机线性模型介绍相机标定原理,相机线性模型如图所示。
在这里插入图片描述
对于空间中的任一点P,它在相机坐标系下的坐标为(Xc,Yc,Zc),在图像上的投影点为p,坐标为(x,y)。则根据比例关系可以得到:
在这里插入图片描述
其中f为相机的焦距。为了方便后续数学公式的推导,可以将上式改写成矩阵形式为:
在这里插入图片描述
将以上公式整理,可以得出像素坐标系与世界坐标系的转换关系如下:在这里插入图片描述
其中,αx=f/dx,αy=f/dy,分别为u轴和v轴的尺度因子;M1为3×4矩阵,它包括αxy,u0和v0,由于这些参数只和相机内部结构有关,所以M1被称为相机内参矩阵。M2代表相机相对于世界坐标系的位置姿态,所以被称为相机外参矩阵。

1.3 张正有相机标定

通过相机标定技术可以求出相机的内部参数和外部参数,进而可以得到目标物体在三维空间和对应的二维图像之间的转换关系。而对相机进行标定最常见的方法就是微软学院张正有教授提出的棋盘格相机标定法。该方法利用三幅及以上的不同姿态的标定板上的角点信息和其对应的世界坐标位置信息来计算出相机成像平面和标定板平面之间的单应性关系,进而可以求解出相机的未知参数,从而完成相机的标定。有关张正有相机标定过程的推导网上有很多推导过程,也可以参考张正有论文原文。
本文只给出简单的理论推导。

张正有相机标定法的巧妙之处在于其假设标定物的平面位于世界坐标系ZW=0的平面上,且将外参矩阵写成列的形式,所以相机像素坐标系和世界坐标系之间的转换关系可以表示为:
在这里插入图片描述
令H=[r1 r2 t],H被称作单应性矩阵,且定义H=[h1 h2 h3],H用来描述世界坐标平面到相机成像平面的投影映射关系,则
在这里插入图片描述
由于r1和r2是单位正交矩阵,所以有r1^T r2=0,并且r1和r2的模为1,可以得到
在这里插入图片描述
利用上式作为约束,每一张标定板图像可以对相机内参提供两个约束,则通过相机获取至少三张标定板的图像,可以求出相机内部参数。
相机在不同的位置拍摄标定板对应不同的相机外部参数,利用上文的单应性矩阵H和已经求出的相机内参矩阵M1,利用下式及可求出相机的外部参数。
在这里插入图片描述

2. matlab实现相机标定

matlab为我们提供了很成熟的图像处理工具箱,当然也包括相机标定APP,这类似于黑箱,使得我们对相机标定不需要重新编写代码,省去了很多时间。

  1. 首先我们需要准备标准的棋盘格,打印出来贴到平面上。
    在这里插入图片描述
  2. 图像采集,固定相机焦距,多次移动相机并拍摄标定板,拍摄10张以上的图像用于标定实验,本文拍摄了12张图片来做演示。
    在这里插入图片描述
  3. 打开matlab-APP中的Camera Calibrator
    在这里插入图片描述
  4. 显示页面如图所示,点击Add Images添加待标定相机采集到的棋盘格图片,并输入每个棋盘格的实际尺寸,本文打印出的棋盘格每个方格尺寸为16cm。
    在这里插入图片描述
    导入之后进行角点提取,结果如图所示。
    在这里插入图片描述
  5. 相机标定,点击Calibrate来对相机进行标定,可以删除像素误差较大的图片进而来获取更准确的相机内部参数。
    在这里插入图片描述
  6. 点击Export Camera Parameters导出相机参数,在matlab命令行可以查看相机的内外参。
    在这里插入图片描述

至此,我们已经介绍了四种坐标系(像素坐标系、图像坐标系、相机坐标系和世界坐标系)之间的转换关系、相机模型、张正有相机标定法和通过matlab工具箱实现相机标定。
利用相机标定的结果,可以相机采集到的图像进一步做处理。

猜你喜欢

转载自blog.csdn.net/tkzky001/article/details/107631795