学习为立体图像制作深度地图

立体图像中的深度地图

学习目标
  • 本节我们要学习为立体图像制作深度地图
 
基础知识
  在上一节中我们学习了对极约束的基本概念和相关术语。如果同一场景有两幅图像的话我们在直觉上就可以获得图像的深度信息。下面是的这幅图和其中的数学公式证明我们的直觉是对的。
  在这里插入图片描述
  The above diagram contains equivalent triangles. Writing their equivalent equations will yield us following result:
在这里插入图片描述
  x 和 x’ 分别是图像中的点到 3D 空间中的点和到摄像机中心的距离。B 是这两个摄像机之间的距离,f 是摄像机的焦距。上边的等式告诉我们点的深度与x 和 x’ 的差成反比。所以根据这个等式我们就可以得到图像中所有点的深度图。
  这样就可以找到两幅图像中的匹配点了。前面我们已经知道了对极约束可以使这个操作更快更准。一旦找到了匹配,就可以计算出 disparity 了。让我们看看在OpenCV 中怎样做吧。
  
代码
下面的代码显示了构建深度图的简单过程。

# -*- coding: utf-8 -*-
"""
Created on Tue Jan 28 16:03:03 2014
@author: duan
"""
import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = 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 的值,我们会得到更好的结果。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yyyyyya_/article/details/125906634