Получение карты глубины из карты диспаратности - PullRequest
0 голосов
/ 03 марта 2020

Насколько я понимаю, мы можем использовать следующую формулу, чтобы получить реальное расстояние от карты глубины. Фокусное расстояние пи-камеры в пикселях составляет 2571,4, а расстояние между двумя моими камерами - 0,065 м. поэтому, используя эту формулу на основе метода триангуляции,

Расстояние = (фокусное расстояние * расстояние между двумя камерами) / карта диспаратности.

Я также сгенерировал карту диспаратности со следующим кодом:

stereo = cv2.StereoBM_create(numDisparities=48, blockSize=25)
disparity = steeo.compute(rectified_pair[0], rectified_pair[1])
norm_image = cv2.normalize(disparity, None, alpha = 0, beta =1, norm_type=cv2.NORM_MINMAX, dtype=cv.CV_32F)

f = 2571.4 
b = 0.065
distance = (b*f)/disparity
cv2.imshow(norm_image)

Я понимаю, что диапазон моего «несоответствия» начинается с -16. Я получаю отрицательные значения для обоих наборов кодов, и я не уверен, что это правильный метод для расчета расстояния. Кроме того, я откалибровал свои камеры. Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2020

Во-первых, вы должны прочитать значения фокусного расстояния и базовой линии из файла калибровки, а не жестко его кодировать. Если это сделано правильно, то способ, которым я использовал для расчета глубины, будет пиксель за пикселем. Поэтому я бы применил одну и ту же формулу попиксельно, например:

deepmap.at (i, j) = (b * f) / disparitymap.at (i, j).

Вы может быть, может попробовать это. В основном, в карте диспаратности будут какие-либо отрицательные значения, возвращаемые вычислением StereoBM. Так что проблема может возникнуть только после этого процесса.

...