一种Maxicode条码的快速定位方法和系统与流程

文档序号:14871636发布日期:2018-07-07 00:39阅读:372来源:国知局

本发明涉及条码识读技术领域,具体是maxicode条码的快速定位方法和系统。



背景技术:

条形码(简称条码)可分为一维条码和二维条码,一维条码是由一组规则排列的条、空以及对应的字符组成的标记,“条”指对光线反射率较低的部分,“空”指对光线反射率较高的部分,这些条和空组成的数据表达一定的信息。二维条码是用特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的矩形方阵记录数据符号信息的新一代条码技术。在日常生活和工业应用中,条码的使用越来越广泛,诸如:零售行业、物流行业、金融行业对条码的使用需求越来越大。条码技术的发展非常迅速,条码技术的发展对相应的条码扫描设备提出了更高的要求。

目前常用条码中有一种叫做maxicode的条码,是美国知名的ups(unitedparcelservice)快递公司认知到利用机器辨读资讯可有效改善作业效率、提高服务品质而1980年代晚期研发的条码。maxicode具有复杂而坚固的错误纠正能力,以确保符号中的资讯是正确的,就算条码受到部份损毁,内部储存的资讯仍可完整读出,最大优点在於其解码速度相当快。现有技术中maxicode定位方法有模版匹配法和等间隔边缘寻找法。模版匹配法用用方波构建一个一维定长模板,长度为k。取图像的一行,求模板与该行开始的k个象素值的互相关值,然后依次移动模板,记录互相关值并与预先定义好的阈值比较,如大于阈值,则记录模板中心的位置。然后用同样的方法在模板中心所在的列进行匹配。如行列都匹配,就认为找到maxicode的中心。等间隔边缘寻找法通过对各行分别从左到右扫描,记录边缘的位置,然后对得到的边缘位置进行检查,寻找六个几乎等间隔的边缘。将上述过程在水平、垂直、45度、135度四个方向上进行,若以某点为中心四个方向都检测到等间隔边缘,就认为找到一个maxicode条码中心定位标志。模板匹配法容易理解和实现,但存在明显缺陷。当处理的图像分辨率不同时,就应改变模板大小。对于一幅未知的图像,需要用不同大小的模板去匹配,并从中选择合适的模板,所以模版匹配法不适用于获取的图像中的maxicode的大小未知的情况。



技术实现要素:

本发明的目的,主要是解决现有技术中,定位速度慢,对图像品质要求高,准确度低下的问题。

为了解决上述技术问题,本发明采用下述技术方案:

一种maxicode条码的快速定位方法,其特征在于,包括以下步骤:

s1:每rowspace=4行取一条水平扫描线,计算梯度,找出竖直边缘;

s2:计算相邻相似边缘距离;

s3:对比相邻相似边缘距离,找出拟牛眼中心在水平方向的十二个竖直边缘;

s4:由所述十二个竖直边缘计算相似边缘点距离的方差修正值和所述拟牛眼中心所在列,记录并观察所述两个数据,剔除不合理点;

s5:以当前行和计算出的拟牛眼中心所在的列为基准,向上向下分别寻找6个水平边缘;

s6:对比相邻相似边缘的距离,确认竖直方向的十二个水平边缘位置是否合理;

s7:由所述十二个水平边缘计算相似边缘点距离的方差修正值和拟牛眼中心所在行,记录并观察所述两个数据,剔除不合理点,并记录结果;

s8:全图扫描结束,获得每个拟牛眼中心的行列坐标及两个修正方差;

s9:对找出的多个拟牛眼中心按拟牛眼中心之间的距离进行归类;

s10:在同一类拟牛眼中心中再进一步合并相同的拟牛眼中心,并通过拟牛眼中心的两个修正方差、合并个数计算出一个标识其为牛眼中心可能性大小的权值;

s11:在每一类中通过对比权值找出最佳的牛眼中心。

