通过双目深度相机获取三维坐标

双目深度相机的深度测量流程:

 

1、对双目相机进行标定,得到两个相机的内外参数、单应矩阵。

2、根据标定结果对原始图像校正,校正后的两张图像位于同一平面且互相平行。

3、对校正后的两张图像进行像素点匹配。

4、根据匹配结果计算每个像素的深度,从而获得深度图。

双目立体视觉深度相机详细原理

1.理想双目相机成像模型

假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)一致。

深度值的推导原理和公式:

通过双目深度相机获取三维坐标_第1张图片

根据上述推导,空间点P离相机的距离(深度)z=f*b/d,可以发现如果要计算深度z,必须要知道:

1、相机焦距f,左右相机基线b。这些参数可以通过先验信息或者相机标定得到。

2、视差d。需要知道左相机的每个像素点(xl, yl)和右相机中对应点(xr, yr)的对应关系。这是双目视觉的核心问题。

极线约束

那么问题来了,对于左图中的一个像素点,如何确定该点在右图中的位置?是不是需要我们在整个图像中地毯式搜索一个个匹配?

答案是:不需要。因为有极线约束。极线约束对于求解图像对中像素点的对应关系非常重要。

那什么是极线呢?如下图所示。C1,C2是两个相机,P是空间中的一个点,P和两个相机中心点C1、C2形成了三维空间中的一个平面PC1C2,称为极平面(Epipolar plane)。极平面和两幅图像相交于两条直线,这两条直线称为极线(Epipolar line)。P在相机C1中的成像点是P1,在相机C2中的成像点是P2,但是P的位置事先是未知的。

 我们的目标是:对于左图的P1点,寻找它在右图中的对应点P2,这样就能确定P点的空间位置,也就是我们想要的空间物体和相机的距离(深度)。

所谓极线约束(Epipolar Constraint)就是指当同一个空间点在两幅图像上分别成像时,已知左图投影点p1,那么对应右图投影点p2一定在相对于p1的极线上,这样可以极大的缩小匹配范围。

根据极线约束的定义,我们可以在下图中直观的看到P2一定在对极线上,所以我们只需要沿着极线搜索一定可以找到和P1的对应点P2。

通过双目深度相机获取三维坐标_第2张图片

有些场景下两个相机需要独立固定,很难保证光心C1,C2完全水平,即使是固定在同一个基板上也会因为装配的原因导致光心不完全水平。如下图所示。我们看到两个相机的极线不仅不平行,还不共面。

通过双目深度相机获取三维坐标_第3张图片

如下所示。左图中三个十字标志的点,在右图中对应的极线是右图中的三条白色直线,也就是对应的搜索区域。我们看到这三条直线并不是水平的,如果进行逐点搜索效率非常低。

通过双目深度相机获取三维坐标_第4张图片

图像矫正技术

图像矫正是通过分别对两张图片用单应(homography)矩阵变换(可以通过标定获得)得到的,的目的就是把两个不同方向的图像平面(下图中灰色平面)重新投影到同一个平面且光轴互相平行(下图中黄色平面),这样就可以用前面理想情况下的模型了,两个相机的极线也变成水平的了。

1、实际上要保证两个相机完全共面且参数一致是非常困难的,而且计算过程中也会产生误差累积,因此对于左图的一个点,其在右图的对应点不一定恰好在极线上。但是应该是在极线附近,所以搜索范围需要适当放宽。

2、单个像素点进行比较鲁棒性很差,很容易受到光照变化和视角不同的影响

基于滑动窗口的图像匹配

上述问题的解决方法:使用滑动窗口来进行匹配。如下图所示。对于左图中的一个像素点(左图中红色方框中心),在右图中从左到右用一个同尺寸滑动窗口内的像素和它计算相似程度,相似度的度量有很多种方法,比如 误差平方和法(Sum of Squared Differences,简称SSD),左右图中两个窗口越相似,SSD越小。下图中下方的SSD曲线显示了计算结果,SSD值最小的位置对应的像素点就是最佳的匹配结果。

通过双目深度相机获取三维坐标_第5张图片

滑动窗口匹配原理示意图

具体操作中还有很多实际问题,比如滑动窗口尺寸。滑动窗口的大小选取还是很有讲究的。下图显示了不同尺寸的滑动窗口对深度图计算结果的影响。从图中我们也不难发现:

小尺寸的窗口:精度更高、细节更丰富;但是对噪声特别敏感

大尺寸的窗口:精度不高、细节不够;但是对噪声比较鲁棒

通过双目深度相机获取三维坐标_第6张图片

不同尺寸的滑动窗口对深度图计算结果的影响

虽然基于滑动窗口的匹配方法可以计算得到深度图,但是这种方法匹配效果并不好,而且由于要逐点进行滑动窗口匹配,计算效率也很低。

5

基于能量优化的图像匹配

目前比较主流的方法都是基于能量优化的方法来实现匹配的。能量优化通常会先定义一个能量函数。比如对于两张图中像素点的匹配问题来说,我们定义的能量函数如下图公式1。我们的目的是:

1、在左图中所有的像素点和右图中对应的像素点越近似越好,反映在图像里就是灰度值越接近越好,也就是下图公式2的描述。

2、在 同一张图片里,两个相邻的像素点视差(深度值)也应该相近。也就是下图公式3的描述。

通过双目深度相机获取三维坐标_第7张图片

能量函数

上述公式1代表的能量函数就是著名的马尔科夫随机场(Markov Random Field)模型。通过对能量函数最小化,我们最后得到了一个最佳的匹配结果。有了左右图的每个像素的匹配结果,根据前面的深度计算公式就可以得到每个像素点的深度值,最终得到一幅深度图。

你可能感兴趣的:(计算机视觉,opencv,图像处理)