计算机视觉——棋盘格标定法获取相机内参外参
一、原理相机标定目的相机标定的输入相机标定的输出相机标定策略相机拍摄图像变换过程相机内参相机外参 二、环境三、数据集四、运行结果与分析角点提取校准重新投影错误内参矩阵 五、总结一、原理
相机标定目的
为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。
相机标定的输入
标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下假定图像位于Z=0平面上)。
相机标定的输出
摄像机的内参、外参系数。
相机标定策略
光学标定:利用已知的几何信息(如定长棋盘格)实现参数求解。自标定:在静态场景中利用structure from motion估算参数。本次实验中使用光学标定法
相机拍摄图像变换过程
设P=(X,Y,Z)为场景中的一点,在针孔相机模型中,其要经过以下几个变换,最终变为二维图像上的像点p=(μ,ν):
将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。从相机坐标系,通过透视投影变换到相机的成像平面上的像点p=(x,y)。将像点p从成像坐标系,通过缩放和平移变换到像素坐标系上点p=(μ,ν)。
相机内参
相机内部参数/内方位元素:焦距、像主点坐标、畸变参数
从相机坐标系,通过透视投影变换到相机的成像平面上的像点,将该变换过程整理为矩阵相乘的形式:
将矩阵K称为相机的内参数,
为了不失一般性,可以在相机的内参矩阵上添加一个扭曲参数s,该参数用来表示像素坐标系两个坐标轴的扭曲。则内参数K变为
对于大多数标准相机来说,可将扭曲参数s设为0
相机外参
将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。
相机外部参数/外方位元素: 旋转、平移
用矩阵表示:
t表示平移的量,R表示x,y,z方向的旋转参数,矩阵与平移量相加就可得出变换后的矩阵,与旋转参数相乘后可得旋转后的矩阵
旋转参数R:
二、环境
win10,64位,MATLABb,手机型号:小米8,计算手机内参:python3.7
三、数据集
拍摄15张不同角度的黑白棋盘格作为数据集
四、运行结果与分析
角点提取
选取所有图像的角点,以其中一张图像选取过程展示如下:
单击矩形棋盘图案上的四个极端角:
自动计算两个方向上的平方数,并在不失真的情况下显示预测的网格角:
预测的角点与真实的图像角点足够接近。因此,不必通过输入对径向畸变系数的猜测来“帮助”程序检测图像拐角。使用这些位置作为初始猜测自动提取角。
自动提取图像的角,并显示如下(角点周围的蓝色方框显示了角点查找器窗口的界限):
本次实验拍摄图像都比较清晰,没有出现失真的情况,因此网格中的某些预测角距离实际网格角不远,没有错误的提取。如果图像失真,网格中的一些预测角与实际网格角距离较远,为了帮助系统更好地猜测拐角位置,要手动输入对畸变系数的猜测,然后再进行预测,如果接下来预测点与真实点距离比较近则预测成功,否则需要再次输入畸变系数进行尝试。
校准
校准分为两个步骤:首先进行初始化,然后进行非线性优化。
初始化步骤基于不包含任何镜头畸变的校准参数计算封闭式解
非线性优化步骤将所有校准参数上的总重投影误差(最小二乘)最小化。
初始化步骤得出的参数结果:
非线性优化后得出的参数结果:
其中:fc是横纵方向的焦距,cc表示主光点的偏移,kc是畸变参数,这几个参数是相机内参中的重要参数。
外部参数:
“以相机为中心”
“以世界为中心”
重新投影错误
以彩色编码的叉号形式显示:
在大量图形上,重投影误差非常大。原因是,我们在提取某些失真的图像上的角点时并没有做非常仔细的工作。
内参矩阵
小米8手机的内参矩阵为
五、总结
通过结合matlab与python的求解,很顺利的得出了手机相机的内参矩阵以及棋盘格标定的重要参数和外部参数,同时也计算了重投影错误。可以看出第一次计算重投影错误发现了很多错误,这是因为在一个或多个图像上错误提取了拐角,这也是检查重投影错误的重要意义。在这种情况下,可以使用不同的窗口大小(更大或更小)重新计算特定图像的角,然后特定角的重投影误差就会变小。