detectCheckerboardPoints

Обнаружение шахматного шаблона в изображении

Описание

пример

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

[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. Axes 1 contains an object of type image. Axes 2 contains an object of type image. Axes 3 contains an object of type image. Axes 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. The axes 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. Axes 1 contains 2 objects of type image, line. Axes 2 contains 2 objects of type image, line. Axes 3 contains 2 objects of type image, line. Axes 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. Axes 1 contains 2 objects of type image, line. Axes 2 contains 2 objects of type image, line. Axes 3 contains 2 objects of type image, line. Axes 4 contains 2 objects of type image, line.

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

свернуть все

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

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

Имена файлов изображений, заданные как N массив ячеек -element N имен файлов.

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

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

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами 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 для возврата частично обнаруженных галочек. Функция заполняет отсутствующие обнаружения точек ключа [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 логики. Функция выводит то же количество логиков, что и входа изображений. A true значение указывает, что шаблон был обнаружен в соответствующем изображении. A false значение указывает, что функция не обнаружила шаблон.

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

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

Ссылки

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

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

.
Введенный в R2014a