estimateCameraParameters

Калибруйте сингл или стереофотоаппарат

Синтаксис

[cameraParams,imagesUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints)
[stereoParams,pairsUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints)
cameraParams = estimateCameraParameters(___,Name,Value)

Описание

пример

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

пример

[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);

Визуализируйте камеру extrinsics.

figure;
showExtrinsics(params);

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;

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

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);

Визуализируйте камеру extrinsics.

figure;
showExtrinsics(params);

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

свернуть все

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

КалибровкаВходной массив [x, y] ключевые пункты
Одна камераM-by-2-by-numImages массив [x, y] точки.
  • Количество изображений, numImages, должно быть больше, чем 2.

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

Стереофотоаппарат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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

Радиальные коэффициенты искажения моделируют этот тип искажения. Искаженные точки обозначаются как (искаженный 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 : x 2 + y 2

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

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

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

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

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

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

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

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

  • r2 : x 2 + y 2

Исходное предположение для камеры intrinsics, заданный как пара, разделенная запятой, состоящая из '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. Решите для intrinsics и extrinsics в закрытой форме, приняв, что искажение объектива является нулем. [1]

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

Ссылки

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

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

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

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

Введенный в R2014b

Для просмотра документации необходимо авторизоваться на сайте