estimateCameraParameters

Калибровка моно-или стереофотоаппарата

Описание

пример

[cameraParams,imagesUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints) возвращает cameraParams, cameraParameters объект, содержащий оценки для внутренних и внешних параметров и коэффициентов искажения одной камеры. Функция также возвращает изображения, вы раньше оценивали параметры камеры и стандартные ошибки расчета для одной калибровки фотоаппарата. estimateCameraParameters функционируйте оценивает параметры внутренних параметров и значения внешних параметров.

пример

[stereoParams,pairsUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints) возвращает stereoParams, stereoParameters объект, содержащий параметры стереофотоаппарата. Функция также возвращает изображения, вы раньше оценивали параметры стерео и стандартные ошибки расчета для калибровки стереофотоаппарата.

пример

cameraParams = estimateCameraParameters(___,Name,Value) конфигурирует cameraParams свойства объектов заданы одним или несколькими Name,Value парные аргументы, с помощью любого из предыдущих синтаксисов. Незаданные свойства имеют свои значения по умолчанию.

Примеры

свернуть все

Создайте набор калибровочных изображений.

images = imageSet(fullfile(toolboxdir('vision'),'visiondata',...
            'calibration','mono'));
imageFileNames = images.ImageLocation;

Обнаружьте калибровочный шаблон.

