计算机视觉:摄像机标定(循序渐进理解到应用)

在开始阅读前,我们首先要知道我们为什么要进行相机标定?开始需要输入什么?最后需要得到什么?
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。

相机标定的输入:标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下假定图像位于Z=0平面上)。

相机标定的输出:摄像机的内参、外参系数。

请在阅读全文的时候一定要记住这三点,否则会陷入零碎,而忘记“ 初心 ”,哈哈哈,言重了。

一、前言

最近在做零件的尺寸测量,由于精度要求,所以需要用到相机标定来消除畸变误差。网上查找了很多资料,看了好多数学公式理论的推导,看完也是有点虚,看的似懂非懂的。由于我是工科生,也没去深究太多的原理,对自己的要求是会使用,知道能达到什么要求即可。所以,我就按照自己的理解,尽量简单易懂一点,也便于以后的应用。如有不足或者错误之处请指出,还请指出。

二、摄像机模型

这部分是介绍相机模型的,比较劝退,我们后续用到的模型是针孔摄像机,因此大家知道针孔摄像机成像原理就行。

针孔摄像机成像原理示意图:
针孔摄像机成像原理示意图

为了标定摄像机,我们有必要建立一个模型,该模型由摄像机、镜头和图像采集卡组成,这个模型可以将世界坐标系中三维空间点投影到二维图像中。再机器视觉应用中常用的有两种不同类型的镜头:普通镜头和远心镜头。使用普通镜头时,世界坐标系到图像坐标系的投影为透视投影。我们将摄像机与普通镜头的组合称为真空摄像机模型。远心镜头实现世界坐标系到图像坐标系的平行投影。我们称摄像机与远心镜头的组合为远心摄像机模型。

另外,还需要考虑两种不同的图像传感器:线阵图像传感器和面阵图像传感器。

三、投影几何

为什么要讲投影几何呢?

我们知道我们拍摄的物体在我们现实空间中是三维物体,用mm、cm、m等长度单位衡量,经过相机获取后变成了二维图像,我们利用函数对图像处理的时候就已经知道,图片的衡量单位变成了像素。因此我们要想得到现实空间下物体某个点对应图像中的哪个点,就需要建立一系列坐标系来建立它们之间的联系(莫嫌弃我啰嗦…)

我们都需要什么坐标系呢?

图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。例如下图:
在这里插入图片描述
构建世界坐标系只是为了更好的描述相机的位置在哪里,在双目视觉中一般将世界坐标系原点定在左相机或者右相机或者二者X轴方向的中点。
接下来的重点,就是关于这几个坐标系的转换。也就是说,一个现实中的物体是如何在图像中成像的。

3.1 图像坐标系与像素坐标系

像素坐标系 o-u-v图像坐标系 o-x-y 都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,也叫中心,通常情况下是成像平面的中点或者叫principal point。图像坐标系的单位是mm,属于物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这二者之间的转换如下:其中dx和dy表示每一列和每一行分别代表多少mm,即1pixel=dx mm
在这里插入图片描述
图像坐标系为什么这么建立后面会有解释 。

3.2 相机坐标系与图像坐标系

相机坐标系图像坐标系,属于透视投影关系,从3D转换到2D。相机坐标系相当于以小孔为原点建立的3D坐标系 Oc-Xc-Yc-Zc

由上方小孔成像图我们可以看出光线通过小孔在图像平面变成的图像是倒立的,这也可以知道我们上方的图像坐标系为什么那么建立了。然而我们现在要建立物体和图像的关系,这样看实在不方便,因此我们将图像平面等效变换到针孔平面前方,如下图:
在这里插入图片描述
这样小孔可以理解为光线汇聚点,称作投影中心。投影平面由倒立变成了正立了。

好,接下来我们就暴力求解图像坐标系 o-x-y相机坐标系 Oc-Xc-Yc-Zc 的坐标关系吧。如图:
在这里插入图片描述
P(Xc, Yc, Zc)是相机坐标系中的点,p(x, y)是图像坐标系中的点,f是焦距。

