Python/OpenCV: вычисление карты глубины из стереоизображений
У меня есть два стереоизображения, которые я хотел бы использовать для вычисления карты глубины. К сожалению, я не знаю C/C++, но знаю python--, поэтому, когда я нашел этот урок, я был настроен оптимистично.
К сожалению, учебник выглядит несколько устаревшим. Его нужно не только настроить, чтобы он вообще запускался (переименовывая "createStereoBM" в "StereoBM"), но когда он все-таки работает, он не дает хорошего результата, даже на примерах стереоизображений, которые использовались в самом учебнике.
Вот пример:
![image-right]()
import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread('Yeuna9x.png',0)
imgR = cv2.imread('SuXT483.png',0)
stereo = cv2.StereoBM(1, 16, 15)
disparity = stereo.compute(imgL, imgR)
plt.imshow(disparity,'gray')
plt.show()
Результат:
![the result]()
Это сильно отличается от того, чего достиг автор урока:
![good result]()
(источник: opencv.org)
Настройка параметров не улучшает ситуацию. Вся документация, которую я смог найти, относится к исходной C-версии кода openCV, а не к эквиваленту библиотеки Python. К сожалению, я не смог использовать это для улучшения ситуации.
Любая помощь будет оценена!
Ответы
Ответ 1
У вас неправильные образы.
Посмотрите на изображения, олово за лампой позволяет вам определять расположение камер двух изображений,
Просто измените это:
# v
imgR = cv2.imread('Yeuna9x.png',0)
imgL = cv2.imread('SuXT483.png',0)
# ^
Если вы посмотрите на изображение в учебнике, которое, по их словам, является фреймом left
, оно будет таким же, как ваш right
.
Здесь мой результат после изменения.
![enter image description here]()
Ответ 2
Возможно, вам нужно постоянно корректировать параметры алгоритма соответствия блоков.
взгляните на эту статью в блоге: https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/
Автор статьи составил набор классов, чтобы сделать процесс калибровки камер более упорядоченным, чем учебник opencv. Эти классы доступны в виде пакета pypi: https://github.com/erget/StereoVision
Надеюсь, что это поможет:)
Ответ 3
Камера преобразуется вертикально, а не горизонтально. Поверните изображения на 90 градусов, затем попробуйте. (Докажите это себе, повернув экран. Я просто взял свой ноутбук и повернул его на край.)
Вы упомянули другое программное обеспечение; возможно, основной вид строки/столбца между оригиналом и pyOpenCV.