EAN一13码的图像识别系统设计与实现
0 引 言
自动化数据采集技术是信息采集和处理的关键技术,条码技术在自动化数据采集中占重要地位,得到了广泛的应用。但是普遍的条码阅读器是基于激光扫描或者CCD摄像头的,在生活中不是很常见。如果条码识读能用普通的摄像头(如:手机摄像头或网络摄像头),条码将会给人们的日常生活带来更多的方便。近来手机和机器人的应用得到很大发展,手机的一维码识别、机器人的一维码识别、自动分拣物品等都有着很好的应用前景。为了拓宽一维码的应用,基于图像处理的一维条码研究有着重要意义。
在最近几年关于一维码图像识别的识别文章中,都是针对比较理想的条码进行识别的,或者只是讲解一维条码图像识别的某一个步骤,或者是人为地加上部分噪声进行处理,很少有从一幅真正拍摄的图像来识读的。这里完成了整个条码识别系统的设计和图像处理的算法设计,实现了图像的录入到译出条码的整个过程,并通过实验详细阐述了识别流程和效果。
1 EAN―13码特征
EAN一13是标准商品条码,它是一种(7,2)码,即每个字符的总宽度为7个模块,由两个条和两个空交替组成,而每个条空的宽度不超过4个模块。EAN一13商品条码由左侧空白区,起始符、左侧数据符、中间分隔符、右侧数据符、、终止符、校验符、右侧空白区组成,如图1所示。EAN一13码包含13个字符,但只对12个字符进行编码,其第13位(从右向左排序)不进行编码,数值隐含在左侧数据符的奇偶排列中,称为前置符。奇偶性指的是每个字符所含条的模块数为奇数或者偶数,左侧数据符为奇、偶排列,右侧数据符为偶排列,左边的码字组成方式是“空条空条”,右边的码字组成方式是“条空条空”。
由EAN一13条码的结构知:左侧空白区为11个模块,起始符为3个模块(3个条空),左侧数据符为42个模块(24个条空),中间分隔符为5个模块(5个条空),右侧数据符为35个模块(20个条空),检校符为7个模块(4个条空),终止符为3个模块(3个条空),右侧空白区为7个模块,整个编码区的模块数为3+42+5+35+7+3=95个,条空数为3+24+5+20+4+3=59个。若将黑色模块(条)用二进制的“1”表示,白色模块(空)用二进制的“0”表示,则数据字符的编码图案有30种,如表1所示。且有如下编码:起始符:101中间分隔符010110,终止符101。
如何确定数字字符是属于A子集,B子集或者C子集。EAN一13码左侧数据符由A,B子集确定,取决于前置符,右侧数据符属于C子集。前置码和左侧数据符商品条码字符集的选用规则如表2所示。
2 条码识别
在条码识别的整个过程中,都是基于以下假设:所处理的图像正中肯定是包含条码部分的,这样可以很好地减少计算量。条码识别系统分为三个模块:图像预处理、图像提取、译码。如图2所示。
图像预处理是利用一维条码的特征对条码执行灰度化,二值化,滤波和边缘检测操作。它为后续的图像提取做好准备,图像预处理做得越好,图像提取效果将更加明显。
图像提取是对预处理的图像进行分割,分为上下分割和左右分割,在各种背景中分割出条码区域,图像提取的取决于是否能精确地分割出条码区域。由于一维条码是并行长条的,每一条行扫描线都包行了条码的所有信息,最简单的方法是只要在条码图上确定一根行扫描线,逐个像素判断,黑的为1,白的为0,计入数组,然后计算宽度就能解码,这是针对完全干净的条码图的。实际应用的条码图像会有很多噪声,同时条码区域也不可能完全干净,因此需要尽量分割出条码的大部分区域给后续的解码提供更多的信息,上下分割中把沿条码方向的部分条码分割出来,左右分割需把条码的编码区全部包含在内。
译码是对提取后的条码区进行处理,计算出条码中各个条空的宽度,根据一维码的编码规则,解出条码所含的信息。
2.1 图像预处理
2.1.1 灰度化二值化
灰度处理,为实现数字图像的阈值变换提供前提条件,要将256色位图转变为灰度图,灰度与RGB值之间的关系为:Y=0.299R+0.587G+O.114B。
二值化是利用点运算中的阈值变换理论将灰度图转化为二值图像。二值化中阈值T的选择是关键,在整幅图中,我们最关心的是条码,条码是由条空(黑白)组成的,根据前面的假设,在整幅图的中心区域选取50×50个像素点,对其进行灰度处理并得到灰度直方图,采用双峰法得到阈值T,此阈值可以有效地把条码的条空区分出来。按照下式得到二值化图像g(x,y)。
2.1.2 滤波
由于原图像各部分亮度不均,背景图像有不同的情况,得到的二值图会有很多噪声,条码区域有,条码区域外也有,为了后续部分的条码提取和条码译码,需要进行滤波处理。考虑到一维条码的特征:竖直的条和空,采用中值滤波方法,中值滤波模板如图3所示。被圈部分表示模板遍历整幅图时,所对应待检像素的位置。取待滤波像素上下相邻的4个像素值,共5个像素值进行排序,用中间值覆盖待滤波的像素值。此模块能有效地滤除条码区的椒盐噪声,背景区的噪声能得到很大抑制。此模块是根据一维码的特征设计,可以适合各种一维码。
2.1.3 边缘检测
常用的边缘检测算法有梯度算法、Roberts梯度法、Sobel算法和Laplaceian算法等,在充分研究一维条码的特征后,借鉴各种检测算法,在此自行设计了一种滤波算法。由于设计实验时采用的是640×480或320×240的图像,假设条码占整个图像的50 %以上,根据图2可以算出每个模块占的像素值为3到4个或l到2个,如果采用3×3或5×5之类的边缘检测模板,加上图像原本的变形,将会误检边缘或边缘丢失,同时考虑到一维条码的特征:竖直的条和空,有明显的竖直边缘,因此设计了竖直边缘检测算法,边缘检测模板如图4所示。
- 思博伦为EANTC年度测试活动提供支持(05-31)
- 更快进行原型开发的八个技术考虑(07-28)
- 基于虚拟仪器LabVIEW的网络虚拟实验室系统设计(10-04)
- 基于射频技术的无线识别系统设计 (10-04)
- 基于单片机PIC18F1320的信号采集系统设计方案(06-01)
- 精轧机轴瓦温度在线监测系统的设计改造(02-06)