基于游程编码思想的条码定位与识别方法

时间:2022-10-07 04:42:01

基于游程编码思想的条码定位与识别方法

【摘要】在复杂背景中的定位条码是图像式条码识别系统中的一个关键步骤,如何在复杂的背景中快速、自动地检测出条形码是研究的主要内容。首先介绍了条型码的编码结构。然后提出了一种基于游程编码思想条码定位识别方法。最后通过给出相关实验结果验证了算法的可行性和实用性。

【关键词】条码定位;条码识别;游程编码

Abstract:It is a critical step in image-type barcode recognition system that to automatically locate the barcode in complex background,the main point of this paper is to detect the barcodes in complex background quickly and automatically.First the paper introduces bar code structure.Then,an effective and rapid algorithm was proposed to localize and recognize barcode based on run-length coding.Finally,the feasibility of the algorithm is confirmed through relevant experimental results.

Keywords:barcode localization;barcode recognition;run-length coding

随着智能手机的普及,研究利用数字图像处理方法实现条形码的定位和识别具有重要的理论意义和实际价值。将条形码区域从整幅图像中定位提取出来,为下一步的译码识别提供良好前提,是首要的一步。定位条形码区域要求准确快速,是条形码图像处理识别系统的重要环节。一维条形码广泛应用于商品流通领域,最具有代表性的是EAN-13商品条形码。

1.EAN-13商品条码的的编码规则

1.1 EAN-13商品条码的符号结构

EAN-13商品条码由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区和供人识别字符组成。如图1和图2所示。

1.2 EAN-13商品条码字符集的二进制和符号表示

商品条码采用模块组合法进行编码,组成条形码符号的基本单位称为模块。每个条码字符由2个“条”(bar)和2个“空”(space)组成。每个“条”或“空”由1~4个模块组成,每个条码字符的总模块数为7。

EAN-13商品条码字符集可表示0~9共10个阿拉伯数字符号,每个数字字符对应3种编码形式,即左侧数据符奇排列A子集、左侧数据符偶排列B子集以及右侧数据符偶排列C子集。10个数字有30种编码。这里的“奇”或“偶”是指所含二进制“l”的个数为偶数或奇数。商品条码字符集的二进制表示如表1所示。

1.3 EAN-13商品条码的数据符

前置码不包括在左侧数据符内,不用条码字符表示。我国的国别识别码为690,因此前置码为6。左侧数据符选用A,B子集进行二进制表示,且取决于前置码的数值,见表2。右侧数据符及校验符均用C子集表示。

2.基于游程编码思想的条码定位方法

一维条形码的特点是由平行的黑白条按一定规则组成,黑条可简称为条,白条可简称为空,理想条形码图像中黑白边界明显,具有很强的边缘特性。基于条形码的这种构成特点,本文提出一种基于游程编码思想的条码定位方法。

通过观察二值化图像,我们可以发现,条码所在的行有一个显著的特征是,在一个固定的宽度内,像素点会频繁的从黑点变成白点,从白点变成黑点,这样的变化次数很多。根据EAN-l3条码的编码规则我们可以知道,每个EAN-l3条码都是由30个宽窄不同的黑条组成,那么在条码所在的区域,黑白变化次数应该是60次。在二值化图像中,仅存在两种编码0和1,用以表示图像信息。0表示黑色像素点,1表示白色像素点。这样可以大大节省存储空间。如图3所示。

虽然像素点被存储为0或1,节省了大量的存储空间。但是,以此方式存储的图像,并不能方便的获得相邻多个黑(或白)像素点的个数,也即条和空的宽度。为了方便定位条码区域,以及方便计算条码的条和空的宽度。基于游程编码思想,我们对二值化图像重新编码,如图4所示。

在此编码方式下,连续相邻的n个白色像素点存储为一个负整数-n。连续相邻的m个黑色像素点,存储为一个正整数m。由此,对于一个高为H,宽为W的二值化图像f(x,y),可以创建一个二维数组存储重新编码后的图像。此二维数组的高是H,宽为W/2+1:

int A[W/2+1,H]

二维数组A[W/2+1,H]中每一行的第一个元素,存储当前行的编码个数,也即条和空的个数。

2.1 正向条码定位

由EAN-13条码的编码规则可知,对于一个扫描行,至少会有60次的黑白变化。那么对于扫描行中是否含有条码信息的判断,就等同于判断该扫描行中第i个元素S[i]是否是左侧空白区。扫描行数据存储在数组S[W/2+1]中,S[0]存放该扫描行编码个数。判断条件如下:

算法1:

(1)S[0]>60,该扫描行包含多于60次的黑白变化

(2)S[i]

(3)abs(S[i])>10*S[i+1],左侧空白区域的宽度大于10倍的第一个条的宽度

(4)S[i+1],S[i+2],S[i+3]宽度比例是1:1:1。也即起始标志符,条空条。

