理想的双目相机成像示意图如下,两个相机的基线距离为B。对于空间点P(x,y,z),其在左相机坐标系中的坐标为(x_c,y_c,z_c ),在左图像坐标系中的坐标(u_l,v_l )。由于理想情况两相机在同一平面上,故其在右相机坐标系下的坐标为(x_c-B,y_c,z_c ),在右图像坐标系下的坐标为(u_r,v_r )。P点在左图像坐标系和右图像坐标系U方向的偏差u_l-u_r,即为视差Disparity。
结合相机小孔成像模型{u=f ∙ x_c/z_c, v=f ∙ y_c/z_c},其中(x_c,y_c,z_c )和(u,v)分别为某点相机坐标系和图像坐标系下的坐标值,f为相机的等效焦距。可以得到上述双目相机成像模型中P点在左右图像坐标系下的坐标关系{u_l=f ∙ x_c/z_c, u_r=f ∙ ((x_c-B))/z_c, v_l=v_r=f ∙ y_c/z_c},结合视差值Disparity=u_l-u_r,可以得到左图像坐标系上的坐标点在左相机坐标系下的三维坐标{x_c=(B ∙ u_l)/Disparity, y_c=(B ∙ v_l)/Disparity, z_c=(B ∙ f)/Disparity}。
1)双目相机标定;
2)根据标定参数对双目图像进行极线对齐;
3)对应极线对齐的双目图像进行使用立体匹配算法得到视差图;
4)根据视差图,得到2D图像平面到3D场景的投影。
双目相机的标定将在其他文章中介绍,2D图像平面到3D场景的投影关系在前述的成像原理中已经体现,因此后文主要对极线对齐校正和立体匹配技术进行介绍。
双目匹配中,极线对齐的目的是使得两个相机的光轴完全平行,以满足同一目标点在左右图像的同一行上,减少立体匹配的运算量。其具体步骤如下:
(1)计算左右图像校正矩阵
通常采用Bouguet方法得到左右相机的行对准校正矩阵。
(2)计算左右图的校正查找映射表
根据相机的内参矩阵、畸变参数以及上一步得到的图像校正矩阵和重投影矩阵(也可为相机的内参矩阵)计算得到校正查找映射表。
(3)校正图像对为行对准
查找校正映射表,通过双线性插值法,完成图像的行对准校正。双线性插值原理及公式如下:
对于同一双目相机,步骤1和2在标定时计算得到,每次图像对较正时仅进行第3步操作即可。
立体匹配是双目中最关键的技术,根据生成视差图为稀疏视差图还是稠密视差图,立体匹配大致分为两大类:基于特征的匹配和基于区域的匹配。基于特征的匹配主要提取图像特征点进行匹配,例如边缘、轮廓、直线、角点等;基于区域的匹配对整幅图像进行匹配,目前深度相机中使用的多为此类方法。
基于区域的立体匹配方法主要分为三大类:全局匹配、局部匹配、半全局匹配。
全局匹配将匹配关系用一个能量函数表示,为E(d)= E_data (d)+ E_smooth (d)。能量函数由匹配代价E_data (d)和平滑代价E_smooth (d)组成,然后使用不同的优化算法来迭代地得到视差图。主要有置信度传播算法 (BP)、图割算法(GC)、动态规划算法(DP)以及各种衍生方法。
局部匹配算法又称基于窗口的方法,为每个像素计算一个大小、形状和权重适合的支撑区域,然后将支撑区域中的视差值加权平均。该类方法主要有固定窗口法、自适应支持窗算法、自适应权值算法、多窗口算法。比较经典的有SAD(Sum of absolute differences)方法、Adaptive Support-Weight方法、GF(Guided filter)方法等。
半全局匹配方法是一种结合全局匹配和局部匹配的方案,同时兼顾匹配精度和效率的方案,主要包括SGM(Semi-Global Matching)方法及其变种、NL(Non-Local)等。
立体匹配需要一定的约束:
1、极线约束。这种约束要求空间任何一个物点在两幅图像上的投影都在其相应的极线上,这样在另一幅图像上搜索匹配点时,搜索范围可以被限制在只在极线上,把二维的搜索变成了一维的搜索,并且提高了匹配的精度,简化了算法的复杂度和程序的运行时间。
2、唯一性约束。这种约束要求场景中物点的位置是唯一确定的,因此某一幅图像上的基元只能与另一幅图像中的仅有一个基元相匹配,即两幅图像间的像素点是一一对应的关系。
3、视差连续性约束。这种约束要求由于物体表面不平整引起的变化或由观察者到物体表面的距离变化造成的差异与物体表面到摄像机的距离相比较可以忽略不计,即可以认为一般区域内的像素的视差值的变化应该是平滑的,视差值没有在同一个物体表面出现大的跳跃变化,除了遮挡区域和视差不连续区域外。
4、顺序一致性约束。这种约束要求位于其中某幅图像上一系列匹配点和另一幅图像上其对应的匹配点在极线上的的顺序是相同的。