exponenta event banner

detectCheckerboardPoints

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

Описание

пример

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

[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 элементов из N имен файлов.

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

Имена файлов для изображений камеры 2, заданные как массив ячеек N элементов из 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 когда изображения содержат высокий уровень искажения, что типично для камеры широкого поля зрения, такой как камера рыбьего глаза. Набор 'HighDistortion' кому false когда изображения не содержат высокого уровня искажения. Настройка 'HighDistortion' кому true может увеличить упругость к искажению изображения, но уменьшить скорость обработки.

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

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

свернуть все

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

Для стереопар 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-элементного вектора [высота, ширина]. Размеры шашки выражаются в виде числа квадратов.

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

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

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

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

Ссылки

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

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

.
Представлен в R2014a