关于 AprilTag 视觉定位系统
AprilTag 是一个视觉基准库,在 AR、机器人、相机校准领域广泛使用。通过特定的标志(与二维码相似,但是降低了复杂度以满足实时性要求),可以快速地检测标志,并计算相对位置。 第一次接触 AprilTag 是去年智能车室内对弈组的时候了,那时候使用的摄像头硬件是 OpenMV,官方库里就集成了 AprilTag 的识别,在已知相机内参的情况下,单个 AprilTag 就能实现三维空间内的位姿定位。 虽然和 QR 码很像,但 AprilTag 视觉基准码有完全不同的目标和应用场景。使用 QR 码时,通常需要将摄像头与标签对齐,然后以相当高的分辨率拍摄它,获得数百个字节,比如一个网址;相比之下,视觉基准码只承载很小的信息(也许是 12 位),但即使它的分辨率非常低、光线不均匀或隐藏在图像的角落里,也能被自动检测和定位。 官网:https://april.eecs.umich.edu/software/apriltag.html 原理 AprilTag 团队主要的论文有两篇: ICRA 2011 - AprilTag: A robust and flexible visual fiducial system IROS 2016 - AprilTag 2: Efficient and robust fiducial detection 下文从检测器、编码系统两部分过一下原理(其实就是翻译原文)。 使用自然出现的特征一直是机器感知的重点,但人造特征在一些实验中也扮演了很重要的角色,可以简化一些并不关注自然特征的系统。论文设计了一种使用二维码的视觉基准系统,可以从单张图像中实现六个自由度上的定位。这一系统融合了之前的直线检测、数字编码技术,对遮挡、扭曲、镜头失真有更好的效果。 检测器 检测器设计为很低的假阴率,所以就有一个很高的假阳率。(真假表示识别正确与否,阴阳表示识别的结果是真或假,这里就是尽量不漏掉可能的矩形)编码系统会补偿这一过高的假阳率。 直线检测 计算像素的梯度→按照梯度大小排序→以梯度方向作为约束进行聚类→最小二乘计算直线 第一步是从图像中检测直线,方法与 ARTag 检测器的基本方法相似,计算每个像素点的梯度方向和梯度大小,并将像素点聚类成梯度方向和梯度大小相似的分量。 该聚类算法类似于 Felzenszwalb 的基于图的方法:创建一个图,每个节点代表一个像素;在相邻像素之间添加边,边权等于像素在梯度方向上的差值。然后将这些边按边权递增的方式进行排序处理:对于每条边,我们测试其两侧像素所属的集群是否应该连接在一起。 假设一个集群 n,我们把其中像素梯度方向的范围记为 D(n),梯度大小的范围记为 M(n)。也就是说,D(n) 和 M(n) 是标量值,分别表示梯度方向和梯度大小的最大值和最小值之差。对于 D(),必须小心处理 2π周期。然而,由于有用的边的跨度要比π小得多,这就很简单了。 给定 n 和 m 两个集群,如果满足以下两个条件,我们将它们连接在一起: $$D(n \cup m) \leq \min (D(n), D(m))+K_{D} /|n \cup m|$$ $$M(n \cup m) \leq \min (M(n), M(m))+K_{M} /|n \cup m|$$ 这条件可以直观理解:D() 和 M() 值小,表示分量内部变化小。如果两个集群联合起来后的 D() 和 M() 值,与单独的集群差别不大,则将它们连接在一起。参数 KD、KM参数允许分量变化范围适度增加,但随着集群变大,这种裕度会迅速缩小。...