2016-01-24 1063 views
2

我是一個完整的初學者,我試圖從左側和右側圖像獲取真正的深度圖。我已經使用OpenCV通過塊匹配獲取視差圖,如下面的代碼所示。Python:如何從視差圖中獲得真實深度

import cv2 
import cv2.cv as cv 
import sys 
import numpy as np 

def getDisparity(imgLeft, imgRight, method="BM"): 

gray_left = cv2.cvtColor(imgLeft, cv.CV_BGR2GRAY) 
gray_right = cv2.cvtColor(imgRight, cv.CV_BGR2GRAY) 
print gray_left.shape 
c, r = gray_left.shape 
if method == "BM": 
    sbm = cv.CreateStereoBMState() 
    disparity = cv.CreateMat(c, r, cv.CV_32F) 
    sbm.SADWindowSize = 11 
    sbm.preFilterType = 1 
    sbm.preFilterSize = 5 
    sbm.preFilterCap = 61 
    sbm.minDisparity = -50 
    sbm.numberOfDisparities = 112 
    sbm.textureThreshold = 507 
    sbm.uniquenessRatio= 0 
    sbm.speckleRange = 8 
    sbm.speckleWindowSize = 0 

    gray_left = cv.fromarray(gray_left) 
    gray_right = cv.fromarray(gray_right) 

    cv.FindStereoCorrespondenceBM(gray_left, gray_right, disparity, sbm) 
    disparity_visual = cv.CreateMat(c, r, cv.CV_8U) 
    cv.Normalize(disparity, disparity_visual, 0, 255, cv.CV_MINMAX) 
    disparity_visual = np.array(disparity_visual) 

elif method == "SGBM": 
    sbm = cv2.StereoSGBM() 
    sbm.SADWindowSize = 9; 
    sbm.numberOfDisparities = 0; 
    sbm.preFilterCap = 63; 
    sbm.minDisparity = -21; 
    sbm.uniquenessRatio = 7; 
    sbm.speckleWindowSize = 0; 
    sbm.speckleRange = 8; 
    sbm.disp12MaxDiff = 1; 
    sbm.fullDP = False; 

    disparity = sbm.compute(gray_left, gray_right) 
    disparity_visual = cv2.normalize(disparity, alpha=0, beta=255, norm_type=cv2.cv.CV_MINMAX, dtype=cv2.cv.CV_8U) 

return disparity_visual 

imgLeft = cv2.imread('1.png') 
imgRight = cv2.imread('2.png') 
try: 
    method = "BM" 
except IndexError: 
    method = "BM" 

disparity = getDisparity(imgLeft, imgRight, method) 
cv2.imshow("disparity", disparity) 
#cv2.imshow("left", imgLeft) 
#cv2.imshow("right", imgRight) 
cv2.waitKey(0) 

我的問題是什麼是最簡單的方法來獲得真正的深度圖(距離)不同使用python?

回答

2

爲了計算立體聲的深度,您需要知道相機之間的平移和旋轉。如果您有這一點,您可以獲取每個視差值並使用三角測量法計算該3D點的深度。

我推薦閱讀http://www.robots.ox.ac.uk/~vgg/hzbook/ 的詳細解釋。

0

假設你的相機標定,圖像糾正,您可以使用this tutorial提供的公式是:

disparity = Baseline * focal-lens/depth 

所以,

depth = Baseline * focal-lens/disparity