所述s1步骤中,取出梯度值的绝对值大于阈值thr的正极大值或负极小值,然后在连续的若干个极大值(或极小值)中取出绝对值最大的那个极值点作为边缘点记录下来,其中,最小梯度阈值取thr0=2.5,每条水平扫描线的初始梯度阈值设为thr=thr0,当梯度极值由正极大值变为负极小值,或由负极小值变为正极大值时,梯度阈值更正为:thr=max(thr0,v*ratio),其中v为上一个边缘的梯度值的绝对值,ratio取0.22。

所述s3步骤中,根据上一个相邻相似边缘的距离给出当前相邻相似边缘的距离的上限和下限,然后检查当前相邻相似边缘的距离是否在这个范围中,如果连续9个相邻相似边缘的距离都满足这个条件,则该十二个边缘即为拟牛眼中心在水平方向的十二个边缘。

所述s4步骤中,如果所述十二个竖直边缘计算相似边缘点距离的方差修正值大于阈值10,则剔除该拟牛眼中心,如果该拟牛眼中心可减小透视变换带来的误差小于所述十二个竖直边缘中第五个边缘值或者大于第六个边缘值,则剔除该拟牛眼中心。

所述s9步骤中,设置一个区分不同类的距离阈值classdistancethr(取为200),第一个拟牛眼中心的类号设为1,然后计算未分类拟牛眼中心与已分类拟牛眼中心之间的距离,如果距离小于classdistancethr,则两拟牛眼中心的类号相同,若该拟牛眼中心与所有已分类的拟牛眼中心的距离都大于classdistancethr,则给它设一个新的类号。

所述s10步骤中,设置一个区分不同牛眼中心的距离阈值centerdistancethr(取为0.5),在同一类中,若两拟牛眼中心的距离小于此阈值,则合并两拟牛眼中心,包括将两拟牛眼的修正方差累加在一起、计数器加1、合并的拟牛眼中心的行列坐标从两拟牛眼中心中随机选一个。

一种maxicode条码的快速定位系统,其特征在于,包括以下模块:

水平线扫描模块:设置水平扫描线并计算边缘值;

边缘计算模块:计算并对比相邻相似边缘距离,找出拟牛眼中心在水平方向的十二个竖直边缘;

数据清洗模块:根据所述十二个竖直边缘计算相似边缘点距离的方差修正值和所述拟牛眼中心所在列,记录并观察所述两个数据,剔除不合理点数据;

分类模块:对找出的多个拟牛眼中心按拟牛眼中心之间的距离进行归类;

合并模块:在同一类拟牛眼中心中再进一步合并相同的拟牛眼中心,并通过拟牛眼中心的两个修正方差、合并个数计算出一个标识其为牛眼中心可能性大小的权值,并在每一类中通过对比权值找出最佳的牛眼中心。

所述水平线扫描模块每4行取一条水平扫描线,每一条水平扫描线上每隔一个像素计算梯度值;

所述边缘计算模块计算水平边缘,通过初始梯度阈值取为前面找到拟牛眼中心在水平方向的第十二个边缘后的梯度阈值,再从基准点出发,分别向上和向下找最多6个水平边缘即停止;

所述合并模块对比权值,如果权值太低,该类中无牛眼中心。

本发明的上述技术方案相比现有技术具有以下优点:

1、隔多行扫描,而不是每行都扫描,成倍提升处理速度;2、不是简单的寻找等间隔,因为透视变换较严重maxicode码不是等间隔的,根据前一个间隔确定下一个间隔的范围,该范围与前一个间隔的大小相关,并且该范围的确定是通过对不同大小的maxicode码进行统计计算所得,更容易找出大小不同的、透视变换较严重maxicode码的牛眼。3、不是简单的通过计算边缘的平均值来确定牛眼中心的位置,因采用的计算牛眼中心位置的公式能减少透视变换较严重时带来的误差,可以计算出较准确的牛眼中心。

附图说明

为了使本发明的内容更容易被清楚的理解,下面根据本发明的具体实施例并结合附图,对本发明作进一步详细的说明,其中

图1是maxicode条码示例图。

图2是maxicode定位图形尺寸。

图3是水平边缘与竖直边缘示意图。

图4是相似边缘示意图。

图5是梯度计算示意图。

图6是本发明的一种maxicode条码的快速定位方法和系统的一个实施例的需要计算梯度的位置示例图。

