双目立体视觉基础

第一章:理解双目的三个坐标系
理解相机的坐标系(这是一切的基础,非常重要):
双目立体视觉基础_第1张图片

世界坐标系(XW,YW,ZW):目标物体位置的参考系。除了无穷远,世界坐标可以根据运算方便与否自由放置,单位为长度单位如mm。。在双目视觉中世界坐标系主要有三个用途:

1、标定时确定标定物的位置;

2、作为双目视觉的系统参考系,给出两个摄像机相对世界坐标系的关系,从而求出相机之间的相对关系;

3、作为重建得到三维坐标的容器,存放重建后的物体的三维坐标。世界坐标系是将看见中物体纳入运算的第一站。

摄像机坐标系(XC,YC,ZC):摄像机站在自己角度上衡量的物体的坐标系。摄像机坐标系的原点在摄像机的光心上,z轴与摄像机光轴平行。它是与拍摄物体发生联系的桥头堡,世界坐标系下的物体需先经历刚体变化转到摄像机坐标系,然后在和图像坐标系发生关系。它是图像坐标与世界坐标之间发生关系的纽带,沟通了世界上最远的距离。单位为长度单位如mm。

图像坐标系(x,y):以CCD 图像(我们相机拍到的图就叫做CCD平面)平面的中心为坐标原点,为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。

像素坐标系(u,v) :以 CCD 图像平面的左上角顶点为原点,为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系。像素坐标系就是以像素为单位的图像坐标系。

如何表示三个坐标系?
1、图像坐标系到像素坐标系
讲到这里,你可能会问有了图像坐标系为什么还要建一个像素坐标系?
我们以图像左上角为原点建立以像素为单位的直接坐标系u-v。像素的横坐标u与纵坐标v分别是在其图像数组中所在的列数与所在行数。
双目立体视觉基础_第2张图片

由于(u,v)只代表像素的列数与行数,而像素在图像中的位置并没有用物理单位表示出来,所以,我们还要建立以物理单位(如毫米)表示的图像坐标系x-y。将相机光轴与图像平面的交点(一般位于图像平面的中心处,也称为图像的主点(principal point)定义为该坐标系的原点O1,且x轴与u轴平行,y轴与v轴平行,假设(u0,v0)代表O1在u-v坐标系下的坐标,dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,则图像中的每个像素在u-v坐标系中的坐标和在x-y图像坐标系中的坐标之间都存在如下的关系:
双目立体视觉基础_第3张图片

其中,我们假设物理坐标系中的单位为毫米,那么dx的的单位为:毫米/像素。那么x/dx的单位就是像素了,即和u的单位一样都是像素。为了使用方便,可将上式用齐次坐标与矩阵形式表示为:
双目立体视觉基础_第4张图片

为了让你更直接的理解这一块内容,我们举个例子。由于被摄像机摄物体的图像经过镜头投影到CCD芯片上(像平面),我们设CCD的大小为8x6mm,而拍摄到的图像大小为640x480,则dx=1/80mm/像素,dy=1/80mm/像素,u0=320,v0=240。
上面的矩阵公式运用了齐次坐标,初学者可能会感到有些迷惑。大家会问:怎样将普通坐标转换为齐次坐标呢?齐次坐标能带来什么好处呢?
这里对齐次坐标做一个通俗的解释。此处只讲怎么将普通坐标改写为齐次坐标及为什么引入齐次坐标。这里只做一个通俗但不太严谨的表述。力求简单明了。针对齐次坐标的严谨的纯数学推导,可参见“周兴和版的《高等几何》—1.3拓广平面上的齐次坐标”。玉米曾详细读过《高等几何》这本书,但觉得离计算机视觉有点远,是讲纯数学的投影关系的,较为生涩难懂。
齐次坐标可以理解为在原有坐标后面加一个“小尾巴”。将普通坐标转换为齐次坐标,通常就是在增加一个维度,这个维度上的数值为1。如图像坐标系(u,v)转换为(u,v,1)一样。对于无穷远点,小尾巴为0。注意,给零向量增加小尾巴,数学上无意义。
那么,为什么计算机视觉在坐标运算时要加上这个“小尾巴”呢?
1、 将投影平面扩展到无穷远点。如对消隐点(vanishing point)的描述。
2、 使得计算更加规整
如果用普通坐标来表达的话,会是下面的样子:
在这里插入图片描述

这样的运算形式会给后与运算带来一定的麻烦,所以齐次坐标是一个更好的选择。
齐次坐标还有一个重要的性质,伸缩不变性。即:设齐次坐标M,则αM=M。

我们介绍过了像素坐标系之后,我们再次三大坐标系的问题上。我们想知道这三个坐标系有什么样的关系,我们先从下图说起:
双目立体视觉基础_第5张图片

图中显示,世界坐标系通过刚体变换到达摄像机坐标系,然后摄像机坐标系通过透视投影变换到达图像坐标系。可以看出,世界坐标与图像坐标的关系建立在刚体变换和透视投影变换的基础上。

2、世界坐标系到摄像机坐标系
首先,让我们来看一下刚体变换是如何将世界坐标系与图像坐标系联系起来的吧。这里,先对刚体变换做一个介绍:
刚体变换(regidbody motion):三维空间中, 当物体不发生形变时,对一个几何物体作旋转, 平移的运动,称之为刚体变换。
因为世界坐标系和摄像机坐标都是右手坐标系,所以其不会发生形变。我们想把世界坐标系下的坐标转换到摄像机坐标下的坐标,如下图所示,可以通过刚体变换的方式。空间中一个坐标系,总可以通过刚体变换转换到另外一个个坐标系的。
双目立体视觉基础_第6张图片

下面看一下,二者之间刚体变换的数学表达
双目立体视觉基础_第7张图片

对应的齐次表达式为:
双目立体视觉基础_第8张图片

其中,R是3×3的正交单位矩阵(即旋转矩阵),t为平移向量,R、T与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsic parameter),可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。
我们假定在世界坐标系中物点所在平面过世界坐标系原点且与Zw轴垂(也即棋盘平面与Xw-Yw平面重合,目的在于方便后续计算),则Zw=0。

