一种基于图像处理的一维条码快速定位技术*
2019-09-18纪琴琴
纪琴琴,黄 鲁
(1 中国科学技术大学微电子学院,合肥 230027; 2 中国科学技术大学信息科学技术学院,合肥 230027)
条形码技术具有简单方便、高效准确、经济实用等优点,它在人们的日常生产生活中获得广泛的应用。条形码作为一种通用的商品包装标签,通常印刷在商品或印刷品上。目前,识别一维条形码主要依靠激光扫描仪,激光扫描仪不仅需要人工对准条形码区域才能保证解码率,且对条形码质量要求很高。而使用图像处理的方式可以识别具有一定质量缺陷的条形码,提高条码应用的效率。目前市场上已经出现基于图像处理的条码识别设备,但价格昂贵,因此,研究并开发更加经济高效的类似产品具有很大的商业价值。
图像处理的方法主要有两个步骤,即条形码定位和条码识别,本文只讨论条形码定位的实现技术。
国内外研究人员在条形码定位领域一直没有停止研究的脚步:文献[1]将图像划分成32×32的小块,分析每一块图像的所有骨架的平行性确定其为条形码子区域,再将所有子区域组合成条形码区域,实验表明所提取的条码区域受条纹背景干扰。Gallo和Manduchi[2]提出一种快速检测条形码区域的方法,该方法计算每一个像素的直方图梯度,并使用滤波器和全局二值化分割条形码区域,但该方法不适用于倾斜条形码的定位。文献[3-4]提出基于形态学的方法,获取的条形码区域会因为噪声区域的影响而改变。文献[5-6]使用Hough变换寻找条形码区域,当条码背景有明显的平行线时,该方法并不适用。
本文实现的条形码区域定位方法适用于倾斜、扭曲、具有明显平行线等复杂背景的条形码图像。
1 条形码特性
本文以具有代表性的EAN-13条形码作为研究对象,如图1。EAN-13条形码由59个“条”和“空”组成,每个条或空是1、2、3或4倍单位元素宽度。条空黑白相间、宽窄不等、分布间隔有限且互相平行,具有明显的单方向纹理特征。
图1 EAN-13条码Fig.1 EAN-13 barcode
2 条形码定位
本文算法主要由2个部分组成:图像分割[7]、区域边缘线提取。对输入图像先用Sobel算子边缘检测,突出条形码区域并减弱背景区域的影响,二值化后的图像经过数学形态学处理进一步消除背景区域,分割图像得到多个条形码候选区域;最后通过提取候选区域的边缘线进行平行性分析定位条形码区域,其原理框图如图2所示。
图2 原理框图Fig.2 Block diagram
2.1 边缘检测与大津法二值化
图3展示每个步骤的具体中间结果(图片经过裁剪且保留主要部分)。
图3 条形码区域定位具体步骤图Fig.3 Intermediate results for each step
假设图3中的灰度图(640×480)用f(x,y)表示,因为条形码信息主要分布在水平方向上,所以可用f(x,y)的水平梯度图与垂直梯度图的差值图作为Sobel边缘检测图,以减弱背景区域的干扰。式(1)中的D(x,y)即为所求的边缘图。
(1)
随后用大津法[8]计算D(x,y)的阈值T,利用式(2)对图像进行二值化,处理后的图像数据大为减少且条形码区域明显。
(2)
2.2 区域分割
基于数学形态学的方法对条形码图像进行分割是使用一定的结构元素,利用形态学中的闭运算、腐蚀膨胀等运算对图像进行处理,得到多个条形码候选区域。
商品条形码具有标准尺寸,条码区域的长为37.29 mm,宽为26.26 mm,允许的放大倍数是0.8~2.0,是具有一定长宽比且条空排列间隔有限的矩形,长宽比约在1.4左右。因此,本文所选取的结构元素形状为矩形,通过对大量不同背景的条码图像进行分割,结果表明当结构元素长宽比选取为1.5且腐蚀与膨胀次数比为2∶3可以将条形码分割到一个区域中。同时,我们也在WWW Muenster(1)http:∥cvpr.uni-muenster.de/research/barcode/Database.和ArTe-Lab(2)http:∥artelab.dista.uninsubria.it/download.这两个标准的一维条码数据集上进行测试,条码在一个区域中的正确率分别为94.8%和99.8%。
2.3 边缘线提取
边缘线是条形码区域黑白的分界线且为单像素宽度,在分界处的像素值变化范围在该像素领域最大,因此,若一个像素在该像素领域内梯度最大或最小,则认为其为分界点,所有的分界点构成边缘线。具体步骤如下:
1) 假设条形码候选区域为h(x,y),定义一个与h(x,y)同尺寸类型的图像H(x,y),将其像素值全置为0。从左到右扫描h(x,y),记当前像素点的像素梯度Δp,梯度幅值Ip。
2) 考虑以像素p为中心的一个长度为r的单像素线段,这条线上有r个像素点。
3) 如果同时满足以下两个条件则将H(x,y)中(px,py)处的像素值置1。
a)Ip大于阈值T1(用大津法计算的h(x,y)的阈值)。
b)r-1个像素点的梯度均大于或者小于Δp。
4) 重复步骤1)、2)、3)直至h(x,y)中的像素被扫描完。
2.4 定位目标区域
目标区域的边缘线具有一定的长度且相互平行,背景区域的边缘线长度较短且无规律。用椭圆拟合的方法获得条码候选区域的边缘线倾斜角(与水平x的夹角),如表1所示。
表1 区域边缘线角度值Table 1 Angles of area edge lines
基于以下两点:
1) 理论上条形码区域的边缘线数是60根,但模糊受损的条码区域边缘线数跟理论值会有差距,差距的大小受模糊受损程度影响。
2) 扭曲形变的条形码的边缘线并不全是平行的。因此,目标区域必须同时满足以下两个条件:
a) 边缘线数大于5;
b) 与相邻边缘线的倾斜角相差在2°内的边缘线总数超过总边缘数的3/4。
否则,认为此区域不是目标区域,如果所有的条形码候选区域都不满足上述两个条件,则这张图片不包含条形码区域。
3 实验及结果分析
我们使用2个公开的一维条形码图片数据集进行算法性能测试:由文献[9]提供的WWU Muenster条码数据集和文献[10]提供的ArTe-Lab条码数据集。ArTe-Lab条码数据集包括365张640×480的EAN图片。WWU Muenster条码数据集包含由N95手机拍摄的1 055张EAN和UPC-A条形码图片,Zamberletti等[10]和Creusot与Munawar[11]仅使用其中的595张图片,数据集的具体细节如表2所示。
表2 数据集细节Table 2 Datasets details
我们的算法与文献[10-11]提出的方法进行比较,结果如表3所示。在ArTe-Lab条码数据集中定位条码区域的正确率为90.1%,在Muenster条码数据集中的正确率为97.8%,对比于文献[10]的方法分别提高10%和15%左右且略高于文献[11]的方法。
表3 不同条形码区域定位算法的比较结果Table 3 Comparison of the results among different barcode localization algorithms %
图4为我们的方法与文献[10-11]的方法对Arte-Lab中同一张图片的条形码区域定位效果。
本文方法(图左)、Creusot(图右的绿色区域)和Zamberletti(图右的红色区域)图4 对Arte-Lab中一张条码图片的定位结果Fig.4 Localization result for a picture in Arte-Lab
图5展示对模糊、条纹背景等复杂情况的条码图片的实验结果,图片均是在自然光照下摄像头采集的640×480像素且经过裁剪保留主要区域的灰度图。
图5 复杂图像背景下的条码定位Fig.5 Barcode localization in complex image background
我们以60帧/s左右的速度运行640×480图像。在表4中,文献[10]和文献[11]是运用OpenCV库C++实现的运行在Intel i7 CPU的单线程上@3.33 GHz,本文给出的结果同样是运用OpenCV库C++实现,运行在Intel i5 CPU的单线程上@3.40 GHz。相比于文献[10-11]的方法,我们的算法具有更高的实时性。
表4 平均运行时间Table 4 Average computing time ms
4 结语
本文所提出的条形码定位算法简单高效,适用于倾斜、形变、模糊等不同情况的条码图像。通过与现有算法进行比较,结果表明我们的算法具有非常高的实时性,在主频1.2 GHz的树莓派ARM7嵌入式系统上定位时间为0.29 s。