ApriTag2 检测方法

论文:AprilTag 2: Efficient and robust fiducial detection

系统提升了之前基于灰度图的二维码检测性能。检测到之后进行解码,看是否是有效的AprilTag目标。新方法可进一步减小假阳性率。

A 经验总结

在大多数情况下,部分闭合的标签检测很少使用。闭合标签一般都会有1个或者多个位错误,大多数使用者都不会对包含错误位的标签进行解码,因为这会提升假阳性比率。目前,还未有已知的使用者接受标签包含两个以上的位错误,尽管此时会使用更快的解码算法。因此,提升检测速度要比恢复部分闭合的标签边界重要和有用的多。

B 自适应阈值


第一步,首先基于阈值将输入的灰度图像转换为黑白二值化图像。自适应阈值法的主要思想是找到每个像素周围区域的最小值和最大值。

具体实现时,作者将图像先分成4∗44*44∗4的像素小块,然后计算每个4∗44*44∗4小块内部的极值(这样方便循环,避免重重复遍历)。为了减小具有明显差异的像素块边界在极值计算时出现人为错误,在像素块的周围再次进行一次3∗33*33∗3的像素块极值提取,这样能够保证计算相邻像素时像素块跳变最小。接着,每个像素都被分配为黑或者白,基于极值的平均值((max+min)/2(max + min)/2(max+min)/2)作为阈值(图3b)。在实际应用中,只需要将标签上亮和暗的像素点区分出。图像区域上对比不明显的区域,使用灰度表示,这在后面的处理中为了节省时间会被剔除。

C 连续边界分割

基于二值化的图像,下一步是找出可能组成一个标签边界的边缘信息。由于边界相邻位置的灰度值对比明显,使用前向直接法区分边缘像素,接着将边缘像素连接到一起即可得到边界。但是,当标签尺寸过小或者距离摄像头较远时,标签边界只有一个像素宽度,此时这种边界检测方法可能会失效(边界区分不明显)。作者提出的解决方法是基于出现黑块和白块区域的特性,进行边界分割,从而得到更加精确的边界信息。

  • 黑色像素和白色像素连接的部分采用联合查找算法进行分割[15],见图3c,该算法会给出分割后每一部分一个单独的ID号作为标识;
  • 对于每队相邻的黑块和白块,将两个区域边界上的像素分为不同的聚类;、
  • 按照黑白块的ID号进行索引,采用哈希表进行高效地聚类;
  • 针对上面提到的黑白块间只有一个像素宽度的情况,允许白色像素同时出现在两个聚类。

    上图中的算法步骤主要涉及两个方面:
  1. 基于联合查找算法找出连通子区域
  2. 聚类像素点组成连续边界
  • 其中涉及联合查找算法基于哈希表的聚类需要进一步理解

D 四边形拟合

下一步主要是对每一个无序边界点组成的聚类拟合一个四边形,将点根据线段分为四组。但是,计算总线段拟合误差下最小下的的最优分组非常耗费资源。即便是有序的n个点,都有O(n4)O(n^4)O(n4)可能方式去分组。作者通过查找最小数量的角点,然后对角点的所有组合进行迭代,从而计算出一个大致的分组。

首先,对这些点按照绕中心点一致的弯曲角度进行整理排序。此排序可以定义整理后的像素点范围为“邻近点(neighboring points)”。对这些像素点单独进行遍历以计算累积的一阶和二阶矩统计值,这样可以使得这些像素点任意范围下的一阶和二阶矩计算都是一个固定的时间。

因为邻近点围成的窗口便是基于这些有序的边界聚类点,因此通过对该窗口遍历,并不断拟合线段,找出拟合均方误差函数的峰值点来实现角点的检测。采用PCA主分析法进行线段拟合,此方法里椭圆适合样本的均值和协方差。最好的拟合线段是与第一个主成分对应的特征向量。基于预先计算的一阶和二阶矩统计值,所有的候选线段拟合可以在O(n)O(n)O(n)时间内计算出来,n是这些边界点的数量。均方误差里最大的峰值便是候选的角点。

最后,迭代计算四个候选角点的所有排列,对候选四边形的每条边拟合线段。这一步中,选择四边形线段拟合均方误差最小的四个角点。预滤波处理时对一些较差的四边形拟合进行剔除,比如少于4个角点的,均方误差太大的,或这些角点的角度与90度偏差太大。

四边形拟合步骤输出一系列可用于解码的候选四边形(图3d)。四边形检测器可检测出环境中许多四边形形状的结构,包括物体表面的高光、开关、和单独的标签像素。解码步骤比较每个四边形和已知的ApriTags标签码的内容,滤除错误的候选四边形。

E 快速解码

作者采用较为简单直接的标签解码方法,具体是:对检测到的编码(包含其四个可能的旋转)和标签家族的每个便签编码进行异或(XOR)。一个标签被检测确认是根据某个对应编码与检测到的编码存在最小的汉明距离。但是,若限制位允许错误数量到两位或者更少,则可能枚举出所有O(n2)O(n^2)O(n2)种标签家族包含两位错误的有效编码。这些标签编码可以预先计算,然后存储在哈希表中,可以将解码的时间复杂度由O(n)O(n)O(n)降低到O(1)O(1)O(1), n为便签家族的数量。

F 边缘修正

