detectCheckerboardPoints

Обнаружьте шаблон шахматной доски в изображении

Описание

пример

[imagePoints,boardSize] = detectCheckerboardPoints(I) обнаруживает черно-белую шахматную доску размера, больше, чем квадраты 4 на 4 в 2D истинном цвете или полутоновом изображении. Функция возвращает обнаруженные точки и размерности шахматной доски.

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames) обнаруживает шаблон шахматной доски в наборе входных изображений, обеспеченных как массив имен файлов.

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(images) обнаруживает шаблон шахматной доски в наборе входных изображений, обеспеченных как массив черно-белых или цветных изображений.

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(imageFileNames1,imageFileNames2) обнаруживает шаблон шахматной доски в стереопарах изображений, обеспеченных как массивы ячеек имен файлов.

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(images1,images2) обнаруживает шаблон шахматной доски в стереопарах изображений, обеспеченных как массивы черно-белых или цветных изображений.

[imagePoints,boardSize,pairsUsed] = detectCheckerboardPoints(___,Name,Value) дополнительные опции использования заданы одним или несколькими Name,Value парные аргументы. Незаданные свойства имеют значения по умолчанию.

Примеры

свернуть все

Создайте imageDatastore содержание калибровки отображает от камеры GoPro.

imds = imageDatastore(fullfile(toolboxdir('vision'),'visiondata','calibration','gopro'));

Обнаружьте калибровочный шаблон с помощью 'HighDistortion' опция, которую хорошо использовать с изображениями линзы подозрительного взгляда.

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imds.Files(1:4),'HighDistortion',true);

Отобразите обнаруженные точки.

for i = 1:4
  % Read image
  I = readimage(imds, i);

  % Insert markers at detected point locations
  I = insertMarker(I, imagePoints(:,:,i), 'o', 'Color', 'red', 'Size', 10);

  % Display image
  subplot(2, 2, i);
  imshow(I);
end

Figure contains 4 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image.

Загрузите изображение, содержащее шаблон шахматной доски.

imageFileName = fullfile(toolboxdir('vision'),'visiondata','calibration','webcam','image4.tif');
I = imread(imageFileName);

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

[imagePoints,boardSize] = detectCheckerboardPoints(I);

Отобразите обнаруженные точки.

J = insertText(I,imagePoints,1:size(imagePoints,1));
J = insertMarker(J,imagePoints,'o','Color','red','Size',5);
imshow(J);
title(sprintf('Detected a %d x %d Checkerboard',boardSize));

Figure contains an axes object. The axes object with title Detected a 7 x 10 Checkerboard contains an object of type image.

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

for i = 1:5
  imageFileName = sprintf('image%d.tif', i);
  imageFileNames{i} = fullfile(matlabroot,'toolbox','vision',...
       'visiondata','calibration','webcam',imageFileName);
end

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

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames, 'PartialDetections', false);

Отобразите обнаруженные точки.

imageFileNames = imageFileNames(imagesUsed);
for i = 1:numel(imageFileNames)
  I = imread(imageFileNames{i});
  subplot(2, 2, i);
  imshow(I);
  hold on;
  plot(imagePoints(:,1,i),imagePoints(:,2,i),'ro');
end

Читайте в стереоизображениях.

numImages = 4;
images1 = cell(1, numImages);
images2 = cell(1, numImages);
for i = 1:numImages
    images1{i} = fullfile(matlabroot,'toolbox','vision',...
        'visiondata','calibration','stereo','left',sprintf('left%02d.png',i));
    images2{i} = fullfile(matlabroot,'toolbox','vision',...
        'visiondata','calibration','stereo','right',sprintf('right%02d.png',i));
end

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

[imagePoints,boardSize,pairsUsed] = ...
    detectCheckerboardPoints(images1,images2);

Отобразите точки от images1.

images1 = images1(pairsUsed);
figure;
for i = 1:numel(images1)
      I = imread(images1{i});
      subplot(2,2,i);
      imshow(I); 
      hold on; 
      plot(imagePoints(:,1,i,1),imagePoints(:,2,i,1),'ro');
end 
annotation('textbox',[0 0.9 1 0.1],'String','Camera 1',...
    'EdgeColor','none','HorizontalAlignment','center')

Figure contains 4 axes objects. Axes object 1 contains 2 objects of type image, line. Axes object 2 contains 2 objects of type image, line. Axes object 3 contains 2 objects of type image, line. Axes object 4 contains 2 objects of type image, line.

Отобразите точки от images2.

images2 = images2(pairsUsed);
figure;
for i = 1:numel(images2)
      I = imread(images2{i});
      subplot(2, 2, i);
      imshow(I);
      hold on; 
      plot(imagePoints(:,1,i,2),imagePoints(:,2,i,2),'ro');
end 
annotation('textbox',[0 0.9 1 0.1],'String','Camera 2',...
    'EdgeColor','none','HorizontalAlignment','center')

Figure contains 4 axes objects. Axes object 1 contains 2 objects of type image, line. Axes object 2 contains 2 objects of type image, line. Axes object 3 contains 2 objects of type image, line. Axes object 4 contains 2 objects of type image, line.

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

свернуть все

Введите изображение или в виде M-by-N-by-3 истинный цвет или в виде M-by-N 2D шкала полутонов. Входное изображение должно быть действительным и неразреженным. Функция может обнаружить шахматные доски с минимальным размером квадратов 4 на 4.

Типы данных: single | double | int16 | uint8 | uint16 | logical

Имена файла образа в виде N - массив ячеек элемента имен файлов N.

