У меня есть две камеры со смещением по горизонтали, и я получил их параметры калибровки (матрица камеры и коэффициенты искажения, а также преобразование между ними) с использованием Kalibr в рамках модели эквидистантного отверстия (коэффициенты искажения k1, k2, k3, k4
).
Я хочу использовать openCVs cv.fisheye.stereoRectify
для создания новых проекционных матриц для каждой камеры, которую я могу подать в cv.fisheye.initUndistortRectifyMap
, а затем в cv.remap
выпрямить и удалить все изображения.
К сожалению, даже если для параметра fisheye.stereoRectify, установленного в 0, установлено значение balance
, в remap
редактируемых изображениях по-прежнему присутствуют черные пиксели. Я хочу обрезать каждое изображение так, чтобы ни в одном из неискаженных изображений с камеры не было недопустимых пикселей.
Я вижу, что стандартная функция cv.stereoRectify
имеет параметр alpha
, который точно выполняетэто. Но похоже, что cv.fisheye.stereoRectify
не имеет этого параметра. Поэтому я хочу воспроизвести его особенности.
cv.stereoRectify
, похоже, использует модель искажений Радтана (параметры искажения k1, k2, p1, p2
), поэтому я не думаю, что смогу легко поменять эту функцию, поскольку у меня нет p1
иФрагмент p2
.
из моего конвейера, приведенный ниже:
R1, R2, P1, P2, Q = cv2.fisheye.stereoRectify(mtx_right, dist_right,
mtx_left, dist_left,
(960,1280), R, tvec,
flags=cv2.CALIB_ZERO_DISPARITY,
balance= 0.0, fov_scale=1)
map1_right, map2_right = cv2.fisheye.initUndistortRectifyMap(mtx_right, dist_right,
R1, P1[0:3, 0:3],
(1280, 960), cv2.CV_16SC2)
map1_left, map2_left = cv2.fisheye.initUndistortRectifyMap(mtx_left, dist_left,
R2, P2[0:3, 0:3],
(1280, 960), cv2.CV_16SC2)
undistorted_right = cv2.remap(img_rgb_right, map1_right, map2_right,
interpolation=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT)
undistorted_left = cv2.remap(img_rgb_left, map1_left, map2_left,
interpolation=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT)
Есть ли простой способ получить ту же функциональность, которую alpha
производит в традиционном cv.stereoRectify
? balance=0
кажется близким, но не полностью обрезает недопустимые пиксели.
ТЕКУЩИЙ ВЫХОД (balance=0.5
, чтобы немного уменьшить масштаб) ![fisheye.stereoRectify](https://i.stack.imgur.com/bOgbT.jpg)
ЦЕЛЬДЛЯ ОБОИХ ИЗОБРАЖЕНИЙ, ЧТОБЫ ТОЛЬКО ПОКАЗАТЬ ЧТО В ЗЕЛЕНОМ КОРОБКЕ (те же размеры, если неясно, какой из них имеет меньший действительный пиксельный прямоугольник):
![goal](https://i.stack.imgur.com/VElQZ.jpg)