В этом примере показано, как оценить точность параметров камеры, оцененных с помощью 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');
Ошибки репроекции обеспечивают качественную меру точности. Ошибка репроекции - это расстояние между ключевой точкой шаблона, обнаруженной в калибровочном изображении, и соответствующей мировой точкой, проецируемой в то же изображение. The showReprojectionErrors
функция обеспечивает полезную визуализацию средней ошибки репроекции в каждом калибровочном изображении. Если общая средняя ошибка репроекции слишком высока, рассмотрите исключение изображений с самой высокой ошибкой и повторную калибровку.
figure; showReprojectionErrors(params);
Ошибки расчета представляют неопределенность каждого оценочного параметра. The 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 ориентациях, и он должен быть расположен таким образом, чтобы у вас были ключевые точки во всех частях поля зрения. В частности, очень важно иметь ключевые точки, близкие к ребрам и углам изображения, в порядок получить лучшую оценку коэффициентов искажения.
Исключить изображения, которые имеют высокие ошибки репроекции, и выполнить повторную калибровку.
Этот пример показал, как получить и интерпретировать ошибки калибровки камеры.
[1] З. Чжан. Гибкий новый техник калибровки фотоаппарата. Транзакции IEEE по Pattern Analysis and Machine Intelligence, 22 (11): 1330-1334, 2000.