Имена файлов для камеры 1 изображение в виде N - массив ячеек элемента имен файлов N. Изображения, содержавшиеся в этом массиве, должны быть в том же порядке как изображения, содержавшиеся в imageFileNames2, формирование стереопар.

Имена файлов для камеры 2 изображения в виде N - массив ячеек элемента имен файлов N. Изображения, содержавшиеся в этом массиве, должны быть в том же порядке как изображения, содержавшиеся в imageFileNames1, формирование стереопар.

Изображения в виде H-by-W-by-B-by-F массив, содержащий набор черно-белых или цветных изображений. Входные размерности:

H представляет высоту изображения.
W представляет ширину изображения.
B представляет цветовой канал. Значение 1 указывает на полутоновое изображение и значение 3 указывает на изображение истинного цвета.
F представляет количество фреймов изображения.

Стереопара отображает от камеры 1 в виде H-by-W-by-B-by-F массив, содержащий набор черно-белых или цветных изображений. Входные размерности:

H представляет высоту изображения.
W представляет ширину изображения.
B представляет цветовой канал. Значение 1 указывает на полутоновое изображение и значение 3 указывает на изображение истинного цвета.
F представляет количество фреймов изображения.

Стереопара отображает от камеры 2 в виде H-by-W-by-B-by-F массив, содержащий набор черно-белых или цветных изображений. Входные размерности:

H представляет высоту изображения.
W представляет ширину изображения.
B представляет цветовой канал. Значение 1 указывает на полутоновое изображение и значение 3 указывает на изображение истинного цвета.
F представляет количество фреймов изображения.

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

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

Пример: 'MinCornerMetric', '0.15'

Минимальный угловой метрический порог в виде неотрицательного скаляра. Когда изображение будет шумным или очень текстурированным, увеличьте это значение, чтобы сократить количество ложных угловых обнаружений. Когда вы устанавливаете 'HighDistortion' свойство к false функция устанавливает значение по умолчанию на 0.15. Когда вы устанавливаете 'HighDistortion' свойство к true функция устанавливает значение по умолчанию на 0.12. Уменьшение значения приводит к увеличению угловых обнаружений.

Высокое искажение в виде false или true. Установите 'HighDistortion' к true когда изображения содержат высокий уровень искажения, которое типично для широкой камеры поля зрения, таково как fisheye-камера. Установите 'HighDistortion' к false когда изображения не содержат высокий уровень искажения. Установка 'HighDistortion' к true может увеличить упругость до искажения изображения, но уменьшает скорость обработки.

Частичные обнаружения в виде true или false. Установите 'PartialDetections' к true возвратить частично обнаруженные шахматные доски. Функциональные заливки, отсутствующие keypoint обнаружения с [NaN,NaN] координаты. Установите 'PartialDetections' к false отбрасывать частично обнаруженные шахматные доски. Это свойство проигнорировано для пар стереоизображения.

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

свернуть все

Обнаруженные угловые координаты шахматной доски, возвращенные как M-by-2 матрица для одного изображения. Для повторных изображений точки возвращены как M-by-2-by-number of images массив, и для стереопар изображений, функция возвращает точки как M-by-2-by-number of pairs-by-number of cameras массив.

Для стереопар, imagePoints(::: 1) точки от первого набора изображений и imagePoints(::: 2) точки от второго набора изображений. Выход содержит количество M [x y] координаты. Каждая координата представляет точку, где прямые углы обнаруживаются на шахматной доске. Число точек, которое возвращает функция, зависит от значения boardSize, который указывает на количество обнаруженных квадратов. Функция обнаруживает точки с субпиксельной точностью.

Функция вычисляет число точек, M, можно следующим образом:

M = prod(boardSize-1).

Если шахматная доска не может быть обнаружена:
imagePoints = []
boardSize= [0,0]

Когда вы задаете imageFileNames введите, функция может возвратить imagePoints как M-by-2-by-N массив. В этом массиве N представляет количество изображений, в которых обнаруживается шахматная доска. Если шахматная доска не может быть обнаружена, функция устанавливает imagePoints к [].

Поскольку одна камера отображает только:

  • Если полная шахматная доска не может быть обнаружена, функция возвращает частично обнаруженную шахматную доску с [NaN,NaN] как x-y координирует для недостающих углов в imagePoints. Это поведение по умолчанию может быть изменено с помощью 'PartialDetections' аргумент значения имени.

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

Размерности шахматной доски, возвращенные как с 2 элементами [height, width] вектор. Размерности шахматной доски описываются в терминах количества квадратов.

Если шахматная доска не может быть обнаружена, функция устанавливает boardSize к [0,0].

Флаг обнаружения шаблона, возвращенный как N-by-1 логический вектор из N logicals. Функциональные выходные параметры то же количество logicals как там вводятся изображения. true значение указывает, что шаблон был обнаружен в соответствующем изображении. false значение указывает, что функция не обнаружила шаблон.

Флаг обнаружения шаблона стереопары, возвращенный как N-by-1 логический вектор из N logicals. Функциональные выходные параметры то же количество logicals как там вводятся изображения. true значение указывает, что шаблон обнаруживается в соответствующей паре стереоизображения. false значение указывает, что функция не обнаруживает шаблон.

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

Ссылки

[1] Гайгер, A., Ф. Моосманн, O. Автомобиль и Б. Шустер. "Автоматическая Калибровка Датчика Камеры и Области значений с помощью Одного Выстрела", Международная конференция по вопросам Робототехники и Автоматизации (ICRA), Св. Павла, США, май 2012.

Расширенные возможности

Введенный в R2014a