Как получить хороший cv2.stereoCalibrate после успешного cv2.calibrateCamera - PullRequest
0 голосов
/ 31 мая 2018

Привет всем. Я немного покопался в компьютерном зрении, используя Python и OpenCV, и пытался откалибровать две камеры, которые я купил, чтобы провести реконструкцию 3D-стерео, но у меня возникли некоторые проблемы с этим.

Я в основном следовал этому учебнику , чтобы калибровать камеры отдельно (я применяю их к обеим), а затем я собираюсь использовать cv2.stereoCalibrate для получения относительной калибровки.

С одной калибровкой камеры, кажется, все работает правильно, я получаю очень низкую ошибку повторного проецирования, и, насколько мне известно, матрицы выглядят нормально.Здесь я оставляю результаты калибровки одной камеры.

cameraMatrix1 и distCoeffs1:

[[ 951.3607329     0.          298.74117671]
 [   0.          954.23088299  219.20548594]
 [   0.            0.            1.        ]]

[[ -1.07320015e-01  -5.56147908e-01  -1.13339913e-03   1.85969704e-03
    2.24131322e+00]]

cameraMatrix2 и distCoeffs2:

[[ 963.41078117    0.          362.85971342]
 [   0.          965.66793023  175.63216871]
 [   0.            0.            1.        ]]

[[ -3.31491728e-01   2.26020466e+00   3.86190151e-03  -2.32988011e-03
   -9.82275646e+00]]

Так что после этих я делаюследующее (я исправляю встроенные функции, как я уже знаю их по предыдущим калибровкам):

stereocalibration_criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 100, 1e-5)
stereocalibration_flags = cv2.CALIB_FIX_INTRINSIC
stereocalibration_retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpoints,imgpoints_left,imgpoints_right,cameraMatrix1,distCoeffs1,cameraMatrix2,distCoeffs2,gray_left.shape[::-1],criteria = stereocalibration_criteria, flags = stereocalibration_flags)

Я несколько раз пытался изменить флаги стереокалибровки и переключить матрицы, чтобы увидеть, не ошибся ли я впорядок и это имели значение, но я все еще заблокирован этим и получаю ответный удар около 30 (и после этого я пытаюсь исправить изображения, и, конечно, результат - катастрофа).

Я такжепопытался использовать некоторые калибровочные изображения из Интернета, и я получил тот же результат, поэтому я предполагаю, что проблема не в изображениях, которые я сделал.Если кто-то может указать мне правильное направление или знает, что может быть, это будет очень приветствоваться.

1 Ответ

0 голосов
/ 01 июня 2018

Оказывается, что порядок изображений, которые я использовал, не был одинаковым для правой и левой камеры ... Я использовал

images_left = glob.glob('Calibration/images/set1/left*' + images_format)
images_right = glob.glob('Calibration/images/set1/right*' + images_format)

Когда я должен был использовать что-то более похожее на:

images_left = sorted(glob.glob('Calibration/images/set1/left*' + images_format))
images_right = sorted(glob.glob('Calibration/images/set1/right*' + images_format))

Это потому, что glob получает изображения в случайном порядке, поэтому я пытался сопоставить неправильные изображения.Теперь я наконец-то получаю 0,4 Ретваля, что не так уж и плохо.

...