Калибровка камеры - это процесс вычисления внешних и собственных параметров камеры. После калибровки камеры можно использовать информацию об изображении для восстановления 3-D информации с 2-D изображений. Можно также отменить искажение изображений, принятых с помощью fisheye-камеры. Computer Vision Toolbox™ содержит алгоритмы калибровки для модели камеры pinhole и модели fisheye-камеры. Можно использовать модель «рыбий глаз» с камерами до поля зрения ( FOV) 195 степеней.
Fisheye-камеры» используются в одометрии и для решения задач одновременной локализации и картографии (SLAM) визуально. Другие приложения включают системы наблюдения, GoPro, виртуальную реальность (VR) для захвата поля зрения 360 степеней (fov) и алгоритмы сшивания. Эти камеры используют сложную серию объективов, чтобы расширить поле зрения камеры, позволяя ей захватывать широкие панорамные или полусферические изображения. Однако объективы достигают этого чрезвычайно широкого угла, искажая линии зрения на изображениях
Из-за экстремальных искажений, которые производит линза «рыбий глаз», модель pinhole не может смоделировать fisheye-камеры.
Алгоритм калибровки Computer Vision Toolbox использует модель fisheye-камеры, предложенную Scaramuzza [1]. Модель использует всенаправленную модель камеры. Процесс рассматривает систему формирования изображений как компактную систему. Чтобы порядком связать точку 3-D мира с 2-D изображением, необходимо получить внешние и внутренние параметры камеры. Мировые точки преобразуются в координаты камеры с помощью параметров extinsics. Координаты камеры отображаются в плоскость изображения с помощью собственных параметров.
Внешние параметры состоят из вращения, R и перемещения, t. Источник системы координат камеры находится в ее оптическом центре, и ее x - и y - ось определяют плоскость изображения.
Преобразование из мировых точек в точки камеры является:
Для модели fisheye-камеры внутренние параметры включают полином коэффициенты отображения проекционной функции. Коэффициенты выравнивания связаны с выравниванием датчика и преобразованием из плоскости датчика в положение пикселя в плоскости изображения камеры.
Следующее уравнение преобразует точку изображения в соответствующий ей вектор 3-D.
являются идеальными проекциями изображений реальных точек.
представляет скалярный фактор.
являются полиномиальными коэффициентами, описанными моделью Скарамуццы, где.
является функцией (u, v) и зависит только от расстояния точки от центра изображения:.
Внутренние параметры также учитывают растяжение и искажение. Матрица растяжения компенсирует расхождение датчика и объектива, и вектор искажения настраивает (0,0) положение плоскости изображения.
Следующее уравнение связывает действительные искаженные координаты (u «, v») с идеальными искаженными координатами (u, v).
Чтобы удалить искажение объектива из изображения «рыбий глаз», можно обнаружить шахматный калибровочный шаблон и затем калибровать камеру. Вы можете найти шахматные точки с помощью detectCheckerboardPoints
и generateCheckerboardPoints
функций. estimateFisheyeParameters
функция использует обнаруженные точки и возвращает fisheyeParameters
объект, который содержит внутренние и внешние параметры fisheye-камеры. Можно использовать fisheyeCalibrationErrors
для проверки точности калибровки.
Удалите искажение объектива из изображения «рыбий глаз» путем обнаружения контрольного калибровочного шаблона и калибровки камеры. Затем отобразите результаты.
Соберите набор шахматных калибровочных изображений.
images = imageDatastore('calibrationImages');
Обнаружите калибровочный шаблон из изображений. Аргумент Имя-Значение 'PartialDetections' по умолчанию имеет значение true, позволяющее обнаруживать частичные шахматные платы.
[imagePoints,boardSize] = detectCheckerboardPoints(images.Files, 'HighDistortion', true);
Сгенерируйте мировые координаты для углов шахматных квадратов.
squareSize = 20; % millimeters
worldPoints = generateCheckerboardPoints(boardSize,squareSize);
Оцените параметры калибровки fisheye-камеры на основе изображения и мировых точек. Используйте первое изображение, чтобы получить размер изображения.
I = readimage(images,10); imageSize = [size(I,1) size(I,2)]; params = estimateFisheyeParameters(imagePoints,worldPoints,imageSize);
Удалите искажение объектива из первого изображения I
и отобразите результаты.
J1 = undistortFisheyeImage(I,params.Intrinsics); figure imshowpair(I,J1,'montage') title('Original Image (left) vs. Corrected Image (right)')
J2 = undistortFisheyeImage(I,params.Intrinsics,'OutputView','same', 'ScaleFactor', 0.2); figure imshow(J2) title('Output View with low Scale Factor')
[1] Скарамуцца, Д., А. Мартинелли и Р. Зигварт. A Toolbox for Easy Calibrating Omnidirectional Cameras (неопр.) (недоступная ссылка). Материалы Международной конференции IEEE по интеллектуальным роботам и системам (IROS). Пекин, Китай, 7-15 октября 2006 года.
fisheyeCalibrationErrors
| fisheyeIntrinsics
| fisheyeIntrinsicsEstimationErrors
| fisheyeParameters