无论是aruco还是apriltag二维码标定板检测的思路是提取一块四边形的区域,这个区域具有比周围亮度更低的特点。这个思路的主要优点是尽可能多的检测出所有可能的二维码,但是根据采集数据的环境极有可能出现异常线段,然后再根据二维码的编码值可以对野值进行剔除实现识别与定位。

ArUco

ArUco是一个开源的小型的AR虚拟现实增强库,已经集成在OpenCV3.0以上的版本,它除了用于现实增强,还很用于实现一些机器视觉方面的应用。

ArUco下载地址:https://sourceforge.net/projects/aruco/files/

ArUco开源库的几个特点如下:

1.基于C++;

2.仅依赖于OpenCV(≥2.4.9)和Eigen3;

3.BDS开源。

一个ArUco标记外围都有一组黑色边框,同时内部有着确定该标记ID的二维矩阵组合而成。黑色的边框能加速标记在图像中的检测速度,内部的二维编码能唯一识别该标记,同时进行错误检测和错误修复。标记的大小确定了内部矩阵的大小,例如4x4大小的标记有16个bit

aruco标志在环境中通常存在旋转,然而,检测的过程需要确定旋转的初始方向,因此,每一个角点在二维编码的过程中就会被唯一确定。

标记字典是一组被用来进行特殊应用的标记,它大大简化了每个marker二维码列表。字典的主要属性就是字典的大小和标志的大小:

字典大小:合成字典的marker的数量 (50 100 250 1000)

标志大小:marker的大小(bits 16 25 49 ...)

aruco模块中包含了一些已经预先定义好不同大小和数量的字典集

Aruco标记物生成

在检测之前,往往我们需要打印一些marker放到我们的环境中。Marker图案我们能通过drawMarker函数产生:

Aruco标记物检测

在包含ArUco标志的图片中,检测过程通常能返回被检测到的marker序列。每一个检测的Marker结果包括:

  • marker四个角点在图片中的位置

  • marker的id

Marker检测过程主要有两个步骤:

  • 检测Marker的候选区域。

  • 通过分析二维码确定marker

在opencv的ArUco模块中,主要通过detectMarkers()函数来完成,这个函数是整个模块中最重要的函数了,因为后续的函数处理几乎都依赖于该函数的检测结果。

位姿估计

当获取得到Marker的识别结果之后,就是确定相机姿态了。为了确定相机姿态,首先得知道相机的标定参数,内参和畸变。在估计每个ArUco标记的时候,我们能单独估计每个marker。如果你希望能从一系列的marker中估计一个pose,此时就需要ArUco Boards.

相机相对于marker的姿态是一个3d的旋转,从marker坐标系到camera坐标系。这个通过一个旋转和一个平移向量和描述。

标记坐标系统是假设z轴是朝外的,x是朝右边,y朝前进方向。标志角点在左上角点。

该库主要的类主要有:

aruco::Marker----视觉标志类;

aruco::MarkerDetector----视觉标志检测类;

aruco::MarkerPoseTracker----视觉标志姿态预估类;

aruco::MarkerMap-----视觉标志地图类;

aruco::MarkerMapPoseTracker----视觉标志地图姿态预估类;

aruco::CvDrawingUtils----绘图类;

注意:

aruco中的字典比如DICT_4X4_50是什么意思?

每个字典式表示位数和包含的标记数 标准的标记5×5位,0最小距离,4*4位表示marker标记要被划分的位数,边界为1比特位,所以4×4的marker识别时候会被分割为6×6的格子,最后面的数字表示字典里包含marker的个数,比如50个。

AprilTag

AprilTag是一个视觉基准系统,可用于各种任务,包括增强现实、机器人和摄像机校准。AprilTag检测可以计算标定板相对于相机的精确三维位置、方向和id。AprilTag库是用C实现的,没有外部依赖关系。该库可以很容易地包含在其他应用程序中,也可以移植到嵌入式设备上。即使在手机级处理器上也可以实现实时性能。

AprilTag的地址:

https://github.com/AprilRobotics/apriltag

AprilTag开源库的几个特点如下:

1.基于C;

2.不依赖其他第三方库;

3.BDS开源。

AprilTags在概念上类似于QR码,因为它们是一种二维条形码。然而,它们被设计成编码更小的数据有效载荷(4到12位之间),允许它们更可靠地被检测到,并且可以从更长的范围内被检测到。此外,他们是为高定位精度设计的,用户可以计算精确的AprilTag相对于相机三维位置。

所以一般AprilTag用于机器人领域比较多。

AprilTag的种类

AprilTag的种类叫家族(family),有下面的几种:

TAG16H5 → 0 to 29

TAG25H7 → 0 to 241

TAG25H9 → 0 to 34

TAG36H10 → 0 to 2319

TAG36H11 → 0 to 586

ARTOOLKIT → 0 to 511

也就是说TAG16H5的家族(family)有30个,每一个都有对应的id,从0~29。

相关的论文

AprilTag: A robust and flexible visual fiducial system, ICRA 2011;

AprilTag 2: Efficient and robust fiducial detection, IROS 2016;

One useful application of AprilTags is camera calibration (AprilCal: Assisted and repeatable camera calibration, IROS 2013).

两者优劣比较

Aruco(在OpenCV中实现)

优点

  • 易于设置(使用现成的aruco标记生成器、opencv和ros实现等)

  • 更少的错误检测(使用默认参数)

