ARToolKit的Marker(barcode码)的ID识别

以3*3的为例,


012
345
678

当然需要先在代码中设置

AR_MATRIX_CODE_TYPE matrixCodeType = AR_MATRIX_CODE_3x3_PARITY65;
arSetMatrixCodeType(arHandle, matrixCodeType);
先说明一下,这种码的0,6,8号位用于确定marker的方向,正方向的情况下,0,6号设置为黑色,8号为白色,这个是不变的。1号位是奇偶校验位。剩下的是数据位,依次为2,3,4,5,7,以这个顺序排序组成的二进制码对应的数字为ID。


在arGetMarkerInfo()函数中,对候选的marker2_num个marker标记进行遍历。对于每次遍历,arGetLine()函数通过将四边形的四条边进行线性拟合,提取到四条直线的交点,确定候选marker的区域。然后进入arPattGetIDGlobal()函数。

arPattGetIDGlobal()函数中主要有两个函数:①arPattGetImage2()  ②get_matrix_code()

①上边说的marker内部一共有3*3个小方格,每个小方格代表一位二进制位,在每个小方格中,程序进行了9个不同位置的采样(具体这个9是怎么来的还没咋看懂),取9个采样的灰度值的平均值,最后会得到9个方格对应的9个灰度值,储存在ext_patt[9]中。

②为先确定marker的方向,所以先取四个角上的0,2,6,8号位的灰度值,找出4个中的最大值和最小值,两个值的差如果小于某个阈值(30),则认为不是marker;如果大于阈值,接下来再设置一个阈值thresh=(max-min)/2;以thresh这个阈值将9个灰度值二值化为0或1,最后提取出数据位的码进行解码得到ID。



arPattGetIDGlobal()函数中的第一个函数 arPattGetImage2()中采样点是怎样确定的呢?

① get_cpara( world, local, para );world是手动设置的一个正方形的四个顶点坐标,local是检测到的标记物的四个点的坐标。利用此函数求得标记物的仿射变换矩阵para。

②例如标记物编码区是3 * 3个方格,每个方格采样九个,将这81个采样点在标准正方形中确定坐标,乘上para即可得到此点在捕获的图像帧中对应的坐标,然后进行采样。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值