Я пытаюсь откалибровать стереоустановку, состоящую из двух одинаковых Canon EOS60D
, которые я буду использовать для фотограмметрии. Для калибровки камер я использую высокоточную circlegrid
шаблонную пластину. Я смог определить центральные точки кругов, используя cv2.findCirclesGrid
, и смог отлично откалибровать одну камеру. Проблема возникает, когда я пытаюсь откалибровать обе камеры, используя функцию cv2.stereoCalibrate
в OpenCV. Я объясню предпринятые шаги, а также опубликую некоторые фрагменты кода с выводами, которые у меня есть. Буду благодарен, если кто-нибудь подскажет, где я не прав.
Шаги
1) Первый шаг — определить шаблон круговой сетки с помощью функции cv2.findCirclesGrid
в OpenCV.
2) Затем, используя обнаруженный шаблон сетки с каждой камеры, я использую cv2.calibrateCamera
для получения матриц камер и коэффициентов искажения обеих камер.
3) Получив матрицы камер и коэффициенты дисторсии обеих камер, я передаю их в функцию cv2.stereoCalibrate
.
Вывод
вывод после калибровки левой камеры выглядит следующим образом
Left Camera Return Value : 0.202690712694
Left Camera Camera Matrix : [[ 2.42046647e+04 0.00000000e+00 1.78281995e+03]
[ 0.00000000e+00 2.42115121e+04 2.51720578e+03]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
Left Camera Dist Coeff : [[-0.09448288 -1.38934436 0.00951455 -0.00568115 0.11248399]]
вывод после калибровки правой камеры выглядит следующим образом
Right Camera Return value : 0.258429588138
Right Camera Camera Matrix : [[ 2.69094574e+04 0.00000000e+00 1.70580157e+03]
[ 0.00000000e+00 2.69534209e+04 2.55185400e+03]
[ 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
Right Camera Dist Coeff : [[-0.1854594 1.89124255 0.00592814 -0.00377697 0.05715002]]
Как видно из приведенного выше вывода, оба возвращаемых значения из cv2.calibrateCamera
являются разумными.
вывод после калибровки стереоустановки выглядит следующим образом
StereoCalib Return Value : 278.98818985
Rotation Vector : [[ 0.72415334 0.13289823 0.67671265]
[ 0.68078781 0.018949 -0.73223554]
[-0.11013584 0.99094853 -0.07675351]]
Translation Vector [[-1.20860215]
[ 1.23017549]
[ 2.08116679]]
Essential Matrix : [[-1.55231939 1.17960457 1.42948401]
[ 1.37397347 1.47424592 1.31558743]
[-1.7136373 -0.18638995 0.05250614]]
Fundamental Matrix : [[ -3.15554184e-07 2.39721211e-07 6.99264445e-03]
[ 2.78844610e-07 2.99110045e-07 5.21248054e-03]
[ -9.54712002e-03 -2.19149124e-03 1.00000000e+00]]
Но возвращаемое значение стереокалибровки слишком велико.
Параметры
Флаги и критерии, которые я использую в cv2.stereoCalibrate
, следующие:
flags = cv2.CALIB_FIX_INTRINSIC
criteria = cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 1e-6
Я был бы признателен, если бы кто-нибудь мог указать мне, где я делаю неправильно.