主要内容

readAprilTag

检测和估计AprilTag在图像中的姿态

描述

例子

id疯狂的) = readAprilTag (检测输入图像中的AprilTags并返回与标记关联的位置和id。

id疯狂的) = readAprilTag (tagFamily只检测特定家族的AprilTags,tagFamily

___构成) = readAprilTag (___intrinsictagSize返回标签相对于指定摄像机固有参数的姿态,intrinsic以及标签的大小tagSize除了前面语法中的任何参数组合之外。

___detectedFamily) = readAprilTag (___返回已确认的AprilTag家族,detectedFamily

例子

全部折叠

将图像读入工作区。

我= imread (“aprilTagsMulti.jpg”);

指定要在图像中搜索的AprilTag格式。

tagFamily = [“tag36h11”“tagCircle21h7”“tagCircle49h12”“tagCustom48h12”“tagStandard41h12”];

检测标签和标签位置的图像,并读取标签id。

[id、loc detectedFamily] = readAprilTag(我tagFamily);idx = 1:长度(id)%显示ID和标签族disp (“检测到的标签ID,家庭:”(idx) + + id", "...+ detectedFamily {idx});%插入标记以指示位置markerRadius = 8;numCorners =大小(loc, 1);markerPosition = [loc (:,:, idx) repmat (markerRadius numCorners 1)];我= insertShape (,“FilledCircle”markerPosition,“颜色”“红色”“不透明度”1);结束
检测到的标签ID, Family: 30, tag36h11检测到的标签ID, Family: 32, tagCircle21h7检测到的标签ID, Family: 98, tagStandard41h12检测到的标签ID, Family: 195, tagCustom48h12检测到的标签ID, Family: 884, tagCircle49h12

显示带有标记的图像,以指示被检测标签的角落位置。

imshow(我)

图中包含一个轴对象。axis对象包含一个image类型的对象。

将包含AprilTags的图像读取到工作区中。显示图像。

我= imread (“aprilTag36h11.jpg”);imshow(我)

加载相机的固有参数。

data =负载(“camIntrinsicsAprilTag.mat”);intrinsic = data.intrinsics;

指定标签大小(以米为单位)。

tagSize = 0.04;

使用相机的固有参数校正输入图像。

我= undistortImage (intrinsic,“OutputView”“相同”);

检测AprilTags的一个特定家族,并估计标签的姿态。

(id、loc姿势)= readAprilTag(我“tag36h11”、intrinsic tagSize);

设置坐标轴向量和标记帧的原点。

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

向图像添加标记帧和id。

i = 1:长度(构成)获取坐标轴的图像坐标。imagePoints = worldToImage (intrinsic姿势(我)。旋转,...构成(i) .Translation worldPoints);%绘制彩色轴。我= insertShape (,“行”[imagePoints (:) imagePoints (2:);...: imagePoints (1) imagePoints (3:);: imagePoints (1) imagePoints (4:)),...“颜色”, (“红色”“绿色”“蓝色”],“线宽”7);我= insertText (loc (1: I),身份证(我),“BoxOpacity”,1,“字形大小”25);结束

显示带注释的图像。

imshow(我)

输入参数

全部折叠

输入图像,指定为——- - - - - -N- × 3的真彩色图像或——- - - - - -N灰度图像。

AprilTag族,指定为该表中列出的一个或多个有效的AprilTag族。指定一个族可以通过限制搜索来减少函数的运行时间。

AprilTag家庭
“tag16h5”
“tag25h9”
“tag36h11”
“tagCircle21h7”
“tagCircle49h12”
“tagCustom48h12”
“tagStandard41h12”
“tagStandard52h13”

数据类型:字符|字符串|细胞

相机的固有参数,指定为cameraIntrinsics对象。

标记的大小,以世界单位(如毫米)表示,指定为正标量。该函数将标记的大小定义为两个相邻的边角外黑色边之间的长度。

输出参数

全部折叠

标记id,返回一个正整数向量。

标签在图像中的位置,返回为4 × 2 × -N数组中。数组包含(xy)的位置为每个四个角N标签。

标记相对于相机的姿态,返回为数组rigid3d对象。每个对象将标签的三维刚性转换封装在相同的世界单位中tagSize输入参数。每个标签帧的原点位于相应标签的中心。

检测到的标记族,返回为字符串向量。

提示

  • 对于要求实时性能,同时又尽量减少假阳性检测的应用程序,可以考虑使用“tag36h11”家庭标签。

  • 对于需要更快的检测时间而不是支持的id数量的应用程序,请使用金宝app“tagStandard41h12”家庭标签。

  • 有关所有受支持的标记族的预生成标记,请参见金宝app在GitHub上预生成AprilTag图像

扩展功能

介绍了R2020b