exponenta event banner

readAprilTag

Обнаружение и оценка позы для тега на изображении

Описание

пример

[id,loc] = readAprilTag(I) обнаруживает теги на входном изображении I и возвращает расположения и идентификаторы, связанные с тегами.

[id,loc] = readAprilTag(I,tagFamily) определяет теги для только указанных семейств, tagFamily.

[___,pose] = readAprilTag(___,intrinsics,tagSize) возвращает положения тегов относительно заданных параметров камеры, intrinsics и размер тегов tagSize в дополнение к любой комбинации аргументов в предыдущих синтаксисах.

[___,detectedFamily] = readAprilTag(___) возвращает распознаваемые семейства Tager, detectedFamily.

Примеры

свернуть все

Чтение изображения в рабочую область.

I = imread("aprilTagsMulti.jpg");

Определите форматы AprilTag, чтобы искать по изображению.

tagFamily = ["tag36h11","tagCircle21h7","tagCircle49h12","tagCustom48h12","tagStandard41h12"];

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

[id,loc,detectedFamily] = readAprilTag(I,tagFamily);

for idx = 1:length(id)
        % Display the ID and tag family
        disp("Detected Tag ID, Family: " + id(idx) + ", " ...
            + detectedFamily{idx});
 
        % Insert markers to indicate the locations
        markerRadius = 8;
        numCorners = size(loc,1);
        markerPosition = [loc(:,:,idx),repmat(markerRadius,numCorners,1)];
        I = insertShape(I,"FilledCircle",markerPosition,"Color","red","Opacity",1);
end
Detected Tag ID, Family: 30, tag36h11
Detected Tag ID, Family: 32, tagCircle21h7
Detected Tag ID, Family: 98, tagStandard41h12
Detected Tag ID, Family: 195, tagCustom48h12
Detected Tag ID, Family: 884, tagCircle49h12

Отображение изображения с маркерами для указания угловых расположений обнаруженных тегов.

imshow(I)

Figure contains an axes. The axes contains an object of type image.

Считывание изображения, содержащего теги, в рабочую область. Отображение изображения.

I = imread("aprilTag36h11.jpg");
imshow(I)

Загрузите внутренние параметры камеры.

data = load("camIntrinsicsAprilTag.mat");
intrinsics = data.intrinsics;  

Укажите размер марки в метрах.

tagSize = 0.04;

Отмена искажения входного изображения с помощью собственных параметров камеры.

I = undistortImage(I,intrinsics,"OutputView","same");

Определите определенное семейство тегов и оцените положения тегов.

[id,loc,pose] = readAprilTag(I,"tag36h11",intrinsics,tagSize);

Задайте начало координат векторов осей и фреймов позиционных обозначений.

worldPoints = [0 0 0; tagSize/2 0 0; 0 tagSize/2 0; 0 0 tagSize/2];

Добавьте к изображению фреймы и идентификаторы тегов.

for i = 1:length(pose)
    % Get image coordinates for axes.
    imagePoints = worldToImage(intrinsics,pose(i).Rotation, ...
                  pose(i).Translation,worldPoints);

    % Draw colored axes.
    I = insertShape(I,"Line",[imagePoints(1,:) imagePoints(2,:); ...
        imagePoints(1,:) imagePoints(3,:); imagePoints(1,:) imagePoints(4,:)], ...
        "Color",["red","green","blue"],"LineWidth",7);

    I = insertText(I,loc(1,:,i),id(i),"BoxOpacity",1,"FontSize",25);
end

Отображение аннотированного изображения.

imshow(I)

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

свернуть все

Входное изображение, указанное как M-by-N-by-3 изображение в цветном цвете или изображение в градациях серого M-by-N.

семейства «Теги», указанные как одно или несколько допустимых семейств «Теги», перечисленных в этой таблице. Задание семейства может сократить время выполнения функции, ограничив поиск.

Семейство тегов
"tag16h5"
"tag25h9"
"tag36h11"
"tagCircle21h7"
"tagCircle49h12"
"tagCustom48h12"
"tagStandard41h12"
"tagStandard52h13"

Типы данных: char | string | cell

Внутренние параметры камеры, указанные как cameraIntrinsics объект.

Размер тегов в единицах мира (например, миллиметрах), заданный как положительный скаляр. Функция определяет размер тегов как длину между двумя соседними угловыми внешними черными кромками.

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

свернуть все

Идентификаторы тегов, возвращен вектор положительных целых чисел.

Местоположения тегов в изображении, возвращаемые в виде массива 4-by-2-by-N. Массив содержит местоположения (x, y) для каждого из четырех углов N тегов.

Позы тегов относительно камеры, возвращаемые в виде массива rigid3d объекты. Каждый объект инкапсулирует 3-D жесткое преобразование марки в тех же мировых единицах, что и tagSize входной аргумент. Начало координат каждого фрейма позиционного обозначения расположено в центре соответствующего позиционного обозначения.

Обнаруженные семейства тегов, возвращаемые в виде вектора строк.

Совет

  • Для приложений, которые требуют производительности в реальном времени, а также минимизируют ложноположительные обнаружения, рассмотрите возможность использования "tag36h11" марка семейства.

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

  • Для получения информации о предварительно созданных тегах для всех поддерживаемых семейств тегов см. раздел Предварительно созданные изображения тегов тегов в GitHub.

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