Рассчитать карту несоответствия глубины, используя opencv - PullRequest
0 голосов
/ 26 сентября 2019

У меня проблемы с вычислением глубины по карте диспаратности с использованием opencv.Я знаю, что расстояние в двух стереоизображениях рассчитывается с помощью z = (baseline * focal) / (disparity * p), но я не могу понять, как рассчитать диспаратность, используя карту.Код, который я использую, если следующий, предоставляя мне карту несоответствия двух изображений.

import numpy as np
import cv2

# Load the left and right images in gray scale
imgLeft = cv2.imread('logga.png', 0)
imgRight = cv2.imread('logga1.png', 0)

# Initialize the stereo block matching object 
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=5)

# Compute the disparity image
disparity = stereo.compute(imgLeft, imgRight)

# Normalize the image for representation
min = disparity.min()
max = disparity.max()
disparity = np.uint8(6400 * (disparity - min) / (max - min))



# Display the result
cv2.imshow('disparittet', np.hstack((imgLeft, imgRight, disparity)))
cv2.waitKey(0)
cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 27 сентября 2019

Для расчета глубины из диспаратности, OpenCV имеет функцию reprojectImageTo3d .

Вам нужна матрица несоответствия глубине (Q) из стерео выпрямления (или вы можете создать ее, как указано в ссылке).Вы можете узнать больше о матрице Q здесь .

Получив матрицу Q, вы можете просто перепроектировать карту диспаратности в 3D

depth = cv2.reprojectImageTo3D(disparity, Q)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...