1.理想双目测距
假设:
两部相机绝对理想,不存在畸变且参数一致
左右相机位于同一平面且光轴平行
假设成立的前提下,理想的双目相机模型如下图所示:
在平面XOZ,可以看到对于点P1(x,z),具有三角相似关系:
令两式相等,可得:
式(3)代回式(1),可得:
则:
在平面YOZ,可以看到对于点P2(y,z),具有相似三角形关系:
则:
因此,根据式(4)、式(5)与式(7),要计算深度x、y、z,则需要知道以下参数:
- 由相机标定得来的焦距f以及相机基线b
- 同名点:某个点在左右相机上的对应坐标
2.寻找同名点
相机参数由标定可得,因此算法关键在于寻找同名点,比较暴力的方法是穷举,即将左相机图像特征点与右相机图像特征点一一计算距离,进行地毯式搜索,距离最近的点既为一对。但该方法计算量过大,不切合应用。
事实上,双目相机图像的特征点匹配是存在着“极限约束”的。
如上图所示,P1为左成像点,由于单目尺度的不确定性,其只能出现在PC1与成像面的交点上,则空间点P在右相机上的成像点必然在平面C1PC2与右成像面的交线,即右极线e2上。
因此根据极限约束,只需要沿着极线附近进行搜索即可,匹配搜索范围大大减小。
但是需要注意的是,若两部相机的光轴不平行,则计算机沿着斜极线访问图片像素的效率并不高,因此需要对两部相机进行立体校正,使两部相机的光轴平行,从而使两条极线都在同一直线上,进过校正后,任一左成像点,只需要沿着水平方向的极线进行搜索便能找出右成像点。
完成立体校正后,理论上对于左成像面中的某个点,沿着水平线极线方向进行搜索都能在右成像面上的对应点,但在实际中,由于计算误差、光照变化、视角不同的影响,两点不一定恰好同在极线上。
因此,对于左成像面中的某个像素点,使用一个小窗口将其标定,在右成像面中用同一个尺寸滑动窗口将其根据像素相似度匹配起来。
双目立体匹配的工作原理主要在于根据图片视差来重建三维场景,视差则由同名点来确定,因此,找出视差图便可根据双目测距模型计算距离。
3.单双目标定的意义
在最开始提出的双目模型是基于两个假设提出的,但在实际情况中:
相机是存在畸变的,因此需要进行校正,这一步称为单目相机标定,在这一步中,除了校正畸变外,还需估计焦距、主点等系数。
两部相机的光轴是不平行的,需要知道相对位置关系,这一步称为双目相机标定。
4.双目立体匹配与双目结构光
双目立体匹配是具有缺陷的,当物体表面缺乏纹理或特征点较少时,在立体匹配算法中可能会出现匹配困难,进而影响到视差计算,导致深度估计不准确或失败,解决的办法有许多总,比如使用多种特征描述子,如SIFT、SURF、ORB等,或者使用不同尺度的图像金字塔或图像平滑技术,增加特征点的数量,提高匹配的准确性。
而在双目结构光中,则利用投影仪主动投影添加纹理,例如光栅、条纹、格子等从而解决立体匹配算法中物体表面特征点过少或缺乏纹理的问题,提高立体匹配算法的准确性。