缺点

  • 较新版本的aruco是GPL许可的,因此opencv在aruco还是BSD的时候仍然停留在旧的实现上。

  • 更容易在中长距离旋转模糊

  • 更多适配参数

  • 计算量更大

AprilTag(在AprilTag  ros中实现)

优点

  • 更少的适配参数

  • 即使在远距离也能很好地工作

  • 美国宇航局使用

  • 更灵活的标记设计(例如,标记可以不一定是正方形)

  • 计算量较少

缺点

  • 不太直接地进行配置和设置(没有opencv实现AFAIK,只有ros实现,获得标记的步骤稍微多一些)

  • 更多错误检测(使用默认参数)

接下来本公众号将从opencv的中aruco模块中给的教程从理论到实践进行讲解。敬请期待ing...

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

往期线上分享录播汇总

第一期B站录播之三维模型检索技术

第二期B站录播之深度学习在3D场景中的应用

第三期B站录播之CMake进阶学习

第四期B站录播之点云物体及六自由度姿态估计

第五期B站录播之点云深度学习语义分割拓展

第六期B站录播之Pointnetlk解读

[线上分享录播]点云配准概述及其在激光SLAM中的应用

[线上分享录播]cloudcompare插件开发

[线上分享录播]基于点云数据的 Mesh重建与处理

[线上分享录播]机器人力反馈遥操作技术及机器人视觉分享

[线上分享录播]地面点云配准与机载点云航带平差

如果你对本文感兴趣,请点击“原文阅读”获取知识星球二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作:群主微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

ArUco与AprilTag简介相关推荐

  1. opencv中ArUco模块实践(1)

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  2. OpenCV中检测ChArUco的角点(2)

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  3. 如何快速生成不同系列的Apriltag码?

    简 介: 关键词: Apriltag,生成 #mermaid-svg-gQ51lWibsz1erNha {font-family:"trebuchet ms",verdana,ar ...

  4. AprilTag二维码检测和定位

    AprilTag简介 AprilTag类似于二维码QR codes(Quick Response Code:全称为快速响应矩阵图码) AprilTag可用于多种用途,包括相机标定.目标大小估计单目距离 ...

  5. AprilTag详解-Python实现

    文章目录 一.AprilTag简介 二.AprilTag原理 三.AprilTag图像生成 四.OpenMV实现 五.pupil-apriltags 六.Python代码实现 1.检测apriltag ...

  6. Extrinsic Calibration of a Camera and Laser Range Finder (improves camera calibration)阅读笔记

    这篇文章介绍了一种2D激光雷达与相机的标定方法. 标定板相对于相机的位姿可以由对应的标定库获得,如ArUco.Apriltag... 激光雷达打在标定板上点可以由直线检测获得. 下面介绍算法的流程: ...

  7. apriltag linux 编译,无法为python包“apriltag”、“apriltags”和“aruco”构建轮子

    尝试为python安装包"apriltag"."apriltags"和"aruco",但在尝试构建wheel时出错.在 我尝试过在命令提示符 ...

  8. Apriltag原理简介及源代码

    概要 AprilTag视觉定位Python实现 AprilTag过程 AprilTag边缘检测 四边形检测 编码与解码 实现代码 AprilTag视觉定位Python实现 AprilTag是一个视觉基 ...

  9. 基于Python下的Apriltag检测

    简 介: 在Windows下下载Aprilttags检测工具包,对于图片中的Apriltag检测进行了初步的实验. 关键词: Apriltag #mermaid-svg-ycUj7DuM4cfFAv9 ...

最新文章

  1. php 支付宝支付 简书,支付宝支付接口
  2. OpenGL 帧缓冲区
  3. Oracle Database 快捷版 安装 连接
  4. 05《软件需求模式》阅读笔记
  5. 【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)
  6. 解决Android中的ERROR: the user data image is used by another emulator. aborting的方法
  7. 从零学习perl语言--perl学习笔记(1)--从基础概念到hello world编写(本文约1000字)
  8. c/c++中的引用变量
  9. C--计算求1+2!+3!+.......+n!
  10. iOS: 详细的正则表达式
  11. TeX排版系统安装使用
  12. 免费抖音视频解析网站_抖音规则解析:抖音视频为什么能火?推荐规则是什么?【揭秘】...
  13. 火车头 php 插件,插件 - 火车采集器官方博客
  14. 震惊!某徐姓诗人竟,,
  15. olcd12864的u8g2库_OLED屏显示功能-U8glib库函数大全。
  16. Qt 实现录音在线转文字
  17. Oracle创建和查询索引
  18. 流体力学方程的秘密(1)
  19. Mac 终端提示You have not agreed to the Xcode license agreements
  20. 一行代码实现访客人次统计

热门文章

  1. 测试心得:微图书销售小程序
  2. HTML5与CSS3权威指南之CSS3学习记录
  3. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)
  4. C++ 笔记(08)— 数组(数组的声明、初始化、访问及修改数组元素)
  5. Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]
  6. 河马搞笑GIF动态图网站(http://gif.hemaj.com)上线,老司机快上车!
  7. QLocalServer与QLocalSocket进程通讯
  8. Spring.Net Aop
  9. Linux 常用技巧记录
  10. python实时读取日志并打印关键字怎么实现_面试宝典_Python.运维开发.0004.用Python实现tail实时输出新增日志?...