[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

Сгенерируйте мировые координаты углов квадратов.

squareSizeInMM = 29;
worldPoints = generateCheckerboardPoints(boardSize,squareSizeInMM);

Калибруйте камеру.

I = readimage(images,1); 
imageSize = [size(I, 1),size(I, 2)];
params = estimateCameraParameters(imagePoints,worldPoints, ...
                                  'ImageSize',imageSize);

Визуализируйте калибровочную точность.

showReprojectionErrors(params);

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

Визуализируйте значения внешних параметров камеры.

figure;
showExtrinsics(params);

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

drawnow;

Постройте обнаруженные и повторно спроектированные точки.

figure; 
imshow(imageFileNames{1}); 
hold on;
plot(imagePoints(:,1,1), imagePoints(:,2,1),'go');
plot(params.ReprojectedPoints(:,1,1),params.ReprojectedPoints(:,2,1),'r+');
legend('Detected Points','ReprojectedPoints');
hold off;

Figure contains an axes object. The axes object contains 3 objects of type image, line. These objects represent Detected Points, ReprojectedPoints.

Задайте калибровочные изображения.

leftImages = imageDatastore(fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','stereo','left'));
rightImages = imageDatastore(fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','stereo','right'));

Обнаружьте шахматные доски.

[imagePoints,boardSize] = ...
  detectCheckerboardPoints(leftImages.Files,rightImages.Files);

Задайте мировые координаты шахматной доски keypoints. Размер квадратов находится в миллиметрах.

squareSize = 108;
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

Калибруйте систему стереофотоаппарата. Обе камеры имеют то же разрешение.

I = readimage(leftImages,1); 
imageSize = [size(I,1),size(I,2)];
params = estimateCameraParameters(imagePoints,worldPoints, ...
                                  'ImageSize',imageSize);

Визуализируйте калибровочную точность.

  showReprojectionErrors(params);

Figure contains an axes object. The axes object with title Mean Reprojection Error per Image contains 5 objects of type bar, line. These objects represent Camera 1, Camera 2, Overall Mean Error: 0.06 pixels.

Визуализируйте значения внешних параметров камеры.

figure;
showExtrinsics(params);

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

Создайте набор калибровочных изображений.

imds = imageDatastore(fullfile(toolboxdir('vision'),'visiondata',...
                        'calibration','circleGrid','mono'));
calibrationImages = readall(imds);
calibrationImages = cat(4,calibrationImages{:});

Задайте круговые размерности шаблона сетки.

patternDims = [8 11];

Обнаружьте шаблон в калибровочных изображениях.

imagePoints = detectCircleGridPoints(calibrationImages, patternDims,...
                        'PatternType','symmetric');

Задайте мировые координаты для круговой сетки keypoints. Расстояние между центрами находится в миллиметрах.

centerDistance = 18;
worldPoints = generateCircleGridPoints(patternDims,centerDistance,...
                        'PatternType','symmetric');

Калибруйте камеру с помощью калибровочных изображений.

imageSize = size(calibrationImages,1:2);
params = estimateCameraParameters(imagePoints,worldPoints,...
                        'ImageSize',imageSize);

Постройте обнаруженную сетку шаблона и повторно спроектированные точки.

figure
imshow(calibrationImages(:,:,:,1))
hold on
plot(imagePoints(:,1,1), imagePoints(:,2,1),'gx','MarkerSize',8)
plot(params.ReprojectedPoints(:,1,1),params.ReprojectedPoints(:,2,1),'r+','MarkerSize',8)
legend('Detected Points','ReprojectedPoints')
hold off

Входные параметры

свернуть все

Ключевые пункты калибровочного шаблона в виде массива [x, y] внутренний параметр отображают координаты.

КалибровкаВходной массив [x, y] ключевые пункты
Одна камера

M-by-2-by-numImages массив [x, y] точки.

  • Количество изображений, numImages, должно быть больше или быть равно 2.

  • Количество координат keypoint в каждом шаблоне, M, должно быть больше 3.

Частично выявил закономерности, только поддерживаются для одной калибровки фотоаппарата. Включать частично выявило закономерности в оценке, используйте [NaN,NaN] как x-y координирует для пропавших без вести keypoints.

Стереофотоаппарат

M-by-2-by-numPairs-by-2 массив [x, y] точки.

  • numPairs является количеством пар стереоизображения, содержащих калибровочный шаблон.

  • Количество координат keypoint в каждом шаблоне, M, должно быть больше 3.

  • imagePoints(:,:,:,1) точки от камеры 1.

  • imagePoints(:,:,:,2) точки от камеры 2.

Типы данных: single | double

Ключевые пункты калибровочного шаблона в мировых координатах в виде M-by-2 массив количества M [x, y] мировые координаты. Шаблон должен быть плоским; поэтому, z - координаты являются нулем.

Типы данных: single | double

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'WorldUnits', 'mm' устанавливает мировые модули точки на миллиметры.

Мир указывает модули в виде разделенной запятой пары, состоящей из 'WorldUnits' и вектор символов или строковый скаляр.

Оценочный скос в виде разделенной запятой пары, состоящей из 'EstimateSkew' и логический скаляр. Когда вы устанавливаете это свойство на true, функция оценивает скос осей изображений. Когда установлено в false, оси изображений точно перпендикулярны, и функция обнуляет скос.

Количество радиальных коэффициентов искажения, чтобы оценить в виде разделенной запятой пары, состоящей из 'NumRadialDistortionCoefficients' и значение 2 или 3. Радиальное искажение происходит, когда световые лучи изгибаются более близкий ребра линзы, чем они делают в ее оптическом центре. Чем меньший линза, тем больше искажение.

Negative radial distortion "pincushion", no distortion, and positive radial distortion "barrel" grid.

Радиальные коэффициенты искажения моделируют этот тип искажения. Искаженные точки обозначаются как (искаженный x, искаженный y):

x, искаженный = x (1 + k 1*r2 + k 2*r4 + k 3*r6)

y, искаженный = y (1 + k 1*r2 + k 2*r4 + k 3*r6)

  • x, y Неискаженные пиксельные местоположения. x и y находятся в нормированных координатах изображений. Нормированные координаты изображений вычисляются от пиксельных координат путем перевода в оптический центр и деления на фокусное расстояние в пикселях. Таким образом x и y являются безразмерными.

  • k 1, k 2, и k 3 — Радиальные коэффициенты искажения линзы.

  • r2 = x2 + y2

Как правило, два коэффициента достаточны для калибровки. Для серьезного искажения, такой как в широкоугольных объективах, можно выбрать три коэффициента, чтобы включать k 3.

Тангенциальный флаг искажения в виде разделенной запятой пары, состоящей из, 'EstimateTangentialDistortion' и логический скаляр. Когда вы устанавливаете это свойство на true, функция оценивает тангенциальное искажение. Когда вы устанавливаете его на false, тангенциальное искажение незначительно.

Тангенциальное искажение происходит, когда линза и плоскость изображения не параллельны. Тангенциальные коэффициенты искажения моделируют этот тип искажения.

Comparison of zero tangential distortion and tangential distortion.

Искаженные точки обозначаются как (искаженный x, искаженный y):

x, искаженный = x + [2 * p 1 * x * y + p 2 * (r2 + 2 * x2)]

y, искаженный = y + [p 1 * (r2 + 2 *y2) + 2 * p 2 * x * y]

  • x, y Неискаженные пиксельные местоположения. x и y находятся в нормированных координатах изображений. Нормированные координаты изображений вычисляются от пиксельных координат путем перевода в оптический центр и деления на фокусное расстояние в пикселях. Таким образом x и y являются безразмерными.

  • p 1 и p 2 — Тангенциальные коэффициенты искажения линзы.

  • r2 = x2 + y2

Исходное предположение для внутренних параметров камеры в виде разделенной запятой пары, состоящей из 'InitialIntrinsicMatrix' и 3х3 матрица. Если вы не вводите начальное значение, функция вычисляет начальную внутреннюю матрицу с помощью линейного метода наименьших квадратов.

Исходное предположение для радиальных коэффициентов искажения в виде разделенной запятой пары, состоящей из 'InitialRadialDistortion' и 2-или вектор с 3 элементами. Если вы не вводите начальное значение, функция использует 0 как начальное значение для всех коэффициентов.

Размер изображения, произведенный камерой в виде разделенной запятой пары, состоящей из 'ImageSize'и как 1 2 [mrows, ncols] вектор.

Выходные аргументы

свернуть все

Параметры камеры, возвращенные как cameraParameters объект.

Изображения вы используете, чтобы оценить параметры камеры, возвращенные как P-by-1 логический массив. P соответствует количеству изображений. Массив указывает, какие изображения вы раньше оценивали параметры камеры. Логический true значение в массиве указывает, какие изображения вы раньше оценивали параметры камеры.

Функция вычисляет homography между мировыми точками и точками, обнаруженными в каждом изображении. Если сбои расчета homography для изображения, функция выдает предупреждение. Точки для того изображения не используются для оценки параметров камеры. Функция также устанавливает соответствующий элемент imagesUsed к false.

Стандартные погрешности предполагаемых параметров, возвращенных как cameraCalibrationErrors возразите или stereoCalibrationErrors объект.

Параметры камеры для системы стерео, возвращенной как stereoParameters объект. Объект содержит внутренний параметр, значение внешних параметров и параметры искажения объектива системы стереофотоаппарата.

Отобразите пары, используемые, чтобы оценить параметры камеры, возвращенные как P-by-1 логический массив. P соответствует количеству пар изображений. Логический true значение в массиве указывает, какие пары изображений вы раньше оценивали параметры камеры.

Алгоритмы

свернуть все

Калибровочный алгоритм

Можно использовать приложение Camera Calibrator с камерами до поля зрения (FOV) 95 градусов.

Калибровочный алгоритм принимает модель камеры с точечной диафрагмой:

w[xy1]=[XYZ1][Rt]K

x, y, z : мировые координаты точки
x, y : координаты соответствующей точки изображений
w: произвольный масштабный коэффициент
K: матрица внутреннего параметра камеры
R: матрица, представляющая 3-D вращение камеры
t: перевод камеры относительно системы мировой координаты

Калибровка фотоаппарата оценивает значения внутренних параметров, внешних параметров и коэффициентов искажения. Существует два шага, включенные при закрытых дверях калибровка:

  1. Решите для внутренних параметров и значений внешних параметров в закрытой форме, приняв, что искажение объектива является нулем. [1]

  2. Оцените все параметры одновременно включая коэффициенты искажения с помощью минимизации нелинейного метода наименьших квадратов (алгоритм Levenberg–Marquardt). Используйте закрытое решение для формы от предыдущего шага как первоначальная оценка внутренних параметров и значений внешних параметров. Затем установите первоначальную оценку коэффициентов искажения обнулять. [1][2]

Ссылки

[1] Чжан, Z. “Гибкий Новый техник для Калибровки фотоаппарата”. Транзакции IEEE согласно Анализу Шаблона и Машине Intelligence.Vol. 22, № 11, 2000, стр 1330–1334.

[2] Heikkila, J, и О. Сильвен. “Процедура калибровки фотоаппарата с четырьмя шагами с неявной коррекцией изображений”, международная конференция IEEE по вопросам компьютерного зрения и распознавания образов, 1997.

[3] Bouguet, J.Y. “Тулбокс калибровки фотоаппарата для MATLAB”, вычислительное видение в Калифорнийском технологическом институте. Тулбокс калибровки фотоаппарата для MATLAB

[4] Брадский, G. и А. Кэехлер. Изучение OpenCV: компьютерное зрение с библиотекой OpenCV. Севастополь, CA: О'Райли, 2008.

Введенный в R2014b