3、摄像机坐标系到图像坐标系
首先,让我们来看一下透视投影是如何将图像坐标系与图像坐标系联系起来的吧。这里,先对透视投影做一个介绍:
透视投影(perspective projection): 用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。有一点像皮影戏。它符合人们心理习惯,即离视点近的物体大,离视点远的物体小,不平行于成像平面的平行线会相交于消隐点(vanish point)
这里我们还是拿针孔成像来说明(除了成像亮度低外,成像效果和透视投影是一样的,但是光路更简单)
下图是针孔-摄像机的基本模型。平面π称为摄像机的像平面,点Oc称为摄像机中心(或光心),f成为摄像机的焦距,Oc为端点且垂直于像平面的射线成为光轴或主轴,主轴与像平面的交点p是摄像机的主点。
双目立体视觉基础_第9张图片

如图所示,图像坐标系为o-xy,摄像机坐标系为Ox-xcyczc。记空间点Xc摄像机坐标系中的齐次坐标为:
在这里插入图片描述

它的像点m在图像坐标系中的齐次坐标记为:
在这里插入图片描述

根据三角形相似原理,可得:
在这里插入图片描述

我们使用矩阵表示为:
双目立体视觉基础_第10张图片

注意由于齐次坐标的伸缩不变性,zc[x,y,1]T和(x,y,1)T表示的是同一点。

4、总结
我们已经介绍了各个坐标系之间的转换过程,但是我们想知道的是如何从世界坐标系转换到像素坐标系,因此我们需要把上面介绍到的联系起来:
将三者相乘,可以把这三个过程和在一起,写成一个矩阵:
双目立体视觉基础_第11张图片

我们取世界坐标到图像坐标变换矩阵P如下
双目立体视觉基础_第12张图片

P就表示了一个投影相机,有下面公式:
其中:
在这里插入图片描述

我们设:
在这里插入图片描述

最后用一幅图来总结从世界坐标系到像素坐标系(不考虑畸变)的转换关系:

双目立体视觉基础_第13张图片

第二章:双目标定

为什么要进行标定:
相机标定的目的有两个。
第一,要还原摄像头成像的物体在真实世界的位置就需要知道世界中的物体到计算机图像平面是如何变换的,相机标定的目的之一就是为了搞清楚这种变换关系,求解内外参数矩阵。
第二,摄像机的透视投影有个很大的问题——畸变。摄像头标定的另一个目的就是求解畸变系数,然后用于图像矫正。