图7是本发明的一种maxicode条码的快速定位方法和系统的一个实施例的扫描点示意图。

图8是本发明的一种maxicode条码的快速定位方法和系统的一个实施例的牛眼边缘编号示意图

图9是本发明的一种maxicode条码的快速定位方法和系统的一个实施例的工作流程图。

图10是本发明的一种maxicode条码的快速定位方法和系统的一个实施例的系统框图。

具体实施方式

如图1所示,maxcode条码是一种固定长度(尺寸)的矩阵式二维条码,它由紧密相连的多行六边形模块和位于符号中央位置的定位图形组成。maxicode符号具有一个唯一的中央定位图形(称为牛眼),为三个黑色的同心圆环,用于扫描定位,各同心圆的名义尺寸如图2所示。

如图3所示,水平边缘为边缘走向偏向水平方向的边缘,竖直边缘为边缘走向偏向竖直方向的边缘。

如图4所示,梯度方向同向(即灰度走向相同)的边缘点称为相似边缘,梯度方向反向的边缘点称为非相似边缘。途中a与c互为相似边缘(因为它们都是左白右黑的边缘),b与d互为相似边缘(因为它们都是左黑右白的边缘),而a与b不互为相似边缘。

如图5所示,梯度用于找边缘,计算像素点x22处梯度的公式为:

dx=((x13+x23+x33)-(x11+x21+x31))/3;

dy=((x31+x32+x33)-(x11+x12+x13))/3;

对水平扫描线,只计算dx,对竖直扫描线,只计算dy。

在找到正确的牛眼中心之前,可能会找到比较多的疑似牛眼中心的点,称这些点为拟牛眼中心。通过条件的一步步增强,会剔除错误的拟牛眼中心,最终找出正确的牛眼中心。

如图9所示,在一个实施例中,本发明一种maxicode条码的快速定位方法步骤为:

每rowspace=4行取一条水平扫描线,计算梯度,找出竖直边缘;

计算相邻相似边缘的距离;

对比这个距离,找出拟牛眼中心在水平方向的十二个竖直边缘;

由上述十二个竖直边缘计算相似边缘点距离的方差修正值和拟牛眼中心所在列。记录并观察上述两个数据,剔除不合理的拟牛眼中心;

以当前行和计算出的拟牛眼中心所在的列为基准,向上向下分别寻找6个水平边缘;

对比相邻相似边缘的距离,确认竖直方向的十二个水平边缘位置是否合理;

由上述十二个水平边缘计算相似边缘点距离的方差修正值和拟牛眼中心所在行。记录并观察上述两个数据,剔除不合理的拟牛眼中心,并记录结果(避免在下一条水平扫描线上重复计算);

全图扫描结束,获得每个拟牛眼中心的行列坐标及两个修正方差;

对找出的多个拟牛眼中心按拟牛眼中心之间的距离进行归类;

在同一类拟牛眼中心中再进一步合并相同的拟牛眼中心,并通过拟牛眼中心的两个修正方差、合并个数计算出一个标识其为牛眼中心可能性大小的权值;

在每一类中通过对比权值找出最佳的牛眼中心(或者由于权值太低,该类中无牛眼中心)。

其中,每4行取一条水平扫描线,每一条水平扫描线上每隔一个像素计算梯度值,这样子整张图像需要计算梯度的像素数约为图像大小的八分之一,可以提高运算速度。如图6所示,整个表格表示一张图像,每个格子表示一个像素,该图像有3条水平扫描线,深色格子表示要计算该位置的梯度值,而其他位置的梯度值则不要计算。

如图7所示,横轴表示扫描线上点的位置,纵轴表示扫描线上各点的梯度值。易知梯度值为正极大值或负极小值的位置可能为边缘点。取出梯度值的绝对值大于阈值thr的正极大值或负极小值,然后在连续的若干个极大值(或极小值)中取出绝对值最大的那个极值点作为边缘点记录下来。这样找出的边缘点具有极大值边缘与极小值边缘相互交替的特点。其中,点c、h、m为边缘点,而其他字母表示的点不是边缘点。最小梯度阈值取thr0=2.5,设置比较小,以适应低对比度的情形。每条水平扫描线的初始梯度阈值设为thr=thr0。当梯度极值(绝对值大于thr)由正极大值变为负极小值,或由负极小值变为正极大值时,梯度阈值更正为:thr=max(thr0,v*ratio);其中v为上一个边缘的梯度值的绝对值,根据经验,ratio取0.22较好。