补充: 其实上面的式子没有计算一些偏差。什么偏差呢?我们也许认为主点即等于成像仪的中心,但这意味着某些人拿着镊子和胶水要把摄像机里面的成像仪以及微米级别的精度安装。实际上,芯片中心通常不在光轴上。我们因此引入两个新的参数 cx 和 cy 。对可能的偏移(对光轴而言)进行建模。这样物理世界中的点P, 其坐标一某些便宜的方式投影点为:
在这里插入图片描述
至于式子中焦距为何是fx 和 fy 我也不清楚。下面是网上的一种解释。
在这里插入图片描述

3.3 世界坐标系与相机坐标系

世界坐标系 Ow-Xw-Yw-Zw 是我们自己建立的,也就是根据我们输入现实空间中点的坐标来确定世界坐标系的。因此这个坐标系并不是固定的,它可以旋转、平移,但是正交的效果肯定是不变的,因此不会发生切变。那我们要得到世界坐标系与相机坐标系之间的关系就要知道旋转和平移的知识了。
学过线性代数的同学可能知道,一个向量乘以一个矩阵可以达到旋转的效果,那么加一个向量可以达到平移的效果
在这里插入图片描述
于是,从世界坐标系到相机坐标系,涉及到旋转和平移(其实所有的运动也可以用旋转矩阵和平移向量来描述)。绕着不同的坐标轴旋转不同的角度,得到相应的旋转矩阵,如下图所示:
在这里插入图片描述
那么从世界坐标系到相机坐标系的转换关系如下所示:
在这里插入图片描述
那么通过上面四个坐标系的转换就可以得到一个点从世界坐标系如何转换到像素坐标系的。
在这里插入图片描述

对于上方的矩阵计算中,我们可能会好奇为什么2D会扩展到3D,且第三维的值为1,这篇博文中有很好的解释齐次方程的通俗解释

四、透镜畸变

理论上讲是可能定义一种透镜而不引入任何畸变的。然而由于制造上的原因,制作一个 " 球形 " 透镜比制作一个数学上理想透镜更容易。而且从机械方面也很难把透镜和成像仪保持平行。这里我们主要描述两种主要的透镜即便并且为它们建模。径向畸变来自于透镜形状因为弯曲的透镜能更好的透过光线),而切向畸变则来自于整个摄像机的组装过程

径向畸变:实际相机的透镜总是在成像仪的边缘产生显著畸变。对于某些透镜中心的地方比靠近中心的地方更加弯曲
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
径向畸变的矫正公式如下(这里不给出推导过程,直接使用)
在这里插入图片描述
式中,(x,y)是理想的无畸变的坐标(图像坐标系),(xdr,ydr)是畸变后图像像素点的坐标,而且,
在这里插入图片描述

切向畸变:切向畸变可以这样理解,当透镜与成像平面不平行时,就产生了畸变,类似于透视变换。打个比方的例子。
在这里插入图片描述
切向畸变的矫正公式如下(这里不给出推导过程,直接使用)
在这里插入图片描述

畸变矫正
因此我们只要求出畸变矩阵,然后进行逆操作就可以消除畸变了。通过上面介绍的径向畸变和切向畸变模型,可以得到两个模型最终作用于真实图像后的矫正模型。
在这里插入图片描述
为什么是相加呢,可以这样理解,畸变就是距离的变化,而距离的变化反映到坐标值上就是加减的关系。

五、相机参数标定到底怎么用?

当求解出了相机的内参和外参后,那么如何使用这些参数呢?下面做一个大致的说明。

上面的理论部分是通用的,但是,在实际的应用过程中,却有区别。比如说,在我的项目经验中,有用到单目视觉的情况,也有用到双目视觉的情况。

对于单目视觉而言,实际上我们是没有必要知道世界坐标系的,因为,我们没必要去探究到底我这一个相机处于世界坐标坐标系的什么位置。据我了解,如果采用单目视觉的立体图像匹配,或者空间位置定位,应该需要用到空间位置信息。那么,在通常的单目视觉应用中,求得内参和畸变参数后,就可以对新拍摄的图像做变换和矫正。矫正完拍摄的图像之后,就可以对图像做其他处理了。

对于双目视觉而言,需要用到世界坐标系。对单目视觉做完内参和畸变参数的矫正之后,就可以用这些变换后的图像,同时结合世界坐标系实现定位或者其他用途了。

算法原理:
张正友相机标定算法解读
最详细、最完整的相机标定讲解

补充:我们将会在后续文章中介绍张正友相机标定Opencv实现以及标定流程

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值