相机畸变+张正友标定(含源代码)

希望2022能够自主学习。

本文狠狠的借鉴了:相机标定之张正友标定法数学原理详解(含python源码) - 知乎和最详细、最完整的相机标定讲解_a083614的专栏-CSDN博客_相机的标定,非常感谢,只供自我学习,不做他用。

我们知道了相机是如何成像的之后,要对他进行标定,为什么要进行相机标定呢?比如,当我们拿到一张图片,进行识别之后,得到的两部分之间的距离为多少多少像素,但是这多少多少像素究竟对应实际世界中的多少米呢?这就需要利用相机标定的结果来将像素坐标转换到物理坐标来计算距离(当然这里值得说明,仅仅利用单目相机标定的结果,是无法直接从像素坐标转化到物理坐标的,因为透视投影丢失了一个维度的坐标,所以测距其实需要双目相机)。所以相机标定的第一个目的就是获得相机的内参矩阵和外参矩阵。

相机拍摄的图片还存在一定的畸变,所以先来看一下畸变。

一、畸变

畸变是相机本身的固有特性,和相机内参相同,标定一次之后即可。

1.1径向畸变(桶形畸变和枕形畸变)

径向畸变来自于透镜形状,实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。
如下图,光线在原理透镜中心的地方比靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重。筒形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。

相机畸变+张正友标定(含源代码)_第1张图片

对于径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。
对于径向畸变可以通过下面的泰勒级数展开式进行校正:

相机畸变+张正友标定(含源代码)_第2张图片

这里的x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。

1.2切向畸变(薄透镜畸变和离心畸变)

切向畸变来自于整个摄像机的组装过程,切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的,这种现象发生于成像仪被粘贴在摄像机的时候。

相机畸变+张正友标定(含源代码)_第3张图片

 切向畸变可以通过如下公式来矫正:

其中,(x,y)为理想的无畸变的归一化的图像坐标,(x尖,y尖)是畸变后的归一化图像坐标, 为图像像素点到图像中心点的距离,即r^{2}x^{2}y^{2} 。

相机标定的第二个目的就是获得相机的畸变参数,如上式中的 k1,k2,k3,p1,p2等,进而对拍摄的图片进行去畸变处理。

二、标定方法

张正友标定介绍(张正友标定只考虑了径向畸变,没有考虑切向畸变)

张正友标定法利用如下图所示的棋盘格标定板,在得到一张标定板的图像之后,可以利用相应的图像检测算法得到每一个角点的像素坐标 (u,v) 。

张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标 W=0,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,我们可以计算得到每一个角点在世界坐标系下的物理坐标。

我们将利用这些信息:每一个角点的像素坐标 (u,v) 、每一个角点在世界坐标系下的物理坐标,来进行相机的标定,获得相机的内外参矩阵、畸变参数。

相机标定步骤:

1、打印一张棋盘格,棋盘格大小已知,把它贴在一个平面上,作为标定物。
2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
3、从照片中提取棋盘格角点进行检测,得到标定板角点的像素坐标值,根据已知的棋盘格大小和世界坐标系原点,计算得到标定板角点的物理坐标值;
4、估算理想无畸变的情况下,五个内参和六个外参。
5、应用最小二乘法估算实际存在径向畸变下的畸变系数。
6、极大似然法,优化估计,提升估计精度。

三、源代码

相机标定之张正友标定法数学原理详解(含python源码)的源代码:点这里

执行后可得到相机的内外参数与畸变参数,并对畸变图片做矫正。

相机畸变+张正友标定(含源代码)_第4张图片

畸变:

相机畸变+张正友标定(含源代码)_第5张图片           

输出后:            

相机畸变+张正友标定(含源代码)_第6张图片

 okk这是一个月前写的文,补一点进去,最近疫情,又又被封,啥也没干。

 

你可能感兴趣的:(计算机视觉,opencv,几何学)