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. 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.

Визуализируйте внешнюю камеру.

figure;
showExtrinsics(params);

Figure contains an axes. The axes 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. The axes 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);

Задайте мировые координаты контрольных точек. Размер квадрата - в миллиметрах.

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. The axes 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. The axes with title Extrinsic Parameters Visualization contains 28 objects of type patch, text, line.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Аргументы в виде пар имя-значение

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

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

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

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

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

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

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

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

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

  • k 1, k 2 и k 3 - Коэффициенты радиального искажения объектива.

  • r2: x2 + y2

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

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

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

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

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

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

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

  • p 1 и p 2 - Коэффициенты тангенциального искажения объектива.

  • r2: x2 + y2

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

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

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

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

свернуть все

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

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

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

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

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

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

Алгоритмы

свернуть все

Алгоритм калибровки

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

Алгоритм калибровки принимает модель камеры pinhole:

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

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

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

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

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

Ссылки

[1] Чжан, З. «Гибкий новый техник калибровки камеры». Транзакции IEEE по анализу шаблонов и Machine Intelligence. Vol. 22, № 11, 2000, стр 1330–1334.

[2] Heikkila, J, and O. Silven. «Четырехэтапная процедура калибровки камеры с неявной коррекцией изображения», IEEE International Conference on Компьютерное Зрение and Pattern Recognition, 1997.

[3] Bouguet, J.Y. «Camera Calibration Toolbox for Matlab», Computational Vision в Калифорнийском технологическом институте. Калибровочный Тулбокс камеры для MATLAB

[4] Брадски, Г. и А. Келер. Обучение OpenCV: Компьютерное зрение с библиотекой OpenCV. Sebastopol, CA: O'Reilly, 2008.

Введенный в R2014b