Почему в opencv SGBM левая часть карты диспаратности становится темной, когда я увеличиваю параметр с именем numDisparities? - PullRequest
0 голосов
/ 02 апреля 2019

При использовании SGBM для получения карты диспаратности левая часть рисунка становится больше, если я увеличу параметр с именем numisparities. Что-то не так с этим?

numisparities = 6 * 16

numisparities = 12 * 16

numisparities = 22 * ​​16

Код, связанный с кодом:

num = cv2.getTrackbarPos("num", "depth")
blockSize = cv2.getTrackbarPos("blockSize", "depth")
window_size = cv2.getTrackbarPos("windowSize","depth")
if blockSize % 2 == 0:
    blockSize += 1
if blockSize < 5:
    blockSize = 5


min_disp = 0
num_disp = 16 * num - min_disp
stereo = cv2.StereoSGBM_create(minDisparity=min_disp,
                               numDisparities=num_disp,
                               blockSize=blockSize,
                               P1=8 * 3 * window_size ** 2,
                               P2=32 * 3 * window_size ** 2,
                               disp12MaxDiff=1,
                               uniquenessRatio=10,
                               speckleWindowSize=100,
                               speckleRange=32
                               )
disparity = stereo.compute(imgL, imgR).astype(np.float32) / 16.0
disp = cv2.normalize(disparity, disparity, alpha=0, beta=255, 
norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

Спасибо !!

1 Ответ

0 голосов
/ 19 апреля 2019

Это из-за диапазона поиска. Сопоставление стереозвука выполняется с использованием неравенства. Другими словами, пиксель A на левом изображении ищется на правом изображении только с параметром numdisparity. Для поиска слева направо, левая часть отбрасывается.

Чтобы заполнить эту область, обычно они делают как левое неравенство справа, так и правое левое неравенство и проверяют согласованность LR.

...