exponenta event banner

estimateCameraParameters

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

Описание

пример

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

пример

[stereoParams,pairsUsed,estimationErrors] = estimateCameraParameters(imagePoints,worldPoints) прибыль stereoParams, a 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-by-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. Радиальные искажения возникают, когда лучи света изгибаются больше вблизи краев линзы, чем в ее оптическом центре. Чем меньше линза, тем больше искажение.

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

xdistorted = x (1 + k1 * r2 + k2 * r4 + k3 * r6)

ydistorted = y (1 + k1 * r2 + k2 * r4 + k3 * r6)

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

  • k1, k2 и k3 - коэффициенты радиального искажения объектива.

  • r2: x2 + y2

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

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

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

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

xdistorted = x + [2 * p1 * x * y + p2 * (r2 + 2 * x2)]

ydistorted = y + [p1 * (r2 + 2 * y2) + 2 * p2 * x * y]

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

  • p1 и p2 - коэффициенты тангенциального искажения линзы.

  • r2: x2 + y2

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

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

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

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

свернуть все

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

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

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

Ссылки

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

[2] Хейккила, Джей и О. Сильвен. «Четырехэтапная процедура калибровки камеры с неявной коррекцией изображения», Международная конференция IEEE по компьютерному зрению и распознаванию образов, 1997 год.

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

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

Представлен в R2014b