找出拟牛眼中心在水平方向的十二个边缘相邻相似边缘的距离的合理范围为闭区间[down,up]=[6,69]。找拟牛眼中心的十二个边缘的方法是:根据上一个相邻相似边缘的距离给出当前相邻相似边缘的距离的上限和下限,然后检查当前相邻相似边缘的距离是否在这个范围中。如果连续9个相邻相似边缘的距离都满足这个条件,则该十二个边缘即为拟牛眼中心在水平方向的十二个边缘。如图8所示,设p为牛眼中各边缘的编号,d[p]表示边缘p与相邻相似边缘p-2的距离,p取2,3,4,…,11。设d为上一个相邻相似边缘的距离,上下限函数fup(d)和fdown(d)表示当前相邻相似边缘的距离的上下限。若对p=3,4,…,11,都有fdown(d[p-1])≤d[p]≤fup(d[p-1])成立,则认为找到了拟牛眼中心的十二个边缘。另外,由牛眼尺寸的特点,可以知道,不可以对所有的d[p]都用同一个上下限函数,因此条件更正为:

各上下限函数的一种取法是:

找出拟牛眼中心在水平方向的十二个边缘的具体算法如下:

将一条水平扫描线上的所有边缘点位置依次存入数组aj中,将相邻相似边缘的距离存入数组ajgap中。aj[i]表示第i个边缘点(其中i=0,1,2,…),ajgap[i]=aj[i]-aj[i-2]。aj[kstart]表示拟牛眼中心的第一个边缘点,aj[k]表示当前边缘点。

初始时,kstart=0,k=-1,然后做如下处理:

a、k自加1

b、若k-kstart=0

检查当前边缘点k是否为左白右黑边缘,是,转到d,否则kstart=k+1,转到a

c、若k-kstart>1

若ajgap[k]>up或者ajgap[k]<down,做如下操作,然后转到a

检查当前边缘点k是否为左白右黑边缘,是kstart=k,否则kstart=k-1

否则,转到d

d、根据k-kstart的取值情况分别处理

若k-kstart<3,转到a

若2<k-kstart<6,做如下操作,然后转到a

若ajgap[k]>fup(ajgap[k-1])或者ajgap[k]<fdown(ajgap[k-1])

若k-kstart=4,kstart=k-2,否则kstart=k-1

若k-kstart=6,做如下操作,然后转到a

若ajgap[k]>fup6(ajgap[k-1]),kstart=k-2

否则若ajgap[k]≥fdown6(ajgap[k-1]),无操作

否则若ajgap[k]≥fdown(ajgap[k-1]),kstart=kstart+2

否则,kstart=k-2

若k-kstart=7,做如下操作,然后转到a

若ajgap[k]>fup7(ajgap[k-1])或ajgap[k]<fdown7(ajgap[k-1])

若ajgap[k]≤fup(ajgap[k-1])且ajgap[k]≥fdown(ajgap[k-1])且ajgap[k-1]≤fup(ajgap[k-2]),kstart=kstart+2;

否则,kstart=k-1

若k-kstart=8,做如下操作,然后转到a

若ajgap[k]>fup8(ajgap[k-1])

若ajgap[k]≤fup6(ajgap[k-1])且ajgap[k-2]<fup(ajgap[k-3])kstart=kstart+2

否则若ajgap[k]≤fup(ajgap[k-1]),kstart=kstart+4

否则,kstart=k-2

否则若ajgap[k]<fdown8(ajgap[k-1]),kstart=k-2

若k-kstart=9,做如下操作,然后转到a

若ajgap[k]>fup(ajgap[k-1])或者ajgap[k]<fdown(ajgap[k-1]),kstart=k-1

若k-kstart=10,做如下操作,然后转到a

