detectCircleGridPoints

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

Описание

Одно обнаружение сетки круга изображений

пример

imagePoints = detectCircleGridPoints(I,patternDims) обнаруживает круговую сетку в 2D истинном цвете или полутоновом изображении, I. Для получения дополнительной информации о круговых шаблонах сетки смотрите Круговые Шаблоны Сетки.

[imagePoints,imagesUsed] = detectCircleGridPoints(imageFileNames,patternDims) обнаруживает круговую сетку в файлах изображений, заданных imageFileNames, и дополнительно возвращает список изображений, в которых круговой сеткой является обнаруженный imagesUsed.

[___] = detectCircleGridPoints(images,patternDims) обнаруживает круговую сетку в заданных изображениях images.

Обнаружение сетки круга стереопары

пример

[imagePoints,pairsUsed] = detectCircleGridPoints(imageFileNames1,imageFileNames2,patternDims) обнаруживает круговую сетку в стереопарах файлов изображений, заданных imageFileNames1 и imageFileNames2. Функция дополнительно возвращает список пар, в которых шаблоном является обнаруженный pairsUsed.

[___] = detectCircleGridPoints(images1,images2,patternDims) обнаруживает круговую сетку в стереопарах файлов изображений, заданных images1 и images2.

Дополнительные аргументы

[___] = detectCircleGridPoints(___,Name=Value) задает опции с помощью одних или нескольких аргументов name-value в дополнение к любой комбинации аргументов от предыдущих синтаксисов. Например, detectCircleGridPointsi, patternDims, PatternType="symmetric") обнаруживает симметричную круговую сетку в заданной рабочей области.

Примеры

свернуть все

Загрузите изображение, содержащее круговой шаблон сетки в рабочую область.

imageFileName = fullfile(toolboxdir('vision'),'visiondata', ...
                'calibration','circleGrid','mono','image08.jpg');
I = imread(imageFileName);

Задайте размерности для кругового шаблона сетки.

patternDims = [8 11];

Обнаружьте круговые узлы решетки.

imagePoints = detectCircleGridPoints(I,patternDims,PatternType="symmetric")
imagePoints = 88×2

  395.1729  358.4451
  383.5573  388.4410
  370.8857  420.9698
  356.9887  456.5418
  341.6686  495.7388
  325.0617  538.9151
  306.5055  586.8763
  285.8323  640.1285
  436.4195  363.5016
  426.5806  393.4896
      ⋮

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

J = insertText(I,imagePoints,1:size(imagePoints,1));
J = insertMarker(J,imagePoints,'x',Color="green",Size=5);
imshow(J)
title("Detected a Circle Grid of Dimensions " + mat2str(patternDims))

Figure contains an axes object. The axes object with title Detected a Circle Grid of Dimensions [8 11] contains an object of type image.

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

imageDir = fullfile(toolboxdir('vision'),'visiondata', ...
                            'calibration','circleGrid','stereo');
leftImages = imageDatastore(fullfile(imageDir,'left'));
rightImages = imageDatastore(fullfile(imageDir,'right'));
images1 = leftImages.Files;
images2 = rightImages.Files;

Задайте размерности для кругового шаблона сетки.

patternDims = [4 11];

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

[imagePoints,pairsUsed] = detectCircleGridPoints(images1,images2,patternDims);

Отобразите точки от первых четырех изображений камеры один.

figure
t1 = tiledlayout(2,2,TileSpacing="compact",Padding="compact");
for i = 1:4
  nexttile
  imshow(images1{i}) 
  hold on
  plot(imagePoints(:,1,i,1),imagePoints(:,2,i,1),"gx");    
end
title(t1,"Camera 1")

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(pairsUsed);
figure
t2 = tiledlayout(2,2,TileSpacing="compact",Padding="compact");
for i = 1:4
  nexttile
  imshow(images2{i}) 
  hold on
  plot(imagePoints(:,1,i,2),imagePoints(:,2,i,2),"gx");    
end
title(t2,"Camera 2")

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.

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

свернуть все

Размерности шаблона в виде двухэлементного вектора, который представляет количество кругов в x и размерностях y изображения, соответственно. Для получения дополнительной информации о круговых шаблонах сетки смотрите Круговые Шаблоны Сетки.

АсимметричныйСимметричный

Asymmetric grid

Symmetric grid

Отобразите в виде 2D изображения истинного цвета или полутонового изображения.

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

Изображения в виде H-by-W-by-numColorChannels-by-numImages массив, где H и W описывают высоту и ширину каждого изображения, соответственно. numColorChannels является количеством цветовых каналов в каждом изображении, и numImages является количеством изображений.

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

Стереопара отображает от камеры один в виде H-by-W-by-numColorChannels-by-numImages массив, где H и W описывают высоту и ширину каждого изображения, соответственно. numColorChannels является количеством цветовых каналов в каждом изображении, и numImages является количеством изображений

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

Стереопара отображает от камеры два в виде H-by-W-by-numColorChannels-by-numImages массив, где H и W описывают высоту и ширину каждого изображения, соответственно. numColorChannels является количеством цветовых каналов в каждом изображении, и numImages является количеством изображений

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

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

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

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

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

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

Пример: detectCircleGridPointsi, patternDims, PatternType="symmetric") обнаруживает симметричную круговую сетку в заданной рабочей области.

Круговой шаблон сетки вводит в виде "asymmetric" или "symmetric".

Круговой цвет в виде "black" или "white". Выберите цвет для круга, который имеет самый сильный контраст с фоном.

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

свернуть все

Центральные координаты обнаруженной круговой сетки, возвращенной как M-by-2 матрица или M-by-2-by-numPairs-by-2 массив. M является количеством круговых сеток, обнаруженных, вычисленных как продукт количества круговых сеток, обнаруженных в каждой размерности. Каждая строка матрицы или массива задает x-y координаты центра круговой сетки.

  • Для одного изображений — Этим аргументом является M-by-2 матрица при обнаружении круговых сеток в одном изображениях.

  • Для стереопар — Этим аргументом является M-by-2-by-numPairs-by-2 массив при обнаружении круговых сеток в стереопарах изображений. numPairs является количеством пар изображений, в которых обнаруживается круговая сетка. imagePoints(:,:,:,1) возвращает точки в первый набор изображений и imagePoints(:,:,:,2) точки от второго набора.

Флаг обнаружения шаблона, возвращенный как логический вектор. Значение true в imagesUsed вектор указывает, что шаблон был обнаружен в соответствующем изображении.

Флаг обнаружения шаблона стереопары, возвращенный как логический вектор. Значение true в pairsUsed вектор указывает, что шаблон был обнаружен в соответствующей паре изображений.

Алгоритмы

Для кругового шаблона сетки, который будет обнаружен, должен шаблон:

  • Содержите по крайней мере 16 кругов

  • Полностью отобразьтесь в изображении одной камеры или в обоих изображениях пары стереофотоаппаратов

Введенный в R2021b