我们在摄像机坐标系到图像坐标系变换时谈到透视投影。摄像机拍照时通过透镜把实物投影到像平面上,但是透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。因此我们需要考虑成像畸变的问题。
透镜的畸变主要分为径向畸变和切向畸变,还有薄透镜畸变等等,但都没有径向和切向畸变影响显著,所以我们在这里只考虑径向和切向畸变。

径向畸变
顾名思义,径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通廉价的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。以下分别是枕形和桶形畸变示意图:
双目立体视觉基础_第14张图片

它们在真实照片中是这样的:
双目立体视觉基础_第15张图片

像平面中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重(这就是拍摄标定板的时候一定要把边上拍清楚)。畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述,成像仪上某点根据其在径向方向上的分布位置,调节公式为:
双目立体视觉基础_第16张图片

式里(x0,y0)是畸变点在像平面的原始位置,(x,y)是畸变较正后新的位置,下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,可以看到,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。
双目立体视觉基础_第17张图片

切向畸变
切向畸变是由于透镜本身与相机传感器平面(像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。畸变模型可以用两个额外的参数p1和p2来描述:
在这里插入图片描述

下图显示某个透镜的切向畸变示意图,大体上畸变位移相对于左下——右上角的连线是对称的,说明该镜头在垂直于该方向上有一个旋转角度。

双目立体视觉基础_第18张图片

径向畸变和切向畸变模型中一共有5个畸变参数,在Opencv中他们被排列成一个5*1的矩阵,依次包含k1、k2、p1、p2、k3,经常被定义为Mat矩阵的形式,如Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));这5个参数就是相机标定中需要确定的相机的5个畸变系数。求得这5个参数后,就可以校正由于镜头畸变引起的图像的变形失真,下图显示根据镜头畸变系数校正后的效果:
双目立体视觉基础_第19张图片

张氏标定法
相机标定的目的就是建立摄像机图像像素位置与物体空间位置之间的关系,即世界坐标系与图像坐标系之间的关系。方法就是根据摄像机模型,由已知特征点的坐标求解摄像机的模型参数,从而可以从图像出发恢复出空间点三维坐标,即三维重建。所以要求解的参数包括4个内参数和5个畸变参数,还有外部参数旋转矩阵和平移矩阵。
“张氏标定”是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法。张氏标定法已经作为工具箱或封装好的函数被广泛应用。张氏标定的原文为“A Flexible New Technique forCamera Calibration”。此文中所提到的方法,为相机标定提供了很大便利,并且具有很高的精度。从此标定可以不需要特殊的标定物,只需要一张打印出来的棋盘格。
上文中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系,我们假设标定棋盘位于世界坐标中zw=0平面,则化简前文中的公式:
双目立体视觉基础_第20张图片

其中,u,v表示像素坐标系中的坐标,fx=f/dx,fy=f/dy,u0,x0,γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小,如果按上文中矩阵运算得到的值即为0)表示5个相机内参,R,t示相机外参,xw,yw,zw 表示世界坐标系中的坐标。
fx,fy和物理焦距f之间的关系为:fx=fsx和fy=fsy。其中sx=1/dx表示x方向上的1毫米长度所代表像素值,即像素/单位毫米,fx,fy是在相机标定中整体计算的,而不是通过该公式计算的。
单应性(在计算机视觉中被定义为一个平面到另一个平面的投影映射)矩阵定义为:
双目立体视觉基础_第21张图片

那么现在就有
双目立体视觉基础_第22张图片

