APP下载

基于图像技术的EAN-13条码识别系统设计*

2020-03-16欧阳鑫玉

网络安全与数据管理 2020年3期
关键词:译码条形码条码

李 慧,欧阳鑫玉,张 锋

(辽宁科技大学 电子与信息工程学院,辽宁 鞍山 114051)

0 引言

随着社会经济的快速发展,条形码技术已成为一种常用的数据采集和自动识别技术[1-3],由于它具备输入速度快、准确率高、投入成本低、简单实用、自由度大、采用设备相对简单、容易制作等特点,因此能够普遍应用在商品流通、工业生产、交通运输、智慧物流、医疗卫生等领域。

对于条码的识别,通常是基于光电技术进行识别,一般的光电识读设备通过线性扫描的方式读取到条码信息后,再利用硬件进行条形码的识读。由于条码可能存在印刷不清或者由于脏污形成噪声等情况,会导致识别率降低;此外,识读设备成本过高,采用人工手持条形码识别装置工作效率低,难以适应现代智能化、自动化的应用场景功能需求。随着数字图像处理技术的发展,采用图像处理技术和相关的智能算法对条形码进行识别已成为新的趋势,它可以有效解决利用硬件识别带来的技术和成本问题。

本文正是在此背景之下,根据实际应用需求,利用图像处理相关技术,对EAN-13一维条形码的识别进行了研究,并利用MATLAB软件设计出识别系统,克服了基于光电技术的条码识别带来的局限性。

1 EAN-13条形码

EAN-13条形码是欧洲物品编码的一种终端产品条形码协议和标准,它的左侧是空白区,然后依次是起始符、左侧数据符、中间分隔符,接着是右侧数据符、校验符、终止符以及右侧空白区和供人识别的字符(如图1所示),应用比较广泛。

EAN-13条形码是一种(7,2)码[4-5],包含了13位数据字符,其中第1~3位字符代表国家代码,第4~7位字符代表厂商代码,第8~12位字符代表产品代码,第13位字符是校验码;每个字符由两个条和两个空交替组成,每一条或空由1~4个模块组成,每一数字总宽度为7个模块,分别用“0”和“1”表示条形码的空和条的模块。

图1 EAN-13码的结构

EAN-13条形码字符集包括0~9共10个数字字符,条码的二进制表示形式由A、B和C三个子集(见表1)确定。条形码中的前置码不用字符表示;右侧的数据符和最后的校验符全部用C子集来表示。前置码的数值决定左侧数据符是选用A子集还是选用B子集来表示,表2列出了左侧数据符的字符集选择规则。

表1 条形码字符集

表2 左侧数据符的字符集选择规则

校验符是用来检验前面的字符数字是否正确,计算公式如下:

=a2×102+a1×10+a0

(1)

(2)

其中,Ti(i=1,2,…,12)表示条形码的第1~12位数字值,L为校验符的值。

以EAN-13条形码9787512426399为例,其前置码为9,根据表2可知,其左侧数据符的字符集为ABBABA。根据校验码的计算方法,可知K=131,a0=9,因此校验码是9。又根据表1可知,该条形码后12位数的二进制码分别为:0111011、0001001、0010001、0110001、0110011、0010011、1011100、1101100、1010000、1000010、1110100、1110100。

2 条码图像识别方法

条码图像识别处理流程如图2所示。

图2 条形码图像识别流程

条形码图像采集后,需要对图像进行预处理,即进行图像灰度化、倾角矫正、目标分割、滤波等操作,然后针对分割的条码图像,根据译码规则进行译码识别。

2.1 条形码图像预处理

(1)条形码图像的灰度化

通过各种摄像设备采集到的条形码图像,大多是彩色图像,采用的是RGB颜色模式,即用红、绿、蓝三种原色来表示,各个颜色分量的取值范围都是0~255,因此,对于一个RGB图像,在计算机中需要用一个三维矩阵来表示,但实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行了颜色的调配。在进行图像处理时,通常为了减少所要处理的运算量,一般采用将RGB图像进行灰度化的方法。图像灰度化处理方法通常有分量法、最大值法、平均值法和加权平均法等。本文采用了平均值法进行灰度化,即将分量R、G、B的值求平均得到一个灰度值,处理效果如图3所示。图像灰度化之后,在计算机中只需要用一个一维矩阵来表示,大大提高了后续处理速度。

图3 条码图像灰度化前后对比

(2)条形码图像的倾角矫正

对于采集到的图像,由于条形码和摄像头的角度问题,使得条形码图像和直角坐标系有一定的倾斜角度,为了方便后续处理,通常需要先计算出图像的倾斜角度,然后通过旋转相应角度对图像进行矫正。

矫正图像倾斜角度的方法有两点法、最小二乘法、Hough变换法以及Radon变换法等[6-8]。两点法、最小二乘法计算量小,但抗干扰能力差,不能计算有断点的直线倾角。Hough变换法和Radon变换法具有很好的鲁棒性,对于抗噪声干扰能力强,精度比较高,但是运算量比较大。根据这种情况,本文采用Hough变换法。

