tech_banner
...marker) -(5) 用于相机标定的CALTag图案设计_计算机..._CSDN博客

前面介绍了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\"\\\"\\\"\" \"\\\"\\\"\" 评论