赞
踩
我们首先要明白两个问题:1、相机是如何成像的?2、相机标定的目的是什么?
相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。对于这四个坐标系中之间的关系还不太明白成像原理的同学需要先查一查学习一下。
这四个坐标系之间的转化关系为:
其中,
我们将矩阵:
称为相机的内参矩阵,内参矩阵取决于相机的内部参数。其中,
我们将矩阵:
即单点无畸变的相机成像模型如下:
为什么要进行相机标定呢?比如,当我们拿到一张图片,进行识别之后,得到的两部分之间的距离为多少多少像素,但是这多少多少像素究竟对应实际世界中的多少米呢?这就需要利用相机标定的结果来将像素坐标转换到物理坐标来计算距离(当然这里值得说明,仅仅利用单目相机标定的结果,是无法直接从像素坐标转化到物理坐标的,因为透视投影丢失了一个维度的坐标,所以测距其实需要双目相机)。
相机标定的目的其实很简单,我们要想对一个成像系统建模,进而进行相应的计算,所必须的参数就是相机的内参矩阵:
另外,相机拍摄的图片还存在一定的畸变,畸变包括桶形畸变和枕形畸变。对于畸变原理还不太明白的同学需要先查一查学习一下。
畸变模型包括径向畸变和切向畸变。
径向畸变公式(3阶)如下:
切向畸变公式如下:
其中,
相机标定的第二个目的就是获得相机的畸变参数,如上式中的
张正友标定法利用如下图所示的棋盘格标定板,在得到一张标定板的图像之后,可以利用相应的图像检测算法得到每一个角点的像素坐标
张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标
我们将利用这些信息:每一个角点的像素坐标
张正友标定法标定相机的内外参数的思路如下:
1)、求解内参矩阵与外参矩阵的积;
2)、求解内参矩阵;
3)、求解外参矩阵。
将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标
我们对于上式做一定的说明。对于不同的图片,内参矩阵
我们将
利用上式,消去尺度因子
此时,尺度因子
由这里的
我们已知了矩阵
我们利用
则由
代入可得:
另外,我们发现,上述两个约束方程中均存在矩阵
同时,为了简便,我们记相机内参矩阵
则:
则用矩阵
注意:由于
这里,我们可以使用
因此,为了求解矩阵
上述方程看起来有点复杂,但是其实不然,我们可以记:
则上述方程化为:
此时,通过
即:
其中,矩阵
由于矩阵
此时,我们只要求解出向量
根据矩阵
即可求得相机的内参矩阵
这里再次强调一下,对于同一个相机,相机的内参矩阵取决于相机的内部参数,无论标定板和相机的位置关系是怎么样的,相机的内参矩阵不变。这也正是在第2部分“求解内参矩阵”中,我们可以利用不同的图片(标定板和相机位置关系不同)获取的矩阵
但是,外参矩阵反映的是标定板和相机的位置关系。对于不同的图片,标定板和相机的位置关系已经改变,此时每一张图片对应的外参矩阵都是不同的。
在关系:
注意,这里值得指出,完整的外参矩阵为
此时,相机的内参矩阵和外参矩阵均已得到。
张正友标定法仅仅考虑了畸变模型中影响较大的径向畸变。
径向畸变公式(2阶)如下:
其中,
图像坐标和像素坐标的转化关系为:
其中,
同理可得畸变后的像素坐标
代入径向畸变公式(2阶)则有:
可化简得:
即为:
上式中的
则使用最小二乘法可求得:
此时,相机的畸变矫正参数已经标定好。
需要指出,上述公式推导的时候以2阶径向畸变为例,但实际上更高阶的径向畸变同理,只是需要的约束方程个数更多而已。
注:以下部分为个人提出的方法。
在
但是个人思考了一种解决方案。
世界坐标系下的标定板角点的坐标
此时,相机坐标系下的标定板角点坐标
其中,
记
带入
我们将上式重新记为
这里解得的
此时可以直接在像素坐标系下对畸变参数进行矫正。
从上述推导过程就可以看出,张正友标定法是有很多近似的,所以仅仅利用上述的过程进行标定误差肯定是很大的。所以张正友标定法还利用L-M(Levenberg-Marquardt)算法对参数进行了优化。
下一次需要做标定写报告时更新这一部分。
1)、准备一个张正友标定法的棋盘格,棋盘格大小已知,用相机对其进行不同角度的拍摄,得到一组图像;
2)、对图像中的特征点如标定板角点进行检测,得到标定板角点的像素坐标值,根据已知的棋盘格大小和世界坐标系原点,计算得到标定板角点的物理坐标值;
3)、求解内参矩阵与外参矩阵。
根据物理坐标值和像素坐标值的关系,求出
4)、求解畸变参数。
利用
5)、利用L-M(Levenberg-Marquardt)算法对上述参数进行优化。
python基于opencv的源代码:
Calibration_ZhangZhengyou_Method
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。