条形码识别解析Word文档格式.docx
《条形码识别解析Word文档格式.docx》由会员分享,可在线阅读,更多相关《条形码识别解析Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
基于MATLAB的一维条码识别
摘 要:
条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量
大,识别错误率低而在各个方面得到很大的重视。
它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。
由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响,而一般条码在搬运过程中条码会不可避免的破损,所以对质量较差的条码的条码的识别尤为重要。
不同的条码有着不同的识读过程。
本设计研究一种基于图像处理方式的识读方法,通过一定的数字图像处理算法处理进行译码。
译码算法主要分为两部分:
第一部分首先对采集的条码图像进行预处理,图像的预处理包括图像分割,图像滤波等,良好的图像处理将对后面实现正确译码有重大贡献;
第二部分就是对预处理后的条码图像进行译码,我们根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。
借助于Matlab软件的功能我们完成这次译码工作。
关键词:
图像处理 条形码识别 EAN-13 图像滤波 Matlab
一、引言
1.1条码技术概述
条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。
条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。
通俗的说条形码是指在浅色衬底上印有深色矩形的线条(也称条码)排列而成的编码,其码条和空白条的数量和宽度按一定的规则(标准)排列。
条形码是由一组规则排列的条、空、相应的数字组成。
这种用条、空组成的数据编码可以供机器识读,而且很容易译成二进制数和十进制数。
这些条和空可以有各种不同的组合方法,构成不同的图形符号,即各种符号体系,适用于不同的应用场合。
条形码是迄今为止最经济、实用的一种自动识别技术。
1.2Matlab应用图像处理
Matlab图像处理工具是由Math Works公司推出的用于数值计算的有力工具,它具有相当强大的矩阵运算和操作功能,力求人们摆脱繁杂的程序代码。
Matlab图像处理工具箱提供了丰富的图像处理函数,灵活运用这些函数可以完成大部分图像处理工作。
图像处理工具包是由一系列支持图像处理操作的函数组成的。
所支持的图像处理操作有:
图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等)、图像分析和统计、二值图像操作等。
下面就MATLAB在图像处理中各方面的应用分别进行介绍。
主要包括下面几方面:
(1)图像文件格式的读写和显示。
MATLAB提供了图像文件读入函数imread(),用来读取如:
bmp,tif、tiff、pcx、jpg、gpeg、hdf、xwd等格式图像文;
图像写出函数imwrite(),还有图像显示函数image()、imshow()等等。
(2)图像处理的基本运算。
MATLAB提供了图像的和、差等线性运算,以及卷积、相关、滤波等非线性算。
例如,conv2(I,J)实现了I,J两幅图像的卷积。
(3)图像变换。
MATLAB提供了一维和二维离散傅立叶变换(DFT)、快速傅立叶变换(FFT)、离散余弦变换(DCT),以及连续小波变换(CWT)、离散小波变换(DWT)及其反变换。
二、一维条码技术
2.1一维条码符号的结构
通常任何一个完整的条码是由两侧空白区、起始符、数据字符、校验符、终止符组成,以一维条码而言,其排列方式通常如表2-1所示:
表2-1条码符号结构
1、空白区
图2-1条码符号
位于条码两侧无任何符号及资讯的白色区域,主要用来提示扫瞄器准备扫瞄。
2、起始符
指条码符号的第一位字码,用来标识一个条码符号的开始,扫瞄器确认此字码存在后开始处理扫瞄脉冲。
3、数据符
位于起始字符后面的字码,用来标识一个条码符号的具体数值,允许双向扫瞄。
4、校验符
用来判定此次阅读是否有效的字码,通常是一种算术运算的结果,扫瞄器读入条码进行解码时,先对读入各字码进行运算,如运算结果与检查码相同,则判定此次阅读有效。
2.2EAN码简述
EAN码的全名为欧洲商品条码(EuropeanArticleNumber),源于公元1977年,由欧洲十二个工业国家所共同发展出来的一种条码。
目前已成为一种国际性的条码系统。
EAN条码系统的管理是由国际商品条码总会(InternationalArticleNumberingAssociation)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。
目前已有30多个国家加盟EAN。
EAN码由前缀码、厂商识别码、商品项目代码和校验码组成。
2.3EAN-13码符号的特征
(1)条码符号的整体形状为矩形。
由一系列互相平行的条和空组成,四周都留有空白区。
(2)条空分别由1-4个同一宽度的的深或浅颜色的模块组成。
深色模块用“1”表示,浅色模块用“0”表示。
(3)在条码符号中,表示数字的每个条码字符仅由两个条和两个空组成,共7个模块。
(4)除了表示数字的条码字符外,还有一些辅助条码字符,用作表示起始、终止的分界符和平分条码符号的中间分隔符。
(5)条码符号的大小可在放大系数的两个极限值所决定的尺寸之间变化,以适应不同印刷
工艺的需求及用户对印刷面积的要求。
2.3.1EAN-13码字符集
EAN-13条码字符集包括10个数字字符,即0-9。
在条码符号中,每个数字字符由七个模块的二进制表示,其表示形式见条码字符集中的A,B,C三个子集。
表2-2条码字符集
A子集中条码字符所包含的深色模块的个数为奇数,称为奇排列。
B、C子集中条码字符所包含的深色模块的个数为偶数,称为偶排列。
2.3.2EAN-13码符号结构
EAN-13条码符号是由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符及右侧空白区构成,如图2-4所示。
图2-4EAN-13条码符号结构
图2-5EAN-13条码符号构成示意图
左侧空白区:
位于条码符号起始符左侧,无印刷符号且与空的颜色相同的区域。
其最小宽度为11个模块宽。
起始符:
位于条码符号左侧,表示信息开始的特殊符号,由3个模块组成。
左侧数据符:
介于起始符和中间分隔符之间的表示信息的一组条码字符。
表示前缀码
(不包含前置码)和厂商代码,共6位数字。
条码字符按A子集或B子集的形式构成。
左侧数据符由42个模块组成。
中间分隔符:
位于条码符号的中间位置,是平分条码符号的特殊符号,由5个模块组成。
右侧数据符:
中间分隔符右侧的一组选自C子集的条码字符,表示5位商品代码,又
35个模块组成。
校验符:
最后一个条码字符,选自C子集,由7个模块组成,表示一个校验字符。
终止符:
位于条码符号右侧,表示信息结束的特殊符号,由3个模块组成。
右侧空白区:
在终止符之外的无印刷符号且与空的颜色相同的区域,其最小宽度为7
个模块。
三、条码图像的预处理
3.1灰度处理及二值化
Matlab能够处理的四种类型图像:
1)索引图像
索引图像包括图像矩阵与颜色图数组,其中,颜色图是按图像中颜色值进行排序后的
数组。
对于每个像素,图像矩阵包含一个值,这个值就是颜色图中的索引。
颜色图为m*3
双精度值矩阵,各行分别指定红绿蓝(RGB)单色值。
2)灰度图像
在MATLAB中,灰度图像是保存在一个矩阵中的,矩阵中的每一个元素代表一个像素点。
矩阵可以是双精度类型,其值域为[0,1];
也可以为uint8类型,其数据范围为[0,255]。
矩阵的每个元素代表不同的亮度或灰度级。
3)二进制图像,
每个点为两离散值中的一个,这两个值代表开或关。
二进制图像保存在一个由二维的由0(关)和1(开)组成的矩阵中。
从另一个角度讲,二进制图像可以看成为一个仅包括黑与白的灰度图像,也可以看作只有两种颜色的索引图像。
4)RGB图像
与索引图像一样,RGB图像分别用红,绿,蓝三个亮度值为一组,代表每个像素的颜色。
与索引图像不同的是,这些亮度值直接存在图像数组中,而不是存放在颜色图中。
图像数组为M*N*3,M,N表示图像像素的行列数。
对图像进行灰度处理,为实现数字的阈值变换提供前提条件,要将256色位图转变为灰度图,首先必须计算每种原色对应的灰度值,灰度与RGB颜色的对应关系
Y=0.299R+0.587G+0.114B
将调色板转换成灰度调色板。
实现的指令:
y=rgb2gray(I)。
为了对图像进行后续处理,需要对图像进行二值化处理,二值化是图像分割技术中的区域分割技术,它是区域分割中最基本也是最常用的手段,使用阈值将背景与图像分割出来,也称阈值分割。
3.2.1灰度图像 3.2.2二值化图像
3.2图像的滤波
3.2.1图像的平滑滤波
中值滤波器是一种最常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,二者不同是在于中值滤波器的输出像素是由领域像素值是由领域的中间值决定的而不是平均值决定的,中值对极限像素值远不如平均值那么敏感,所以中值滤波器产生的模糊较少,
更适合消除孤立噪声点。
它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。
加权中值滤波能够改进中值滤波的边缘信号保持效果。
但对方向性很强的指纹图像进行滤
波处理时,有必要引入方向信息,即利用指纹方向图来指导中值滤波的进行。
中值滤波器的
优点是:
它可以克服线性滤波器(如均值滤波)给图像带来的模糊,做到在有效地清除脉冲噪声的同时,又保持良好的边缘特性,从而获得较满意的复原效果。
根据上述条码图像预处理的理论知识编译相关的Matlab程序,得到如图3-3.2所示图像预处理结果。
3-3.2图像处理的结果
四、条码的译码方法及基本原理
4.1译码方案的选择
我们所采用的是:
相似边距离的测量方法,这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量值来判别。
由原理知,要想辨识一个条码,必须先测量条码条、空宽度C1、C2、C3、C4以及一个字符的宽度T。
条码图像经过预处理后得到的是二值图像,该点的颜色信息在阈值变换时已经定义,用255和0表示白和黑色。
我们从条码的左边开始取点,若遇到点的灰度值由
255变到0即由点的颜色由白色变为黑色,则表示检测到条,记录下该点的坐标值,如果点的颜色由黑色变为白色,则表示检测到空,记录下该点的坐标值。
这样经过扫描后得到各个颜色变化点的坐标,然后将相邻两点的横坐标相减得到各个条、空的宽度.由前面所述EAN-13条码的组成知:
一个由占3个条空的起始符、3个条空的终止符、24个条空的左侧数据符、5个条空的中间分隔符、20个条空的右侧数据符、4个条空的校验符组成。
所以,整个条码字符占的条空总数为59,若条码字符没有发生几何畸变,一行扫描应记录