В этом примере показано, как оценить точность параметров камеры, оцененных с помощью cameraCalibrator
приложение или estimateCameraParameters
функция.
Калибровка фотоаппарата является процессом оценки параметров камеры с помощью изображений специального калибровочного шаблона. Параметры включают внутренние параметры камеры, коэффициенты искажения и значения внешних параметров камеры. Если вы калибруете камеру, существует несколько способов оценить точность предполагаемых параметров:
Постройте относительные местоположения камеры и калибровочного шаблона
Вычислите ошибки перепроекции
Вычислите ошибки расчета параметра
Оцените параметры камеры с помощью набора изображений калибровочного шаблона шахматной доски.
% Create a set of calibration images. images = imageDatastore(fullfile(toolboxdir('vision'), 'visiondata', ... 'calibration', 'mono')); imageFileNames = images.Files; % Detect calibration pattern. [imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames); % Generate world coordinates of the corners of the squares. squareSize = 29; % millimeters worldPoints = generateCheckerboardPoints(boardSize, squareSize); % Calibrate the camera. I = readimage(images, 1); imageSize = [size(I, 1), size(I, 2)]; [params, ~, estimationErrors] = estimateCameraParameters(imagePoints, worldPoints, ... 'ImageSize', imageSize);
Можно быстро обнаружить очевидные ошибки в калибровке путем графического вывода относительных местоположений камеры и калибровочного шаблона. Используйте showExtrinsics
функционируйте, чтобы или построить местоположения калибровочного шаблона в системе координат камеры или местоположения камеры в системе координат шаблона. Ищите очевидные проблемы, такие как шаблон, находящийся позади камеры или камеры, находящейся позади шаблона. Также проверяйте, слишком далек ли шаблон или слишком близок к камере.
figure;
showExtrinsics(params, 'CameraCentric');
figure;
showExtrinsics(params, 'PatternCentric');
Ошибки перепроекции обеспечивают качественную меру точности. Ошибка перепроекции является расстоянием между шаблоном keypoint обнаруженный в калибровочном изображении и соответствующей мировой точкой, спроектированной в то же изображение. showReprojectionErrors
функция обеспечивает полезную визуализацию средней ошибки перепроекции в каждом калибровочном изображении. Если полная средняя ошибка перепроекции слишком высока, рассмотрите, исключая изображения с самой высокой ошибкой и перекалиброванием.
figure; showReprojectionErrors(params);
Ошибки расчета представляют неопределенность в каждом предполагаемом параметре. estimateCameraParameters
функционируйте опционально возвращает estimationErrors
выведите, содержа стандартную погрешность, соответствующую каждому предполагаемому параметру камеры. Возвращенная стандартная погрешность (в тех же модулях как соответствующий параметр), может использоваться, чтобы вычислить доверительные интервалы. Например, +/- соответствует 95%-му доверительному интервалу. Другими словами, вероятность, что фактическое значение данного параметра в из его оценки 95%.
displayErrors(estimationErrors, params);
Standard Errors of Estimated Camera Parameters ---------------------------------------------- Intrinsics ---------- Focal length (pixels): [ 714.1886 +/- 3.3219 710.3786 +/- 4.0579 ] Principal point (pixels):[ 563.6480 +/- 5.3967 355.7251 +/- 3.3036 ] Radial distortion: [ -0.3536 +/- 0.0091 0.1730 +/- 0.0488 ] Extrinsics ---------- Rotation vectors: [ -0.6096 +/- 0.0054 -0.1789 +/- 0.0073 -0.3835 +/- 0.0024 ] [ -0.7283 +/- 0.0050 -0.0996 +/- 0.0072 0.1964 +/- 0.0027 ] [ -0.6722 +/- 0.0051 -0.1444 +/- 0.0074 -0.1329 +/- 0.0026 ] [ -0.5836 +/- 0.0056 -0.2901 +/- 0.0074 -0.5622 +/- 0.0025 ] [ -0.3157 +/- 0.0065 -0.1441 +/- 0.0075 -0.1067 +/- 0.0011 ] [ -0.7581 +/- 0.0052 0.1947 +/- 0.0072 0.4324 +/- 0.0030 ] [ -0.7515 +/- 0.0051 0.0767 +/- 0.0072 0.2070 +/- 0.0029 ] [ -0.6223 +/- 0.0053 0.0231 +/- 0.0073 0.3663 +/- 0.0024 ] [ 0.3443 +/- 0.0063 -0.2226 +/- 0.0073 -0.0437 +/- 0.0014 ] Translation vectors (mm): [ -146.0516 +/- 6.0391 -26.8684 +/- 3.7318 797.9027 +/- 3.9002 ] [ -209.4357 +/- 6.9637 -59.4563 +/- 4.3578 921.8198 +/- 4.6295 ] [ -129.3823 +/- 7.0907 -44.1028 +/- 4.3751 937.6832 +/- 4.4913 ] [ -151.0048 +/- 6.6905 -27.3251 +/- 4.1339 884.2789 +/- 4.3925 ] [ -174.9499 +/- 6.7056 -24.3498 +/- 4.1606 886.4961 +/- 4.6686 ] [ -134.3095 +/- 7.8887 -103.4979 +/- 4.8925 1042.4554 +/- 4.8184 ] [ -173.9845 +/- 7.6891 -73.1689 +/- 4.7812 1017.2386 +/- 4.8126 ] [ -202.9446 +/- 7.4327 -87.9089 +/- 4.6482 983.6958 +/- 4.9072 ] [ -319.8860 +/- 6.3213 -119.8897 +/- 4.0922 829.4582 +/- 4.9591 ]
Приемлемы ли конкретная перепроекция или ошибка расчета, зависит от требований точности вашего конкретного приложения. Однако, если вы решили, что ваша калибровочная точность недопустима, существует несколько способов улучшить ее:
Измените калибровочные настройки. Попытайтесь использовать 3 радиальных коэффициента искажения, оценив тангенциальное искажение или скос.
Возьмите больше калибровочных изображений. Шаблон в изображениях должен быть в различных 3D ориентациях, и он должен быть расположен таким образом, что у вас есть keypoints во всех частях поля зрения. В частности, очень важно иметь keypoints близко к ребрам и углам изображения для того, чтобы получить лучшую оценку коэффициентов искажения.
Исключите изображения, которые имеют высокие ошибки перепроекции и перекалибруют.
Этот пример показал, как получить и интерпретировать ошибки калибровки фотоаппарата.
[1] Цз. Чжан. Гибкий новый техник для калибровки фотоаппарата. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту, 22 (11):1330-1334, 2000.