Оценка точности калибровки одиночной камеры

В этом примере показано, как оценить точность параметров камеры, оцененных с помощью 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);

Extrinsics

Можно быстро обнаружить очевидные ошибки в калибровке, построив график относительных местоположений камеры и калибровочного шаблона. Используйте showExtrinsics функция для построения графика расположения калибровочного шаблона в системе координат камеры или расположения камеры в системе координат массива. Обратите внимание на очевидные проблемы, такие как шаблон за камерой или камера за шаблоном. Также проверьте, находится ли шаблон слишком далеко или слишком близко к камере.

figure; 
showExtrinsics(params, 'CameraCentric');

Figure contains an axes. The axes with title Extrinsic Parameters Visualization contains 23 objects of type patch, text, line.

figure; 
showExtrinsics(params, 'PatternCentric');

Figure contains an axes. The axes with title Extrinsic Parameters Visualization contains 47 objects of type patch, text, line.

Ошибки репроекции

Ошибки репроекции обеспечивают качественную меру точности. Ошибка репроекции - это расстояние между ключевой точкой шаблона, обнаруженной в калибровочном изображении, и соответствующей мировой точкой, проецируемой в то же изображение. The showReprojectionErrors функция обеспечивает полезную визуализацию средней ошибки репроекции в каждом калибровочном изображении. Если общая средняя ошибка репроекции слишком высока, рассмотрите исключение изображений с самой высокой ошибкой и повторную калибровку.

figure; 
showReprojectionErrors(params);

Figure contains an axes. The axes with title Mean Reprojection Error per Image contains 3 objects of type bar, line. This object represents Overall Mean Error: 0.18 pixels.

Ошибки расчета

Ошибки расчета представляют неопределенность каждого оценочного параметра. The estimateCameraParameters функция опционально возвращается estimationErrors выход, содержащий стандартную ошибку, соответствующую каждому предполагаемому параметру камеры. Возвращенная стандартная ошибка σ (в тех же модулях, что и соответствующий параметр) может использоваться для вычисления доверительных интервалов. Для примера +/- 1.96σ соответствует 95% доверительному интервалу. Другими словами, вероятность того, что фактическое значение данного параметра находится в 1.96σ от его оценки - 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.