利用自识别标记实现复杂场景下相机标定

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

   点击上方蓝字关注我!

之前我们说到该算法受限于棋盘格的约束,所以当棋盘被部分遮挡时,检测结果就不尽如人意,这篇文章给出了一个解决方法:用自识别标记来实现遮挡等复杂场景下的鲁棒的相机标定。

什么是自识别标记?

自识别标记在不同的论文中有不同称谓,比如self-identifying marker, self-identifying marker pattern, fiducial marker等, 在此我们统称为自识别标记。自识别标记乍一看有点类似我们常见的二维码,其每个标记具有唯一性。和二维码不同的是,自识别标记在实际应用中通常由多个一起组合成规则的标记阵列图案。如下图为8 x 4阵列。 

91ec3875ea46f5a924a379b4f256f3a6.png

自识别标记有哪些应用?

自识别标记主要有如下应用:相机标定、安防监控、机器人视觉导航、电影拍摄中的特效制作、增强现实等。

如下图所示是自识别标记用于无人机室内导航的一个例子。

11c9357df65d85cd37c7588e3bbb267e.jpeg

本文主要介绍自识别在相机标定中的应用。

CALibration Tag

CALibration Tag(简记为CALTag)是一种平面自识别标记,专门用于自动化相机标定。这种方法有如下几个必杀技完爆传统的标定方法:

1、几乎可以找全图像视野内所有的角点,相比之下,opencv自带的角点检测函数必须提前指定棋盘格大小,且只能找到矩形棋盘格形状内部的角点。

2、不需要所有的棋盘格出现在图像内。可用于棋盘被遮挡、只拍摄到部分棋盘等比较有挑战的环境。

如下图所示。普通棋盘格在部分可见(左图)和遮挡(中图)情况下均无法检测到角点。使用CALTag的棋盘格(右图)在既部分可见又被遮挡的情况下仍可以检测到角点。

38b126c64a75aeb8610cef1590f65c26.jpeg

3、适用于拍摄角度非常极端、光照变化比较大、相机畸变等情况。如下图所示,左上角图表示标记被部分遮挡情况下CALTag仍然可以检测到角点。中间一行表示在非常陡峭的拍摄角度和光照变化较大的情况下的识别效果仍然鲁棒。最下面一行表示在明显的阴影下和径向畸变下的鲁棒效果。

bd7a883473f21ba47baab3fe8d8ffbb9.jpeg

4、可以恢复出漏检的标记。这是因为每个标记是唯一的,可以从棋盘code数据表格中查找丢失的标记。

下图中红色圆圈表示角点,绿色*表示对标记code的采样点,品红色*表示猜测到的角点位置,品红色圆圈表示猜测到角点中经过重新验证后真正的角点。黄色圈圈表示在重新验证中被排除掉的点。

a93051d10b71f10fde6f5620db56b3e5.jpeg

5、极低的误警率,尤其当拍摄图案所在的场景非常复杂的时候。因为引入了唯一识别码并且按照一定的阵列排列,可以滤掉几乎所有的环境干扰。

6、全自动完成相机标定,不需要调参,不需要人工参与。

看起来是不是很诱人啊,它是如何做到的?下面对原理进行详细解释。

CALTag 检测算法原理简介

检测算法的基本流程图如下:

2f99cedb9664e2845b07b348736301fb.jpeg

1、首先输入一幅包含自识别标记的图片,如上图第一行第一个图。该图片中的标记可能被遮挡(倒U字形的遮挡)、还有一些环境的干扰(最左侧、右下角的一些灰色的图)。

2、然后是寻找可能的自识别标记区域。使用图像二值化、连通域计算、过滤规则等方法,最终保留了可能的自识别标记区域(上图标号为3的子图)。

3、然后进行角点检测,确定自识别标记的四个角点位置(图中标号为4的子图中红色的点)。然后采样其内部的二进制code并进行识别(上图中标号为5的子图,绿色的点表示采样的code被正确识别,最左侧和右下角的图形识别失败,被滤掉)。

4、根据已经识别的code对照先验已经知道的棋盘中code矩阵表,就可以知道丢失了哪些code,他们的角点应该在哪里(上图中标号为6的子图中的问号就是丢失的code对应的角点)。然后重新对这些恢复出来的用问号标记的角点进行角点验证算法,通过验证的角点(上图中标号为7的子图中的绿色角点)加入到已经检测好的角点的队伍中来,未通过验证的伪角点(上图中标号为7的子图中右下角那个点)排除掉。

5、最后输出的是检测到的每个角点(标定点)的图像坐标以及其在code矩阵表里的位置坐标。这样,如果事先给出棋盘中某个基准点在三维空间中的坐标,那么根据输出信息就可以计算出所有检测到的角点的三维空间坐标、图像坐标,就自动完成了对应关系的建立。

CALTag 图案设计

由于CALTag图案一般打印后张贴在自然环境中使用,需要考虑运算量、旋转不变、鲁棒性等从而保障在大部分环境下有较强的实用性,所以设计还是比较讲究的,需要注意一些细节。

下面以code尺寸M x N=4 x 4,边界尺寸K=2为例进行介绍。这也是推荐的设计模式。code尺寸的选择是综合考虑了codebook的大小和图案的物理尺寸而确定的。Code尺寸越大,codebook里的code就越多,如果实际上使用的只是有限的code,那么多出来的code也没什么卵用,但是实际打印出来的棋盘格里的code物理尺寸会变小,在拍摄距离较远时会影响识别效果。先来看下这种设计图案的示例。下图左称为一个marker,上图右为4x4的marker矩阵。

2cdc4ef96f026ba554e880a1e3c7c026.png

抛出2个问题自问自答:

1、为什么要用黑白两色的标记?不能用彩色吗,或者灰度图?

这和二维码为什么一般采用黑白两色设计的原理差不多:因为计算机世界就是0,1构成的,选择黑白这种对比强烈的颜色可以在不同光照情况下算法更加鲁棒,同时方便打印,打印成本也很低。

2、为什么中间4 x 4的识别码和最外边界之间要空出两行?

因为需要保证角点检测的范围内没有其他干扰。假设上图右中黄色圆圈内为检测角点时扫描的范围,绿色圆圈内表示检测到的角点。如果识别码和最外边界没有间隙,那么在角点检测的扫描范围内(黄色圆圈内)可能会出现干扰,从而影响对角点的判定。

参考资料

参考论文:

CALTag: High Precision Fiducial Markers for Camera Calibration

参考网站:

http://www.cs.ubc.ca/labs/imager/tr/2010/Atcheson_VMV2010_CALTag/

https://github.com/brada/caltag

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

8ede7c8c69dbb68a53533bf78ae079a6.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值