自识别标记(self-identifying marker) -(5) 用于相机标定的CALTag图案设计

前面介绍了CALTag的工作原理、应用领域。如果我们想在实际项目中应用自识别标记,通常需要根据项目的特点来设计不同尺寸,不同数目,不同排列的图案,那么如何设计属于自己的图案呢?有什么要注意的呢?下面简单介绍一下。

CALTag图案设计

由于CALTag图案一般打印后张贴在自然环境中使用,需要考虑运算量、旋转不变、鲁棒性等从而保障在大部分环境下有较强的实用性,所以设计还是比较讲究的,需要注意一些细节。下面以code尺寸M x N=4 x 4,边界尺寸K=2为例进行介绍。这也是推荐的设计模式。
先来看下这种设计图案的示例:
这里写图片描述
上图左称为一个marker,上图右为4x4的marker矩阵。

1、code尺寸选取

code尺寸的选择是综合考虑了codebook的大小和图案的物理尺寸而确定的。Code尺寸越大,codebook里的code就越多,如果实际上使用的只是有限的code,那么多出来的code也没什么卵用,但是实际打印出来的棋盘格里的code物理尺寸会变小,在拍摄距离较远时会影响识别效果。

2、几个疑问

抛出2个问题自问自答:
1、 为什么要用黑白两色的标记?不能用彩色吗,或者灰度图?
这和二维码为什么一般采用黑白两色设计的原理差不多:因为计算机世界就是0,1构成的,选择黑白这种对比强烈的颜色可以在不同光照情况下算法更加鲁棒,同时方便打印,打印成本也很低。
2、 为什么中间4 x 4的识别码和最外边界之间要空出两行?
因为需要保证角点检测的范围内没有其他干扰。假设上图右中黄色圆圈内为检测角点时扫描的范围,绿色圆圈内表示检测到的角点。如果识别码和最外边界没有间隙,那么在角点检测的扫描范围内(黄色圆圈内)可能会出现干扰,从而影响对角点的判定。

3、限制因素

4行4列总共16bit,其中前面p=10位是真正的数据位,后面的MN-p=16-10=6位是CRC校验位。这样总共就得到2的p次方共1024个不同的code。但是,不是所有牛奶都叫特仑苏,不是所有的code都能使用。需要考虑两个限制因素:
1、 每个code和其他code最小汉明距离为2的限制。这是为了避免10bit的code因为外界的干扰造成某些位发生翻转(从0变为1或者从1变为0)。
2、 只保留10bit 数据位中25%~75%比例为1的那些code。这是因为在自然环境中的纹理出现大部分是黑或白的概率比较大,举个极端的例子就明白了,比如上图左的情况,code全是1(白),这在自然界中很常见,这时候的code很容易和自然场景弄混淆;但是上图右中黑白相间且位置不同的情况非常少。所以要剔除掉黑白比例过大或过小的情况。

4、设计结果

使用贪心查找法来寻找有效的code数目。对于1024个code来说:
由于上述限制因素2,排除掉30个code
由于对称性限制,排除掉302个code
因此剩下692个有效的code
假如最小汉明距离设置为3,则最后剩下的有效code数目只有280个。但是在我们的应用中,自识别标记是作为阵列使用的,他们是按照一定的顺序排列的,所以即使最小汉明距离设置为2,也可以检测出在任何选择下的单个bit翻转的情况。另外,CRC校验也不是吃素的,即使code的一整行像素被遮挡,仍然可以检测到结果。

后记

以上例子就是以棋盘格为示例的设计。实际使用时需要指定具体的行数和列数,以及从哪个code开始(通常在设计多个棋盘格时用到)等参数。另外除了这种棋盘格式的阵列,还有一种作者更推荐的蝴蝶结式阵列,这种阵列相对棋盘格阵列更有优势,但是设计和使用会相应复杂一点。具体见参考论文。

参考论文:
CALTag: High Precision Fiducial Markers for Camera Calibration

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值