Я попытался создать карту оценки глубины, используя встроенные функции openCV. Я использовал код, указанный в документации ( здесь ), но я не получил хороших результатов для него. Я мог бы использовать некоторые предложения, чтобы помочь мне отладить или понять проблему здесь, или получить лучшее понимание функции.
В моем понимании numDisparities
определяет разрешение карты диспаратности, что означает, что более высокие значения имеют более высокое разрешение, а blockSize
- это окно поиска, в котором глубина сравнивается в двух изображениях. Изображение1 , Изображение2 , Ожидаемый результат
Я выполнил обычные шаги и попробовал несколько случаев, чтобы понять поведение функции -
Случай 1
cv2.StereoBM_create(numDisparities = 0, blockSize = 5)
Результат Я думаю, что этот результат является ожидаемым, поскольку размер окна мал, который обязательно должен включать больше шума, иразрешение по глубине, очевидно, очень низкое, потому что numDisparities
установлено на 0.
Случай 2
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
Результат В то время как документация, которая используетте же параметры получают очень правильный результат .
Случай 3
stereo = cv2.StereoBM_create(numDisparities=32, blockSize=15)
Результат , результаты немного улучшаются, предположительно потому, что я увеличил значение numDisparities
.
Случай 4
stereo = cv2.StereoBM_create(numDisparities=64, blockSize=15)
Результат Лучший результат на данный момент - есть незначительное улучшение результатов до numDisparities = 96
, увеличение numDisparities
за пределыэто приводит к тому, что изображение по некоторым причинам становится усеченным - и уменьшение blockSize
приводит к некоторому шуму (хотя результаты получаются немного более "точными"), а увеличение blockSize
делает разграничение междуграницы больше 'грубее' (не удается уловить более мелкие детали.)
Однако ни один из них не близок к результату теста ...
Как мы можем настроить параметры для получения хорошей карты диспаратности, или это лучшее, что может быть достигнуто? Почему изображение увеличивается при увеличении numDisparities
?
Код -
import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread('im2.png',0)
imgR = cv2.imread('im6.png',0)
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()