立体视觉主要研究如何借助(多图像)成像技术从(多幅)图像里面获取场景中物体的距离(深度)信息。
在OpenCV中,f的量纲是像素点,T的量纲由定标板棋盘格的实际尺寸和用户输入值确定,一般是以毫米为单位(当然为了精度提高也可以设置为0.1毫米量级),d=xl-xr的量纲也是像素点。因此分子分母约去,Z的量纲与T相同。
如下图:假设目标点在左视图中的坐标为(x,y),在左右视图上形成的视差为d,目标点在以左摄像头光心为原点的世界坐标系中的坐标为(X,Y,Z),则存在上图所示的变换矩阵Q,使得 Q*[x y d 1]’ = [X Y Z W]’
为了精确地求得某个点在三维空间里的距离Z,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。其中f, Tx, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx, cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)。从而最终完成求一个点三维坐标所需要的准备工作。在清楚了上述原理之后,我们也就知道了,所有的这几步:标定、校准和匹配,都是围绕着如何更精确地获得f, d, Tx, cx和cy而设计的
双目摄像头定标不仅要得出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的三维平移 t 和旋转 R 参数)。
双目矫正
双目校正的作用就是要把消除畸变后的两幅图像严格地行对应,使得两幅图像的对极线恰好在同一水平线上,这样一幅图像上任意一点与其在另一幅图像上的对应点就必然具有相同的行号,只需在该行进行一维搜索即可匹配到对应点。
对极几何
极面——观测点P与两个投影中心Ol和Or确定的面
极点——投影中心的连线与两个投影面的交点
每个摄像机都有一个独立的投影中心,分别为(Ol和Or)以及相应的投影平面∏l和∏r。物理世界的点P在每个投影面上的投影点,极为Pl和Pr。新的感兴趣点叫做极点,像平面∏l(或者∏r)上的一个极点el(或者er)被定位成另一台摄像机Or(对应的,Ol)的投影中心的成像点)。有实际点P和两个极点el和er(或者投影中心Or和Ol)确定的平面叫极面。线plel和prer(投影点与对应极点之间的连线)称为极线。
以上了解了对极几何以后,可以利用其性质来使用如下规则到立体视觉中:
1)
2)
3)
4)
本征矩阵和基础矩阵
在开始对极变换之前,还需要知道本征矩阵E和基础矩阵F。本征矩阵E包含在物理空间中两个摄像机相关的旋转和平移信息如下:
立体成像的几何本质是通过本征矩阵E得到的,它包含了关于平移T和旋转R的所有信息,它们描述了一台摄像机相对另一台摄像机在全局坐标系中的相对位置,现在假设对于给定的点P,要推导点P在两个成像仪的观测位置Pl和Pr之间的关系,该关系将最终转变为本征矩阵的定义。从考虑pl和pr的关系开始,pl和pr是在两个摄像机坐标系中观察到的点的物理坐标。利用对极几何,可以将它们联系:
1)
2)
3)
4)
总是可以将叉积写成矩阵相乘的形式,于是定义矩阵S为:
5)
此时可以看到,RS就是我们定义的本征矩阵E,简写为:
6)
prT E pl=0
(ps:本征矩阵是单几何意义上的,与成像仪无关,它将左摄像机观测到的点P的物理坐标与右摄像机观测到的相同点的位置关联起来(如将pl和pr关联),从上面的式子看好像我们已知其他项就完全可确定p,但是E是一个秩亏矩阵(rank=2<3),因此方程实际上有无穷解。本征矩阵中有五个参数——三个旋转参数和两个平移参数(无缩放),以及a.行列式值为0,b.l两个非零奇异值相等的约束,因为S是反对称矩阵,R是旋转矩阵。)
1) 用p(像素坐标)来代替q,二者通过摄像机内参数矩阵相关联。已知q=Mp(M是摄像机内参数矩阵)或等价的p=M-1q,因此关于E的等式就变成:
2)由基础矩阵的假设,可以知道:
因此:
表面上,除了基础F操作的是图像像素坐标而E操作的是物理坐标之外,基础矩阵F与本征矩阵E没有什么差别。与E相同,基础矩阵F的秩也是2,基础矩阵F有7个参数,其中两个参数表示对极,三个参数表示两个像平面的单应矩阵(通常的4个参数中没有比例因素)。