若ajgap[k]>fup(ajgap[k-1])

若ajgap[k]≤fup6(ajgap[k-1])且ajgap[k-2]≥fdown(ajgap[k-3])

kstart=kstart+4

否则,kstart=k-2

否则若ajgap[k]<fdown(ajgap[k-1])

若ajgap[k]≥fdown8(ajgap[k-1])且ajgap[k-2]≥fdown6(ajgap[k-3])且ajgap[k-4]≤fup(ajgap[k-5]),kstart=kstart+2;

否则,kstart=k-2

其他(即k-kstart=11),做如下操作,然后转到a

若ajgap[k]>fup(ajgap[k-1])或者ajgap[k]<fdown(ajgap[k-1]),kstart=k-1

否则,从kstart到k的十二个边缘即为拟牛眼中心的十二个边缘,记录这十二个边缘,并做如下操作

若ajgap[kstart+6]≤fup(ajgap[kstart+5])且ajgap[kstart+8]≥fdown6(ajgap[kstart+7])且ajgap[kstart+10]≤fup8(ajgap[kstart+9]),kstart=kstart+2

否则若ajgap[kstart+8]≥fdown(ajgap[kstart+7])且ajgap[kstart+10]≥fdown6(ajgap[kstart+9]),kstart=kstart+4

否则,kstart=kstart+6

由拟牛眼中心的十二个边缘计算相似边缘点距离的方差修正值和拟牛眼中心所在列,拟牛眼中心的十二个边缘的相邻相似边缘的距离为ajgap[kstart+i],其中i=2,3,4,…,11,共10个数。修正其中的两个数:

ajgap[kstart+6]=ajgap[kstart+6]*0.8781;

ajgap[kstart+7]=ajgap[kstart+7]*0.8781;

然后计算这10个数的方差修正值va,

然后设定一个阈值varlimit=10,当va>varlimit时,剔除掉该拟牛眼中心。

接下来计算拟牛眼中心所在的列meanj,

由上述公式计算出的牛眼中心可减小透视变换带来的误差。

如果meanj<aj[kstart+5]或者meanj>aj[kstart+6],则剔除掉该拟牛眼中心。

以当前行和计算出的拟牛眼中心所在的列为基准,向上向下寻找水平边缘,寻找水平边缘的方法与竖直边缘的方法类似,有两个地方不同,一是初始梯度阈值取为前面找到拟牛眼中心在水平方向的第十二个边缘后的梯度阈值,二是,从基准点出发,分别向上和向下找最多6个水平边缘即停止。

多个拟牛眼中心按拟牛眼中心之间的距离进行归类处理,设置一个区分不同类的距离阈值classdistancethr(取为200)。第一个拟牛眼中心的类号设为1,然后计算未分类拟牛眼中心与已分类拟牛眼中心之间的距离,如果距离小于classdistancethr,则两拟牛眼中心的类号相同,若该拟牛眼中心与所有已分类的拟牛眼中心的距离都大于classdistancethr,则给它设一个新的类号。

在同一类拟牛眼中心中合并相同的拟牛眼中心、计算牛眼中心可能性大小的权值拟牛眼的修正方差取为前面计算出来的拟牛眼的两个修正方差的均值。设置一个区分不同牛眼中心的距离阈值centerdistancethr(取为0.5)。在同一类中,若两拟牛眼中心的距离小于此阈值,则合并两拟牛眼中心,包括将两拟牛眼的修正方差累加在一起、计数器加1、合并的拟牛眼中心的行列坐标从两拟牛眼中心中随机选一个。

经合并之后的拟牛眼中心包含如下信息:拟牛眼中心的行列坐标、累加后的修正方差(va)、合并的拟牛眼中心个数(n)。定义一个权重标识合并后的拟牛眼中心是否更接近理想牛眼中心的权重weight,

weight=n*n/va

该权重越大,表示该拟牛眼中心越接近理想的牛眼中心。在同一类拟牛眼中心中找出权重最大的拟牛眼中心。设置一个权重阈值weiththr=0.35。当weight>0.35时表明该拟牛眼中心即为要找的牛眼中心,将其行列坐标输出即可。

显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1