Hough变换法是一种变换域直线提取法,由Paul Hough于1962年首次提出。Hough变换的基本原理是:对于直角坐标系中的直线方程y=kx+b,可以在极坐标中用ρ=xcosθ+ysinθ来表示,因而这条直线在极坐标中表示的是一点(ρ,θ)。对于直角坐标系下呈现直线的所有点,它们的斜率和截距均相同,因而它们在极坐标系下对应于同一个点,这样就把直线的提取转换成了点的计数而使问题得到解决。

本文在采用Hough变换法时,进行了适当改进,即考虑到条码图像中有大量的平行直线条,在处理时只选取含有条码的小块进行计算处理,然后根据得到的倾斜角度,再将整个图像旋转相应角度进行矫正,这样既保证了精度,也减少了运算量。利用Hough变换对条码图像进行倾角矫正后的效果如图4所示。

图4 利用Hough变换进行图像倾角矫正前后对比

(3)条形码图像的分割及滤波

针对矫正后的条码图像,采用水平和垂直两种投影方法,检测出条形码图像区域,并将其从原图像中分割出来。

同时考虑到图像本身或受污染可能存在噪声的情况,需要对条码图像先进行去噪声处理。常用的图像去噪方法有高斯滤波、中值滤波、维纳滤波、小波去噪、P-M方程法以及TV法等。本文考虑条形码图像中存在孤立噪声多的状况,选择中值滤波法进行去噪。

中值滤波器作为一种非线性平滑滤波器经常被使用,它的基本原理是把数字图像中的某点的值用该点的一个邻域中各点值的中值替换,这样能够让四周的像素灰度值差比较大的像素改取与周围的像素值近似的值,从而达到去除孤立噪声点的目的,因此中值滤波方法对于滤除图像中的孤立噪声十分有效。

对条形码图像进行目标分割和中值滤波后的效果如图5所示。

图5 分割的条码图像和中值滤波效果

(4)条形码图像的二值化

二值化就是将灰度图像上的各点的灰度值转换成为0或255两个值,使整个图像呈现出明显的黑白两色。对于灰度图,像素点有256个灰度等级,经过选择适当的阈值将灰度两极化后,二值化图像依然可以很好地反映图像的特征。

根据上述所得的条码图像的滤波图像,设定一个阈值R,若某点像素灰度值大于R,则令该点像素值为255;若某点像素灰度值小于R,则令该点像素值为0,即可将图像二值化。假如图像像素点的灰度值已经完成归一化,则在0~1之间确定阈值。通过反复测试,本文选择阈值为0.7~0.74。针对所得条形码图像的滤波图像进行二值化后,得到的二值图像如图6所示,能够看出,目标图像和背景更加分明。

图6 二值化后的条码图像

2.2 条形码译码

条形码的译码过程主要分为边缘确定、译码、校验和显示结果。

(1)边缘确定

对于条码图像,首先要确定条形码扫描方向,这里采用从左至右进行扫描,然后对图像进行垂直投影,根据投影结果确定起止条码的左右边缘。

(2)译码

对于条形码的译码,这里采用平均值法,即依据起止边缘,计算出条码符号图像中整个条码的宽度,然后用这个宽度除以总模块数95,就可以得到每个模块总共像素的宽度。再依据每个字符含有的模块数,参考前述表1的字符集进行译码。

(3)校验

条码字符译码完成后,需要确定得到的译码是否正确,利用前述的校验码计算方法,可以对其校验验证。

(4)显示结果

通过校验码验证后,如果正确,则输出识别到的条码数字;否则,输出“识别错误”。

3 EAN-13条形码识别系统实现

基于MATLAB仿真软件,利用其图形用户界面工具包GUI进行了EAN-13条形码识别系统设计,得到的系统界面如图7所示。

图7 EAN-13条形码识别系统界面

在本系统中,用户需要先将采集的条形码图像存放到一个文件夹中。在运行程序后,用户可以对采集的图像进行选择和导入,利用该系统的相关控件,可以显示原图以及部分过程处理效果图,并能将最终的识别结果显示出来。

经过对采集的620张条形码图片的处理实验,正确识别614张,其他6张因为图片污染严重或图像采集时造成大的扭曲未能正确识别,系统识别准确率达到了99%以上,取得很好的效果,达到了工业应用所需的识别率要求。该系统也可以利用其他高级语言进行移植后供实际应用。

4 结论

本文针对一维条形码的识别问题,基于图像处理技术,提出了从图像预处理到条形码译码的系列方法,并运用MATLAB仿真软件,设计出了一个条形码的识别系统,克服了基于光电技术的条码识别带来的局限性,实验验证了本文采用的处理方法和设计的系统的有效性,为条码自动识别的实际应用提供了基础和参考。

猜你喜欢

译码条形码条码
极化码自适应信道译码算法
热线互动
基于扩大候选码元范围的非二元LDPC加权迭代硬可靠度译码算法
创意条形码
分段CRC 辅助极化码SCL 比特翻转译码算法
基于校正搜索宽度的极化码译码算法研究
浅析影响商品条码质量的主要因素
日杂商品条码质量现状研究
条形码里有数学
有趣的条形码