计算机视觉——计算视差

一、实验原理

1.1 双目视差与深度距离关系推导详解

相机成像的模型如下图所示:
计算机视觉——计算视差

P为空间中的点,P1和P2是点P在左右像平面上的成像点,f是焦距,OR和OT是左右相机的光心。由下图可见左右两个相机的光轴是平行的。XR和XT是两个成像点在左右两个像面上距离图像左边缘的距离。

首先由图可得:
计算机视觉——计算视差
由相似三角形原理:
计算机视觉——计算视差

(1)+(2)有:
计算机视觉——计算视差
其中b1可以用b、XR和XT表示。
计算机视觉——计算视差
最后整理可得:
计算机视觉——计算视差

计算机视觉——计算视差
由上面两幅图,可知距离像面越近的点,它在左右相机中的视差越大,距离像面越远的点,它在左右相机中的视差越小。
深度Z和视差的关系图如下:

计算机视觉——计算视差

1.2 NCC

NCC,顾名思义,就是用于归一化待匹配目标之间的相关程度,注意这里比较的是原始像素。通过在待匹配像素位置p(px,py)构建3*3邻域匹配窗口,与目标像素位置p’(px+d,py)同样构建邻域匹配窗口的方式建立目标函数来对匹配窗口进行度量相关性,注意这里构建相关窗口的前提是两帧图像之间已经校正到水平位置,即光心处于同一水平线上,此时极线是水平的,否则匹配过程只能在倾斜的极线方向上完成,这将消耗更多的计算资源。

当密集地应用在图像中时,归一化的互相关值可以很快地计算出来。我们使用每个像素周围的图像(根本上说,是局部周边图像)来计算归一化的互相关。对于这里的情形,我们可以在像素周围重 新写出公式
计算机视觉——计算视差
归一化将匹配结果限制在 [-1,1]的范围内,可以非常方便得到判断匹配窗口相关程度:

若NCC = -1,则表示两个匹配窗口完全不相关,相反,若NCC = 1时,表示两个匹配窗口相关程度非常高。

1.3 匹配步骤

1.采集图像:通过标定好的双目相机采集图像,当然也可以用两个单目相机来组合成双目相机。(标定方法下次再说)

2.极线校正:校正的目的是使两帧图像极线处于水平方向,或者说是使两帧图像的光心处于同一水平线上。通过校正极线可以方便后续的NCC操作。
实验中用的是已经矫正过的左图片和右图片,所以这里不做过多描述。

3.特征匹配:这里便是我们利用NCC做匹配的步骤啦,匹配方法如上所述,右视图中与左视图待测像素同一水平线上相关性最高的即为最优匹配。完成匹配后,我们需要记录其视差d,即待测像素水平方向xl与匹配像素水平方向xr之间的差值d = xr - xl,最终我们可以得到一个与原始图像尺寸相同的视差图D。

4.深度恢复:通过上述匹配结果得到的视差图D,我们可以很简单的利用相似三角形反推出以左视图为参考系的深度图。

二、实现NCC 视差匹配方法,即给定左右两张视图,根据NCC计算视差图

2.1 使用的图片

计算机视觉——计算视差
计算机视觉——计算视差

2.2 实验结果和分析

对一组图片进行测试
这是预想应要得到的实验结果
计算机视觉——计算视差
窗口 = 3
计算机视觉——计算视差
分析:整体来说对比理想的情况下,相当于大部分都没有体现相应的视差,只有右上角超右下倾斜的栅栏有些许就显露出来。
窗口数 = 5
计算机视觉——计算视差
分析:与窗口 = 3 相比,右上角的视差匹配变得较为清晰,和左下角也逐渐显露,图像中物体的边缘变得逐渐清晰,窗口的增大,包含的数据更多,使得匹配点更加精准,图像更加平滑。
窗口 = 7
计算机视觉——计算视差
分析:与之前一样也是边缘轮廓逐渐变得清晰,右侧边缘的栅栏和窗台逐渐变得清晰一点,但是其他部分好像没有啥其他的变化。
窗口 = 9
计算机视觉——计算视差
分析:可能是由于窗口过大,导致原本右侧清晰的轮廓,消失了一部分。可能是因为窗口变得太大,相邻的两个匹配点的窗口中的值容易出现重叠,减少了匹配的数值,所以轮廓变得不清晰。

小结:窗口越大,包含的数据更丰富,匹配点的数值高,图像较为清晰,但是不是越大越好,当大于一定的数值,噪声点增加更多,导致匹配点的数值不增反减,从而使图像变得不清晰。。wid值越小,稳健性更好,但细节信息更少。有点奇怪的是,这组数据也是网上下的用的样例图片,但是也样例图片理想生成的视差图有较为大的区别,这个问题还没得到解决。

对第二组图片进行测试:
这是理想情况下的视差图:
计算机视觉——计算视差

窗口 = 3
计算机视觉——计算视差
分析:虽然只有窗口为3,但是相比于第一组实验,大部分轮廓的描绘出来,且近距离的台灯和雕像的视差都显示出来而且较为准确,但后面远处的背景变得很一边黑,只有些许的轮廓,无法识别出物体特征,这是因为窗口值过小,收集的数据不不够多,有太多相似点的匹配,在计算视差的时候可能造成匹配到的其他较为相似的点,最后形成误差,造成背景比较黑而且较为模糊的情况。

窗口 = 5
计算机视觉——计算视差
分析:相较于窗口等于三而言,物体的边缘变得逐渐清晰,没有太多类似噪声点的情况,且近距离的雕塑和台灯,也更加清晰,窗口增加,收集的数据增加,匹配点的数值增加,所以变得更加清晰。

窗口 = 7计算机视觉——计算视差
分析:窗口 5和7 相比没有很大程度上的不同,但是也是进行了一定程度上的修补和优化,原因和之前在窗口5分析的一样,因为窗口的增加而导致的。也更加向理想的视差图靠齐。

窗口 = 9
计算机视觉——计算视差
分析:虽然窗口 = 9,使得大部分变得较为清晰,但是在物体和物体交接的边缘区域,反而变得有些模糊,如台灯和后面的桌子相交的地方反而变得模糊起来,匹配的区域像素增大,因此细节较少较多,也就是可能背景的桌子和台灯的像素点因为细节少而被一起匹配,包含进特征匹配算法中,减少了匹配点的数值,整个图像的细节信息也因为这个原因而减少。

三、总结

NCC算法优点:
双目立体视觉对环境光照非常敏感,拍摄的两张图片亮度有差别,曝光程度不同,对计算视差图会有较大影响,而NCC算法很好的解决了这个问题。
NCC算法缺点:
矩形窗口的选用仍然是该方法的缺点,这种方法比较适合于具有平移和小角度旋转关系的图像配准。
窗口值太小会有明显噪声,太大又会失去物体轮廓信息,适中得到的视差图每个物体的轮廓也无法十分清晰,细节较少,且计算量较大,计算效率也不高,耗时较久。