(5)abs(S[i+60])>6*S[i+59],右侧空白区域的宽度大于6倍的最后一个条的宽度。

(6)S[i+57],S[i+58],S[i+59]宽度比例是1:1:1。也即结束标志符,条空条。

满足以上六个条件,即可判断S[i]就是左侧空白区域。

2.2 反向条码定位

由EAN-13条形码的编码规则可知,对于反向的条码,只要把算法1条件(3)abs(S[i])>10*S[i+1]

改为:abs(S[i])>6*S[i+1]

把条件(5)abs(S[i+60])>6*

S[i+59]

改为:abs(S[i+60])>10*S[i+59]

即可实现对反向条形码的定位。更进一步,只是把算法1的条件(3)修改,条件(5)不变。则,新算法即可以定位正向条码也可以定位反向条码。然而,由于有些条形码在印刷时,背景与左右空白区域没有区分,如图6所示。所以并不能以此来判断条码的方向。上述算法旨在说明,用此方法也可以定位到一个反向的条码。条码方向的确定在3.3节讨论。

3.条码识别

3.1 模块宽度的计算

由EAN-13条形码的编码规则可以知道,一个条或者空的宽度可以是1、2、3、4个模块宽度,条码从起始符到结束符总计95个模块。若i是左侧空白区的下标,则i+1是第一个条的下标,i+59是最后一个条的下标。那么,在S[i]确定存储的是左侧空白区域后,可以用下面方法求得模块的平均宽度:

(1)

3.2 条空宽度归一化

由EAN-13条形码的编码规则可以知道,一个数字字符由2个条和2个空,共计7个模块组成。一个条或者空可由1个、2个、3个或4个模块组成。设表示一个条空的宽度,也即黑(或白)色像素点的个数。w为正整数,代表条。w为负整数,代表空。表示模块的平均宽度。那么w中包含模块的个数,也即,条空的归一化结果wg可由下式确定:

条码的条空宽度归一化后,有八个可能的取值。分别是-1,-2,-3,

-4,1,2,3和4,八个整数。正值表示条,负值表示空。绝对值表示条(或空)包含的模块的个数。

3.3 条码方向的确定

为了能够正确解码条形码,在解码工作之前,首先应该进行条码方向的判别。EAN-13的起始字符和终止字符的编码结构相同,都是条空条。所以,不能通过起始符和终止符来判断条码的方向。由条码的编码结构可知,在EAN-13条形码中,右侧数据均由C子集编码,而C子集是偶排列。也即,右侧字符数据的编码,含有黑色模块的个数都是偶数。而左侧数据,有A子集也有B子集编码。以此性质,即可判断条形码的方向。通过观察表2可以知道,左侧第一字符的编码都为A子集,是奇排列;右侧最后一个字符,也即校验码的编码是C子集,是偶排列。因此,通过判断扫描到的第一个字符采用的是奇排列还是偶排列就可以确定条码的方向。如果第一个字符是奇排列,条码方式就是正方向;否则,就是反方向。设wg1、wg2、wg3、wg4分别表示第一个字符的四个条和空。可以知道,wg1是第一个空,wg2是第一个条,wg3是第二个空,wg4是第二个条。且,wg1和wg3是负整数,表示空。wg2和wg4是正整数,表示条。那么,wg2+wg4的和是奇数,条码就是正方向;是偶数,就是反方向。

3.4 前置码的确定

在EAN-13的编码中并不包含对前置码的编码。观察表2可以看到,前置码和左侧数据的字符集编码是一一对应的关系。可以说,前置码决定了左侧数据区的每个字符采用A子集还是B子集进行编码。反过来也可以说,左侧数据区字符编码的奇偶排列顺序,决定了前置码。比如,如果某个条形码的左侧数据区的编码是:奇偶偶偶奇奇,那么前置码就是6。

3.5 条码译码

经由条码的条空宽度归一化到-1,-2,-3,-4,1,2,3和4八个整数后,创建译码表,表3所示。译码工作通过查询此表即可实现。例如:某个字符的四个条空宽度分别是,-3,1,-2和1,经查表可知,这个字符是“8”。

4.实验结果分析

仿真实验使用VC++ Express 2008和OpenCV开发平台。实验表明,本文算法效果良好。对于光照不均匀,轻微模糊,及倾斜角在正负25度内的条码图像,都能正确识别。如图7所示。

参考文献

[1]中国标准出版社.条码国家标准汇编[M].北京:中国标准出版社,2004.

[2]陆宗骐.C/C++图像处理编程[M].北京:清华大学出版社,2005.

[3]苏彦华.VC++数字图像识别技术典型案例[M].北京:人民邮电出版社,2004

[4]沈庭芝.数字图像处理及模式识别[M].北京:北京理工大学出版社,1998.

作者简介:姜亮(1980—),男,研究生,研究方向:计算机应用。

上一篇:基于李萨如图形的相位测量及实现 下一篇:模糊综合评价在配电网设备状态检修研究中的应...