readAprilTag

Обнаружите и оцените положение для AprilTag в изображении

Описание

пример

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

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

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

[___,detectedFamily] = readAprilTag(___) возвращает распознанные семейства AprilTag, 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.

Прочтите изображение, содержащее AprilTags, в рабочую область. Отобразите изображение.

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

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

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

Задайте размер тега в метрах.

tagSize = 0.04;

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

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

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

[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 truecolor изображение или M -by- N полутоновое изображение.

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

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

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

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

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

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

свернуть все

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

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

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

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

Совет

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

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

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

Введенный в R2020b