Этот пример показывает, как оценить точность параметров камеры, оцененных с помощью приложения cameraCalibrator
или функции estimateCameraParameters
.
Калибровка фотоаппарата является процессом оценки параметров камеры с помощью изображений специального калибровочного шаблона. Параметры включают камеру intrinsics, коэффициенты искажения и камеру extrinsics. Если вы калибруете камеру, существует несколько способов оценить точность предполагаемых параметров:
Постройте относительные местоположения камеры и калибровочного шаблона
Вычислите ошибки перепроекции
Вычислите ошибки оценки параметра
Оцените параметры камеры с помощью набора изображений калибровочного шаблона шахматной доски.
% 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.3785 +/- 4.0579 ] Principal point (pixels):[ 563.6481 +/- 5.3967 355.7252 +/- 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.0517 +/- 6.0391 -26.8685 +/- 3.7318 797.9026 +/- 3.9002 ] [ -209.4358 +/- 6.9637 -59.4565 +/- 4.3578 921.8198 +/- 4.6295 ] [ -129.3825 +/- 7.0907 -44.1030 +/- 4.3751 937.6831 +/- 4.4913 ] [ -151.0049 +/- 6.6905 -27.3253 +/- 4.1339 884.2788 +/- 4.3925 ] [ -174.9500 +/- 6.7056 -24.3499 +/- 4.1606 886.4961 +/- 4.6686 ] [ -134.3097 +/- 7.8887 -103.4981 +/- 4.8925 1042.4553 +/- 4.8184 ] [ -173.9846 +/- 7.6891 -73.1691 +/- 4.7812 1017.2385 +/- 4.8126 ] [ -202.9448 +/- 7.4327 -87.9091 +/- 4.6482 983.6957 +/- 4.9072 ] [ -319.8862 +/- 6.3213 -119.8898 +/- 4.0922 829.4581 +/- 4.9591 ]
Приемлема ли конкретная ошибка перепроекции или оценки, зависит от требований точности вашего конкретного приложения. Однако, если вы решили, что ваша калибровочная точность недопустима, существует несколько способов улучшить ее:
Измените калибровочные настройки. Попытайтесь использовать 3 радиальных коэффициента искажения, оценив тангенциальное искажение или скос.
Возьмите больше калибровочных изображений. Шаблон в изображениях должен быть в различных 3D ориентациях, и он должен быть расположен таким образом, что у вас есть keypoints во всех частях поля зрения. В частности, очень важно иметь keypoints близко к ребрам и углам изображения в порядке получить лучшую оценку коэффициентов искажения.
Исключите изображения, которые имеют высокие ошибки перепроекции и перекалибруют.
Этот пример показал, как получить и интерпретировать ошибки калибровки фотоаппарата.
[1] Цз. Чжан. Гибкий новый техник для калибровки фотоаппарата. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту, 22 (11):1330-1334, 2000.