我们如果求取H的值?
大家可以分析一下,H是一个三3*3的矩阵,并且有一个元素是作为齐次坐标。因此,H有8个未知量待解。
(xw,yw)作为标定物的空间坐标,可以由设计者人为控制,是已知量。(u,v)是像素坐标,我们可以直接通过摄像机获得。对于一组对应(xw,yw)-(u,v)我们可以获得两组方程。
现在有8个未知量需要求解,所以我们至少需要八个方程。所以需要四个对应点。四点即可算出,图像平面到世界平面的单应性矩阵H。
这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。张氏标定就是利用一张打印的棋盘格,然后对每个角点进行标记其在像素坐标系的像素点坐标,以及在世界坐标系的坐标,张氏标定证明通过4组以上的点就可以求解出H矩阵的值,但是为了减少误差,具有更强的鲁棒性,我们一般会拍摄许多张照片,选取大量的角点进行标定。具体过程如下:
打印一张棋盘格标定图纸,将其贴在平面物体的表面.
拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现。
对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品红色的圆圈内就是一个角点)。我们定义打印的棋盘图纸位于世界坐标系zw=0的平面上,世界坐标系的原点位于棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于图片左上角。
因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到单应性矩阵H。

张正友教授从数学推导上证明了张氏标定算法的可行性。但在实际标定过程中,一般使用最大似然估计进行优化。假设我们拍摄了n张标定图片,每张图片里有m个棋盘格角点。三维空间点Xj(xw,yw,zw)经过相机内参M,外参R,t变换后得到的二维像素为x’(u,v),假设噪声是独立同分布的,我们通过最小化xij(实际值:棋盘格角点在像素坐标系下的实际值), x’(估计值)的位置来求解上述最大似然估计问题:

在这里插入图片描述

现在我们来考虑透镜畸变的影响,由于径向畸变的影响相对较明显,所以主要考虑径向畸变参数,根据经验,通常只考虑径向畸变的前两个参数k1,k2就可以(增加更多的参数会使得模型变的复杂且不稳定)。实际求解中,通常把k1,k2也作为参数加入上述函数一起进行优化,待优化函数如下所示:

极大似然估计是一种估计总体未知参数的方法。它主要用于点估计问题。所谓点估计是指用一个估计量的观测值来估计未知参数的真值。说穿了就一句话:就是在参数空间中选取使得样本取得观测值的概率最大的参数。
这里我没有过多的介绍张氏标定法的数学推导过程,感兴趣的童鞋可以看一下博客最后给出来的链接。
假设我们已经通过LM求得了相机的内参M和外参R,t。那如果获取到图像中二维坐标,如何获取到现实中三维坐标呢?当然单目摄像机无法获取三维坐标,但能反映一定关系。综上来讲,矩阵变换公式为:
根据坐标系之间转化和相机模型,研究了极几何及基本矩阵的知识,证明了基本矩阵是求得摄像机投影矩阵的关键,根据基础矩阵F和摄像机标定阶段获取的内参数矩阵M,计算得到本征矩阵E,通过对E进行奇异值分解求得外参数矩阵R,T,接着求出投影矩阵P1和P2、重投影矩阵Q。OpenCV提供了两个相关的函数stereoCalibrate()和stereoRectify()来帮助我们通过标定参数消除畸变。
在这里插入图片描述

扩展阅读
[1]透镜畸变及校正模型
[2]关于齐次坐标的理解(经典)
[3]【立体视觉】世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的关系
[4](一)图像坐标:我想和世界坐标谈谈(A) 【计算机视觉学习笔记–双目视觉几何框架系列】
[5](二)图像坐标:我想和世界坐标谈谈(B) 【计算机视觉学习笔记–双目视觉的几何框架系列】
[6](三)张正友标定法 【计算机视觉学习笔记–双目视觉几何框架系列】
[7](四)极大似然参数估计 【计算机视觉学习笔记–双目视觉几何架构系列】
[8](五) 畸变矫正—让世界不在扭曲 【计算机视觉学习笔记–双目视觉几何框架系列】
[9](六)张正友标定法小结 【计算机视觉学习笔记–双目视觉几何架构系列】
[10]opencv-张氏标定法(前篇)
[11]opencv-张氏标定法(中篇)
[12]opencv-张氏标定法(后篇)
[13]【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
[14]双目视觉标定程序讲解
[15]单目相机标定原理
[16]单目视觉标定原理
[17]双摄像头立体成像(一)-成像原理
[18]双摄像头立体成像(二)-摄像头标定
[19]双摄像头立体成像(三)-畸变矫正与立体校正
[20]initUndistortRectifyMap
[21]OpenCV代码提取:remap函数的实现

你可能感兴趣的:(计算机视觉,机器学习,人工智能,slam)