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 object. The axes object 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 изображение истинного цвета или 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