基础
在上一节,我们看到了极线约束和其他相关术语。我们也看到了如果我们有同一场景的两张图像,我们可以从直觉的方法从里面获得更多信息。下面是一个图像,和一些数学公式证明这个直觉
上面的图包含等面积三角形,写出他们的等式会得到下面的结果:
x和x'是图像平面里的点对应的场景里的点和摄像机中心的距离。B是两个摄像机之间的距离(我们已知),f是摄像机焦距(已知)。所以,上面的等式说一个点在场景里的深度和对应图像点和他们摄像机中心点的距离差成反比。有了这个信息,我们可以得出图像里所有像素的深度。
所以它在两个图像里找对应的匹配点。我们已经看到了极线约束会让这个运算快捷和准确,当它找到了匹配,它也就找到了视差,让我们看看用OpenCV怎么做
编码
下面的代码片段展示了一个简单的创建视差图的过程。
import numpy as np
import cv2
from matplotlib import pyplot as pltimgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()
下面的图像包含原始图像(左边)和它的视差图(右边)。你可以看到结果被高度噪音污染了。调整numDisparities和blockSize的值,你可以得到更好结果。
END
网友评论