Я пытаюсь создать карту диспаратности для не исправленного изображения. Мой вопрос в том, что все хорошо работает с изображением, которое я скачал из Интернета (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]