基于阈值的二值化图像尽管分割和四边形边界检测有用,但是可能引入噪声。比如,边缘处的光影和炫光可能会严重影响阈值二值化后的边缘信息,使用此标签结果会导致定位精度变差。作者提出一种基于原始图像的自适应,小计算量方法去改进边缘。

主要思想是沿着候选四边形的边缘使用图像梯度拟合新的边缘,粗略估计原始AprilTag检测器的性能。沿着每个边缘,在均匀分布的采样点处,沿着法线方向到边缘找出最大梯度的位置。已知标签内部是黑色的,而且已知四边形内点的分布弯曲方向,便可以剔除那些非预期符号的点(比如源于噪声的独立点)。然后,沿着法线计算这些点的加权平均,权值是梯度幅值。沿着加权平均点的线便构成了四边形的边缘。四边形角点可以根据线的交叉点计算得到。

尽管边缘修正可以帮助改善非常小的标签的解码,但是若系统仅仅关注标签检测,则此处提出的边缘修正方法作用不大。但是当AprilTag标签用来进行位姿估计时,边缘修正算法能够提高标签的位置精度(该方法提高了边缘检测的精度,因此四边形的尺寸计算更加精确,有助于进行位置估计?)。

ApriTag2 检测方法相关推荐

  1. 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络

    一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年来被广泛用于计算机视觉领域.1998年Yann LeCun等提出的LeNet-5网络结构,该结构使得卷积神经网络可以端到端的训练,并应 ...

  2. od结构体大小_od内存断点的探析和检测方法

    作为一款流行的动态,OD 的成功离不开断点.可以说,断点成就了 OD,不难想象,如 果在调试过程中,下的断点全部失效了,那么 OD 就武功全废了.在前面的文章里,我曾介 绍 OD有三大断点:int3断 ...

  3. “半真半假”DeepFake换脸也能精准识别?阿里安全提出全新检测方法

    一段包含多个人脸的视频中,攻击者只对一个或者几个人的人脸进行伪造,这种"半真半假"的伪造情况能否被检测识别?近日,阿里安全图灵实验室宣布,其已成功打造出针对这种换脸视频的DeepF ...

  4. 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)

    作者 | 黄浴 来源 | 转载自知乎专栏自动驾驶的挑战和发展 [导读]在近日发布的<值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)>一文中,作者介绍了一部分各大公司和机构基于 ...

  5. 值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)

    作者 | 黄浴 转载自知乎专栏自动驾驶的挑战和发展 [导读]上周,我们在激光雷达,马斯克看不上,却又无可替代?>一文中对自动驾驶中广泛使用的激光雷达进行了简单的科普,今天,这篇文章将各大公司和机 ...

  6. 5种数据同分布的检测方法!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:小雨姑娘,康涅狄格大学,Datawhale成员 在数据挖掘比赛中, ...

  7. 旋转框检测方法综述:RotateAnchor系列

    ↑ 点击蓝字 关注极市平台 作者丨emiya@知乎 来源丨https://zhuanlan.zhihu.com/p/105881332 极市导读 本文主要介绍了RRPN.R3Det.ROITransf ...

  8. 值得一看的文本检测方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前  言 目前深度学习方法做文本检测比较普遍,但是也存在一些时候G ...

  9. PanoNet3D:一个基于激光雷达点云语义和几何理解的3D目标检测方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨黄浴@知乎 来源丨https://zhuanlan.zhih ...

最新文章

  1. 解题报告:luogu P4180 [BJWC2010]严格次小生成树(次小生成树、倍增LCA优化、O(mlogn) )
  2. 架设SharePoint工作组网站(上)
  3. python判断点在四边形内
  4. Jquery对象和dom对象获取html的方法
  5. python最小二乘法拟合_Python 普通最小二乘法(OLS)进行多项式拟合
  6. redistemplate注入为null_Windows DLL 注入技术
  7. 如何在ASP.NET 5和XUnit.NET中进行LocalDB集成测试
  8. 关于web前端的学习路线
  9. Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.21
  10. Maven的Settings.xml配置文件解释
  11. 计算机专业理科二本录取分数线,这7所211理科录取分数线较低,普通考生记得关注,2所有二本招生...
  12. SQL2K数据库开发二十一之索引操作创建索引
  13. 外媒:麦当劳、星巴克、必胜客开始在萨尔瓦多接受比特币支付
  14. JVM学习-分代收集算法
  15. Navicat for MySQL再谈之无奈之下还是去安装Navicat Premium
  16. Ubuntu配置软件源
  17. 微软产品关于首字母大写的解决方案
  18. BAT薪资大揭底:AI程序员80万太少!程序员薪资的天花板在哪?
  19. GD32F303固件库开发(7)----printf打印配置
  20. 基于机器学习的天气数据分析与预测系统

热门文章

  1. 爱立信助力银和瓷业打造智慧工厂;埃森哲2021财年全球营业收入达505亿美元;华为发布11大场景化解决方案 | 全球TMT...
  2. 泰坦尼克号入门学习(思维导图)
  3. 如何用服务器内存做系统盘,服务器内存扩容怎么做
  4. 什么是企业数据?企业工商数据如何获取的。
  5. AcWing 3215 网络延时
  6. spss三次指数平滑_15.2.2 指数平滑模型的SPSS操作(1)
  7. RabbitMQ实战指南之RabbitMQ架构及运转流程
  8. [BUGKU] [MISC]普通的二维码
  9. 极光推送之java后台封装REST API
  10. 文末福利|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!