Как узнать правильные значения параметров в STEREO_SGBM для моих стереоизображений? Карта диспаратности не ясна - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь создать карту диспаратности для не исправленного изображения. Мой вопрос в том, что все хорошо работает с изображением, которое я скачал из Интернета (1250x), но когда я использовал изображения, снятые на камеру qtcam с различными размерами изображения (672 * 380 и 1280 * 720), я вижу, что изображения не обеспечивают такое же качество. Я не знаю, как найти правильные значения для функции Stereo_SGBM. (Это происходит, даже когда я использовал выпрямленные изображения) Это код и изображения, которые я использовал. Большое спасибо за вашу помощь!

import cv2
import numpy as np
import matplotlib.pyplot as plt

def main():


#left=cv2.imread("/home/is/Desktop/stereo_Calibration/left/l15.jpg")
#right=cv2.imread("/home/is/Desktop/stereo_Calibration/right/r15.jpg")
left=cv2.imread("/home/is/Desktop/left.jpg")
right=cv2.imread("/home/is/Desktop/right.jpg")
left1=cv2.imread("/home/is/Desktop/temporary/left.jpg")
right1=cv2.imread("/home/is/Desktop/temporary/right.jpg")


#calculate disparity f
window_size = 5 #3
min_disp = 32 #0
num_disp = 112-min_disp
#num_disp=160
stereoMatcher = cv2.StereoSGBM_create(
    minDisparity = min_disp,
    numDisparities = num_disp,
    blockSize = 5,
    uniquenessRatio = 10,         #15, #Margin in percentage by which the best (minimum) computed cost function value should “win” the second best value to consider the found match correct. Normally, a value within the 5-15 range is good enough.
    speckleWindowSize = 100,       #0, #Maximum size of smooth disparity regions to consider their noise speckles and invalidate. Set it to 0 to disable speckle filtering. Otherwise, set it somewhere in the 50-200 range
    speckleRange = 32,#2,         #Maximum disparity variation within each connected component. If you do speckle filtering, set the parameter to a positive value, it will be implicitly multiplied by 16. Normally, 1 or 2 is good enough.
    disp12MaxDiff = 0,             #Maximum allowed difference (in integer pixel units) in the left-right disparity check. Set it to a non-positive value to disable the check.
    P1 = 8*3*window_size**2,             #CONTROL DISPARITY SMOOTHNESS
    P2 = 32*3*window_size**2,          #CONTROL DISPARITY SMOOTHNESS
    preFilterCap=63,
    mode=cv2.cv2.STEREO_SGBM_MODE_SGBM_3WAY

    )

  # compute disparity
disp_left=stereoMatcher.compute(left,right)#.astype(np.float32) / 16.0
disp_left1=stereoMatcher.compute(left1,right1).astype(np.float32) / 16.0

disp_left = np.int16(disp_left)

plt.subplot(1,4,1)
plt.imshow(left)
#plt.title(titles[0])

plt.subplot(1,4,2)
plt.imshow(disp_left,cmap='gray')
#plt.title(titles[1])
plt.subplot(1,4,3)
plt.imshow(left1)
#plt.title(titles[0])

plt.subplot(1,4,4)
plt.imshow(disp_left1,cmap='gray')
plt.show()

if __name__ == '__main__':
    main()[enter image description here][1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...