精华内容
下载资源
问答
  • 2021-06-04 10:34:05

    一维条形码现在广泛用于超市、图书馆、学校等,几乎在生活的各个领域和行业都直接或间接的用到了一维条形码(本文是指EAN13)。对一维条形码的识别就成为了必要,现在超市及其他场所大部分都是利用光电识读器,利用条形码样条不同的反光率来识别,采用线性扫描,只能读取条形码局部信息,以致识别容易受条形码上的灰尘、水汽或样条断裂影响,造成识别率降低。
    本文介绍一种利用图像处理的方法来识别一维条形码,为了读取的方便,本文的图像直接是从电脑摄像头中采集的,省去了储存图像后再读取图像的过程,使识别更加快速。
    MATLAB程序包括两部分,一、调用函数,包括图像的预处理和数据的识别;二、主程序。

    1、调用函数
    获取主程序传递的图像数据,然后对图像预处理,预处理包括灰度处理和几何校正,其中的灰度处理的过程是:灰度化——>中值滤波——>二值化。灰度化用到的函数是rgb2gray();中值滤波函数medfilt2();二值化函数im2bw(),处理过程中图像如fig 1-1。
    在这里插入图片描述

    fig 1-1
    fig 1-1中的第一幅图(从左到右)是原图、第二幅图是灰度化后的图、第三幅图是中值滤波后的图、第四幅图是二值化后的图。
    从fig 1-1中明显能看出图像中的条形码不是正摆的,需要进行几何校正。几何校正的过程:设置采样点(程序设了五个)——>采集条形码的黑色条码坐标——>通过采样点的坐标差异来决定几何校正的角度。几何校正函数imrotate()。处理后的图如fig 1-2。
    在这里插入图片描述

    fig 1-2
    但有时候考虑到计算速度问题,几何校正可以被省去,因为本文是利用电脑摄像头来采集图像的,可以通过观察视频来人工摆正。
    当图像预处理完成后,则进行图像条形码的识别阶段。处理过程主要是利用五个采样点采集的数据。五个采样点都要图像采集一遍,按行采集。采集完后,程序将提取样条数据,在每一次提取中程序都会去掉五个采集点中最小数据和最大数据,然后对剩下的三个的数据进行后期处理。程序先判断采集点是否采集到59个样条(一维条形码除去左、右侧空白区,共有95个模块,本文涉及的59样条是指黑白样条个数,而一维条形码中的95个模块是指每个黑白条占得标准模块个数相加的和),是59则继续读数据处理,不是则调用函数退回等待主程序再次传递图像。当为59个样条时,就对提取获得的数据求平均值,然后储存到一个矩阵中。获得的数据平均值显示如fig 1-3。
    在这里插入图片描述

    fig 1-3
    fig 1-3 上图值为1的是条形码中黑色样条含有像素个数,值为0的是条形码中白色样条含有像素个数。下图是把上图读取的黑白样条像素个数的一维图像显示。
    最后根据一维条形码的编码规则编写出解码算法。把获得的矩阵带入解码算法中,通过对比校准,最终得到人能识别的阿拉伯数字码。
    由于篇幅限制这里就不把程序代码写入。

    2、主程序
    获取电脑摄像头的视频数据,连续采集视频图像数据,把图像数据传递给调用函数,最后把识别的阿拉伯数字码显示到MATLAB显示区上。主程序的代码较短,代码如下:

    %读取电脑摄像头视频
    info=imaqhwinfo;
    win_info=imaqhwinfo(char(info.InstalledAdaptors(2)));
    dev_win_info=win_info.DeviceInfo;
    obj = videoinput(char(info.InstalledAdaptors(2)),dev_win_info.DeviceID,char(dev_win_info.SupportedFormats(5)));
    preview(obj);%显示视频,视频的分辨率是640x480,如果比这个分辨率小就可能读不出识别码
    %传递图像给调用函数
    start(obj);
    a=getsnapshot (obj);%获取视频中的图像信息
    flag1=‘y’;
    while flag1==‘y’||flag1==‘Y’
    flag=0;
    while flag==0
    a=ycbcr2rgb(getsnapshot (obj));%把ycbcr格式图像信息转换为rgb格式图像
    flushdata(obj);%刷新obj中的数据
    flag=ginny(a);
    drawnow;%刷新事件
    end;
    flag1=input('Do you want agian? Y/N : ', ‘s’);
    end
    delete(obj);

    3、结果与总结
    识别的结果如fig 1-4,图为MATLAB GUI 界面。

    在这里插入图片描述

    更多相关内容
  • adnroid一维二维通用条码扫描器源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 一维二维通用条码扫描器是本站发布的第一个条码扫描项目,条码扫描器在您的手机上使用摄像头读取条形码,查询产品的信息,如价格和评论。此外,还可以读取QR吗和Data Matrix二维条码。传统的条形码,如产品包装上...
  • 一维二维通用条码扫描器是本站发布的第一个条码扫描项目,条码扫描器在您的手机上使用摄像头读取条形码,查询产品的信息,如价格和评论。此外,还可以读取QR吗和Data Matrix二维条码。传统的条形码,如产品包装上...
  • 在 golang 中生成一维条形码。 用法 ts := "HI3456HI" img , err := Encode ([] byte ( ts ), 0 , 0 , 0 , 2 ) if err != nil { log . Fatal ( err ) } if file , err := os . OpenFile ( ts + ".png" , os . ...
  • 系统框图  系统以DSP56F826芯片为核心... 二维条码扫描器系统框图如图(1)所示。CMOS图像传感芯片为光电转换元件,用与采集二维条码图像,直接输出为数字信号。由外部扩展SRAM存储该数据,再送到DSP,进行图像处理、
  • 系统框图  系统以DSP56F826芯片为... 二维条码扫描器系统框图如图(1)所示。CMOS图像传感芯片为光电转换元件,用与采集二维条码图像,直接输出为数字信号。由外部扩展SRAM存储该数据,再送到DSP,进行图像处理、码字
  • Android应用源码一维二维通用条码扫描器.zip
  • 本无线扫描器以单片机mPSD3254BV 为核心,通过扫描子系统可以扫描一维或二维条型,键盘和显示系统方便用户进行人机交流,无线传送模块可以将现场采集到的数据发送到其它设备,同时本扫描器也能存储上万条数据信息...
  • Android一维二维通用条码扫描器
  • adnroid 一维二维通用条码扫描器源码,实用的技术源码学习
  • Android_条码扫描器_一维条形码_二维QR码_apk_源码
  • ·条形码扫描枪 ·无线数据采集 ·条码数据采集 ·RFID电子标签 ·RFID读写 ·RFID手持机 ·网络无线产品 ·碳带 ·色带 ·贴纸 ·条码打印纸 ·透明膜 ·吊牌 ·其它耗材 条码及RFID综合解决方案提供,...
  • 源码ZXingObjectDemo,本人是菜鸟一枚,之前有做到功能需要生成一维条形码的,公司用的NKD据说是扫描出错,于是被要求用ZXing做一个,但是我在网上找了很久都是生成和扫描二维码,或者是扫描一维码的(当然可能也是...
  • hhp it4600条码扫描器 技术参数: 光源:650nm红光 瞄准线: 绿色LED 图像类型: VGA、752*480像素、Binary、TIFF或JPEG输出 阅读距离:IT4600gSR:(8.3mil一维码:8.9cm-19.1cm),(13milUPC:5.1cm-33.3cm),(6.6milPDF...
  • 安卓手机也可以当作扫描枪啦!一维码,二维码统统搞定。只要你的安卓手机能和电脑连接,就像扫描枪一样的效果,还支持当下流行的二维码识别,方便快捷。本软件还支持摄像头进
  • 使用 (“斑马线”),这是一个用 Java 实现的开源、多格式一维/二维条码图像处理库,可移植到其他语言。 演示 您可以在 codeandbox 演示站点中进行测试。 安装 使用 Vue Barcode Reader 的最简单方法是从npm或yarn...
  • 基于MATLAB的一维条码二维码识别课题背景介绍条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、...

    基于MATLAB的一维条码二维码识别


    1. 课题背景介绍

    条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响。

    不同的条码有着不同的识读过程。本设计研究一种基于图像处理方式的识读方法,通过计算机辨识来解决条码印刷质量不佳和条码变形等问题。该方法是采用摄像头采集条码图像,通过照相,一次性采集条码图像的方法避免了线性扫描器逐行扫描所产生的问题,同时简化了扫描条码图像的操作。然后通过一定的数字图像处理算法处理进行译码。译码算法主要分为两部分:第一部分首先对采集的条码图像进行预处理,这将为后面实现正确译码打下基础;第二部分就是对预处理后的条码图像进行译码,我们将利用统计方法、根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。与用条码识读器硬件进行译码相比,软件译码具有更大的灵活性和较低的成本,因此具有很大的发展潜力。本设计在Matlab软件语言环境下实现。

    1. 课题研究意义

    条形码技术主要研究如何用条码标识信息、并将条形码表示的信息转换成计算机可识读的语言,以实现自动输入、自动识读、自动统计.在先进的工业国家里,条码技术作为一种信息处理技术己成为社会化产物,不仅应用于生产过程,而且也应用于管理过程。在我国条码技术起步比较晚,但它的发展非常迅速,己被广泛用于工业、商业、图书出版、医疗卫生等各行各业。随着全球经济贸易体系的形成,将被更广泛用于其它领域。现在,它已变成商品进入国际市场的通行证.但是,由我国目前发展现状来看,主要有两种因素影响条码正常使用。首先条形码在印刷中存在许多质量问题,据1998年4月桂林条码工作会议公布的数字表明,我国商品条码不合格率达20%--30%,使大量名牌产品、优质产品不能进入超级市场(POS商店)。条码印刷质量对其能否正常使用是至关重要的,质量低劣出现扫描误读,不仅造成不必要的经济损失,而且将大大影响了工作效率。其次,运输过程中造成的条码磨损、断裂和脏污是影响条码正确误读的另一个重要的因素。

    目前,市场上普遍采用的条形码识读装置是光电识读器。由一般条码识读器的原理可知:条形码的宽窄和颜色的对比度都会对光的反射产生影响,不可避免的会影响到条码正确识读;此外,由于光电识读器采用线扫描方式,斑点、脏污和纸面断裂也会造成反射光的差异,相应的对条码识读也必然会产生影响。因此,一方面条码标准化工作需要大力加强;另一方面研制有一定的辨识能力的条码阅读装置具有十分重要的现实意义。条码图像辨识在一些特殊情况下将发挥着极大的优势。图像处理识读方法是首先对条码图像进行处理,然后利用统计方法,根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,这样将大大降低条码印刷质量以及条码污染等各种因素的干扰,从而有效地提高条码的识读率。


    1. 算法流程

    本文研究的是基于数字图像处理的EAN-13条形码识别算法,通过工具平台(Matlab)实现。其中图像处理部分是条码识别重要的前期工作,利用Matlab强大的图象处理工具箱实现图像的读入、加噪仿真、滤波、二值化处理等工作,最终得到高质量的二值化图像。条码识别就是在二值图像的基础上实现,二值图像的质量直接关系到条码能否正确识读。在条码识读方法上,我们对宽度测量法、平均值法简单介绍,而对相似边距离的测量方法这一低误码率方法进行详细具体研究。

    3.1 预处理结果与分析

    根据上述条码图像预处理的理论知识编译相关的Matlab程序,得到如图3-2所示图像预处理结果。


    v2-ce32b084eef1356c2e61ced545ed8574_b.jpg


    图3-1 条码图像预处理

    分析:Matlab图像处理工具箱支持的图像文件格式丰富,但通常情况下我们习惯于BMP格式图像的处理。利用imread函数将图像由计算机硬盘读入内存。

    图像读入识别设备后或多或少都会受到噪声的影响,噪声的来源和类型是随机的。在Matlab平台上我们利用图像处理工具箱提供的imnoise函数能够对图像添加gaussian,localvar,passion,salt&pepper,speckle五种类型的噪声,达到仿真的效果。噪声影响条码图像的质量,从而影响条码的正确识读。而要想达到好的滤波效果就要针对图像的特征采用相应的滤波方法。中值滤波和低通滤波就是相对较适合条码图像的滤波方法。对于中值滤波,采用不同的模板会有不同的滤波效果,例如采用3×3模板的除噪效果好于采用5×1模板,后者处理后的图像边缘上和数字上还存有未滤除的椒盐颗粒。

    在实际的识读过程中,影响条码图像质量的不仅仅是噪声,还有条码图像读入过程中出现的倾斜,因此必须对图像进行矫正。我们可采用Hough变换,快速、准确地找到倾斜角度,实现对图像的矫正。本设计不考虑图像的倾斜情况

    对滤波后的图像进行二值化处理,是条码识读的前提。二值化效果的好坏直接关系到条码识读的正确与否。如二值化后图像没达到预期的效果,我们运用形态学中的开和闭运算除去二值图像中的随机噪声。

    以上所有数字图像处理算法对其它一维条码是通用的,也可应用于其它一维条码的处理和识别。

    3.2 EAN-13码译码原理及其Matlab实现

    3.2.1 条码译码原理

    如图3-2所示是EAN-13条码的一个字符。条、空宽度的定义如下:图中C1、C2、C3、C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度。


    v2-7263868ef68d83a33580bff33af6b321_b.jpg


    图3-2 EAN-13条码宽度的定义

    设一个字符中单位模块的宽度为n,则单位模块的宽度:

    n=T/7

    T=C1+C2+C3+C4

    由于条码条、空宽度C1、C2、C3、C4已知,设条码条、空分别占单位模块的个数为mi,则:

    mi=ci/n(其中i取1、2、3、4)

    因此,由mi可知道条码的编码。例如:

    (1)若m1=2、m2=2、m3=2、m4=1;

    条码的排列为条-空-条-空,

    则可知条码编码为1100110,是右侧偶性字符1;

    (2)若m1=1、m2=2、m3=1、m4=3;

    条码的排列为空-条-空-条,

    则可知条码编码为0110111,是右侧奇性字符8。


    3.2.2 条码译码方法

    方案一:宽度测量法

    在图像方式的译码过程中,宽度的测量不再采用传统的脉冲测量法,而是通过记录每个条或空的宽度中所含象素的个数来确定实际的条/空宽度,从而确定整个条码符号所代表的信息。

    方案二:平均值法

    对条码符号图像中从起始符到终止符整个宽度进行测量,然后除以95(标准宽度),求出单位模块所含的像素列宽,再分别测量各个条空的实际宽度(此宽度以单位宽度为单位计算)

    方案三:相似边距离的测量方法

    这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量值来判别。

    前两种方案对条码图像的要求非常高,因为它们都是测量各元素符号的实际宽度,然后根据查表法得到所代表的码值。如果实际测量值与标准值存在一点偏差,就不能实现正确译码。而第三种方案正是有效的解决了这一问题,因此我们采用相似边距离测量的方法来实现译码功能.下面就简要说明一下这一方法。

    由原理知,要想辨识一个条码,必须先测量条码条、空宽度C1、C2、C3、C4以及一个字符的宽度T。条码图像经过预处理后得到的是二值图像,该点的颜色信息在阈值变换时已经定义,用255和0表示白和黑色。我们从条码的左边开始取点,若遇到点的灰度值由255变到0即由点的颜色由白色变为黑色,则表示检测到条,记录下该点的坐标值,如果点的颜色由黑色变为白色,则表示检测到空,记录下该点的坐标值。这样经过扫描后得到各个颜色变化点的坐标,然后将相邻两点的横坐标相减得到各个条、空的宽度.由前面所述EAN-13条码的组成知:一个由占3个条空的起始符、3个条空的终止符、4个条空的左侧数据符、5个条空的中间分隔符、20个条空的右侧数据符、4个条空的校验符组成。所以,整个条码字符占的条空总数为59,若条码字符没有发生几何畸变,一行扫描应记录的坐标数为60个;而对于有几何畸变的条码图像,例如条码污染、条码断裂、条码瑕疵等,该扫描行的坐标数将肯定大于60或小于60,这时将不记录该扫描行,对此行不处理。这样利用图像统计方法,逐行扫描图像,获取条码图像信息,比起只由一行获取信息的方式可靠性更高,这样即使个别噪声点存在并不影响图像信息的获取。

    (1)条码宽度的计算:

    设条码字符颜色由黑变为白或由白变为黑(由“0”变为“1”或由“1”变为“0”)的各点坐标为x1、x2、 ……、x60。则一行扫描的条空宽度(像素)分别为:c1=x2-x1、c2=x3-x2、……、c59=x60-x59.

    由上述图像条码译码理论可总结出条码条空宽度计算步骤,如图3-3所示:

    v2-1995d83881f25f2ffeaf7a2b066facd6_b.jpg


    图3-3 条码条空宽度计算

    在Matlab中采用读取像素的方法实现。经过二值化后得到一个二值化图象矩阵bw。简单起见,我们可以读取矩阵bw的中间一行,得到一个向量A。为了提高可靠性,我们也可逐行扫描。

    [h,l]=size(bw); %得到二值图像bw的大小

    A=bw(round(h/2),:);

    A中只有0和1表示黑与白。读取其中的元素,发生变化记下坐标(像素)存入另一个向量x中,x元素前后依次相减存入向量y中得条码宽度

    (2)条码字符的判别—相似边距法

    理论上条形码字符的逻辑值应该由条形码的实际宽度来判断,而相似边距离方法的设计思想通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由元素宽度的实际值来判别。此种方法的优点是:即使条码质量存在缺欠,使得实际测量值和条码应该具有的理论值有较大的偏差,仍然可以根据相似边的距离能够正确解释。什么是相似边距离?图3-4给出了相似边之间的距离,则图中t1, t2, t3, t4, t5, t6, t7(归一化值)为条形码相似边距离。本文采用归一化理论,用一种相似边距离归一化的方法对字符进行判别。该方法即使条码印刷质量有偏差,仍能正确对条码进行识读.


    v2-12bd7e0a70c6a490bbbdd4273c1ab94c_b.jpg


    图3-4 相似边之间的距离 图3-5条码字符宽度示图

    首先见图3-5各种宽度的定义:C1, C2, C3, C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度,t1 , t2为相似边之间的距离,则用下列值Ti(i=1,2)来定义TI与T2的归一化值。

    测量图3-4中7个宽度值T, t1, t2, t3, t4, t5, t6;然后将测量值t1, t2, t3, t4, t5, t6转换为常数值Tl, T2, T3, T4, T5,及T6即T序列值,它代表了这些测量值的整数模块宽,以下方法用于i序列值的求取:

    若1.5≦ti≦2.5,那么Ti=2

    若2.5≦ti≦3.5,那么Ti=3

    若3.5≦ti≦4.5,那么Ti=4

    若4.5≦ti≦5.5,那么Ti=5

    表3-2列出了正向译码时,EAN-13条码字符值与归一化值(Tl, T2)的对应关系。

    表3-2 EAN-13条码字符与归一化值

    v2-8c72175683ca203318b49aed8f7daee1_b.jpg


    表3-2中“E”表示偶字符,“O”表示奇字符

    EAN-13码字符编码与归一化值(T1. T2)的对应关系见表3-3。

    表3-3 EAN-13字符编码与归一化值

    v2-adce40a1ec2f512e14428520c61906a9_b.jpg


    表3-3中可以看到条形码编码和归一化值在多数情况下呈现一一对应的关系,只要确定了归一化值就能确定字符值,但是有四种情况例外,在表3-3中知,左侧奇字符和右侧偶字符1,7归一化值均为44,左侧奇字符和右侧偶字符2,8归一化值均为33,左侧偶字符1,7归一化值均为34,左侧偶字符2,8归一化值均为43。这两种情况可以在判别字符时根据C1,C2,C3,C4进一步判别,根据它们条空宽度特点进行判别。有1728字符标准条空宽度值的特点知:对于左侧奇字符、右侧偶字符1和7可通过C3与C4作比较,C3>C4者为字符1,反之为7;对于左侧奇字符、右侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符8,反之为2;对于左侧偶字符1和7可通过C1与C2作比较,C1>C2者为字符7,反之为1;对于左侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符2,反之为8;

    由上述条码字符识别理论可总结出相似边距离测量法的一般步骤。由条码宽度的计算我们得到了各个条、空的宽度(像素),并通过计算n=T/7,T=C1+C2+C3+C4得到单位模块的宽度(像素)。各个条空的宽度除以单位模块的宽度就是归一化的条空宽度。而为了方便译码,我们除去起始符3个条空,中间分隔符5个条空,终止符3个条空,对剩下的48个条空每4个条空为一组进行译码。计算相似边之间的距离t1、t2从而得到归一化(T1,T2)。最后查表可得条码字符。为检验译码的正确性利用校验位对码字进行校验。流程图如图3-6。

    v2-2259ef166550a51e552dc9f6c661a06f_b.jpg


    图3-6 字符判别流程图

    3.3.3 译码结果与分析

    根据上述译码理论,采用相似边距离测量方法对3.2.1节中预处理后的条码图像(二值图像)进行译码,得到如下所示译码结果。


    v2-144650bdff16a86e48ca3742d6bef8e2_b.jpg

    展开全文
  • 条码检测系统——基于MATLAB的一维条码识别摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书...

    条码检测系统——基于MATLAB的一维条码识别


    摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响。

    不同的条码有着不同的识读过程。本设计研究一种基于图像处理方式的识读方法,通过计算机辨识来解决条码印刷质量不佳和条码变形等问题。该方法是采用摄像头采集条码图像,通过照相,一次性采集条码图像的方法避免了线性扫描器逐行扫描所产生的问题,同时简化了扫描条码图像的操作。然后通过一定的数字图像处理算法处理进行译码。译码算法主要分为两部分:第一部分首先对采集的条码图像进行预处理,这将为后面实现正确译码打下基础;第二部分就是对预处理后的条码图像进行译码,我们将利用统计方法、根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。与用条码识读器硬件进行译码相比,软件译码具有更大的灵活性和较低的成本,因此具有很大的发展潜力。本设计在Matlab软件语言环境下实现。


    关键词:图像处理 条码识别 EAN-13 相似边距离 Matlab




    第1章 引 言


    1.1 条码技术概述

    在信息时代的今天,计算机的应用己和我们的生活紧密地联系在一起。计算机快速准确的信息处理速度,给工农业生产、经营管理以及人们的日常生活等方面都带来了巨大的效益。可以说计算机的出现、普及和应用加速了社会发展进程。然而,在运用计算机进行信息处理时,面临的一个重要问题是如何提高信息输入速度问题,使之与计算机的高速运算能力相匹配。只有解决这个问题,才能发挥计算机高速处理信息的能力。因此,要求有一种简单、易行、廉价、高速的输入技术,条形码技术正是具备这一特征,因而它为世界各国所重视,并获得极大的发展。

    条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。随着70年代微处理器的问世,标志着“信息化社会”的到来,它要求人们对社会上各个领域的信息、数据实施正确、有效、及时的采集、传递和管理。因此如何代替人的视觉、人的手工操作、或者在复杂的环境中正确、迅速地获取信息并加以识别,成为人们普遍关心和有关人员精心研究的课题。

    通俗的说条形码是指在浅色衬底上印有深色矩形的线条(也称条码)排列而成的编码,其码条和空白条的数量和宽度按一定的规则(标准)排列。条形码是由一组规则排列的条、空、相应的数字组成。这种用条、空组成的数据编码可以供机器识读,而且很容易译成二进制数和十进制数。这些条和空可以有各种不同的组合方法,构成不同的图形符号,即各种符号体系,适用于不同的应用场合。条码系统是由条码符号设计、制作及扫描阅读组成的自动识别系统。微电子技术和激光技术的发展使得条码识别系统越来越受到人们的关注。条码是迄今为止最经济、实用的一种自动识别技术。条码技术具有以下几个方面的优点:

    1、可靠准确。有资料可查键盘输入平均每300个字符一个错误,而条码输入平均每15000个字符一个错误。如果加上校验位出错率是千万分之一。

    2、数据输入速度快。键盘输入,一个每分钟打90个字的打字员1.6秒可输入12个字符或字符串,而使用条码,做同样的工作只需0.3秒,速度提高了5倍。

    3、经济便宜。与其它自动化识别技术相比较,推广应用条码技术,所需费用较低。

    4、灵活、实用。条码符号作为一种识别手段可以单独使用,也可以和有关设备组成识别系统实现自动化识别,还可和其他控制设备联系起来实现整个系统的自动化管理。同时,在没有自动识别设备时,也可实现手工键盘输入。

    5、自由度大。识别装置与条码标签相对位置的自由度要比OCR大得多。条码通常只在一维方向上表达信息,而同一条码上所表示的信息完全相同并且连续,这样即使是标签有部分缺欠,仍可以从正常部分输入正确的信息。

    6、设备简单。条码符号识别设备的结构简单,操作容易,无需专门训练。

    7、易于制作,可印刷,称作为“可印刷的计算机语言”。条码标签易于制作,对印刷技术设备和材料无特殊要求。


    1.2 本文的研究意义及内容

    1.2.1 研究意义

    条形码技术主要研究如何用条码标识信息、并将条形码表示的信息转换成计算机可识读的语言,以实现自动输入、自动识读、自动统计.在先进的工业国家里,条码技术作为一种信息处理技术己成为社会化产物,不仅应用于生产过程,而且也应用于管理过程。在我国条码技术起步比较晚,但它的发展非常迅速,己被广泛用于工业、商业、图书出版、医疗卫生等各行各业。随着全球经济贸易体系的形成,将被更广泛用于其它领域。现在,它已变成商品进入国际市场的通行证.但是,由我国目前发展现状来看,主要有两种因素影响条码正常使用。首先条形码在印刷中存在许多质量问题,据1998年4月桂林条码工作会议公布的数字表明,我国商品条码不合格率达20%--30%,使大量名牌产品、优质产品不能进入超级市场(POS商店)。条码印刷质量对其能否正常使用是至关重要的,质量低劣出现扫描误读,不仅造成不必要的经济损失,而且将大大影响了工作效率。其次,运输过程中造成的条码磨损、断裂和脏污是影响条码正确误读的另一个重要的因素。

    目前,市场上普遍采用的条形码识读装置是光电识读器。由一般条码识读器的原理可知:条形码的宽窄和颜色的对比度都会对光的反射产生影响,不可避免的会影响到条码正确识读;此外,由于光电识读器采用线扫描方式,斑点、脏污和纸面断裂也会造成反射光的差异,相应的对条码识读也必然会产生影响。因此,一方面条码标准化工作需要大力加强;另一方面研制有一定的辨识能力的条码阅读装置具有十分重要的现实意义。条码图像辨识在一些特殊情况下将发挥着极大的优势。图像处理识读方法是首先对条码图像进行处理,然后利用统计方法,根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,这样将大大降低条码印刷质量以及条码污染等各种因素的干扰,从而有效地提高条码的识读率。


    1.2.2 研究内容及本文的组织安排

    本文研究的是基于数字图像处理的EAN-13条形码识别算法,通过工具平台(Matlab)实现。其中图像处理部分是条码识别重要的前期工作,利用Matlab强大的图象处理工具箱实现图像的读入、加噪仿真、滤波、二值化处理等工作,最终得到高质量的二值化图像。条码识别就是在二值图像的基础上实现,二值图像的质量直接关系到条码能否正确识读。在条码识读方法上,我们对宽度测量法、平均值法简单介绍,而对相似边距离的测量方法这一低误码率方法进行详细具体研究。

    文章先对条码技术诞生及发展、条码技术的优点进行简要概述,使读者对条码有个清晰的概念。重点介绍一维条码中的EAN-13码的发展、结构、特征、译码原理及其Matlab实现。对Matlab图像处理方面也有一定的研究。最后是对整个课题研究过程中成败得失的总结,为以后的研究工作积累宝贵的经验。


    第二章 一维条码技术


    2.1 一维条码简述

    条码是将线条与空白按照一定的编码规则组合起来的符号,用以代表一定的字母、数字等资料。在进行辨识的时候,是用条码阅读机扫描,得到一组反射光信号,此信号经光电转换后变为一组与线条、空白相对应的电子讯号,经解码后还原为相应的文数字,再传入电脑。条码辨识技术已相当成熟,其读取的错误率约为百万分之一,识读率大于98%,是一种可靠性高、输入快速、准确性高、成本低、应用面广的资料自动收集技术。

    世界上约有225种以上的一维条码,每种一维条码都有自己的一套编码规格,规定每个字母(可能是文字或数字或文数字)是由几个线条(Bar)及几个空白(Space)组成,以及字母的排列。目前使用频率最高的几种一维条码码制有:EAN、UPC、三九码、交插二五码和EAN128码。其中UPC条码主要用于北美地区。EAN条码是国际通用符号体系,它们是一种定长、无含义的条码,主要用于商品标识。EAN128码是由国际物品编码协会和美国统一代码委员会联合开发、共同采用的一种特定的条码符号,它是一种连续型、非定长有含义的高密度代码,用以表示生产日期、批号、数量、规格、保质期、收货地等更多的商品信息。另有一些码制主要是适应于某种特殊场合,如库德巴码用于血库、图书馆、包裹等的跟踪管理;二五码用于包装、运输和国际航空系统为机票进行顺序编号。还有类似三九码的九三码,它的密度较高,可代替三九码。以上所说的都是一维条码,就是常说的传统条码。本文主要研究其中的EAN13码。

    条码可分为一维条码 (One Dimensional Barcode, 1D) 和二维码(Two Dimensional Code, 2D)两大类,目前在商品上的应用仍以一维条码为主,故一维条码又被称为商品条码,二维码则是另一种渐受重视的条码,其功能较一维条码强,应用范围更加广泛。


    2.2 一维条码符号的结构

    通常一个完整的条码是由两侧空白区、起始字符、数据字符、校验字符、终止字符组成,以一维条码而言,其排列方式通常如表2-1所示:


    表2-1 条码符号结构


    v2-8fbd1eb235f02ef39b84b33988156a1b_b.jpg



    v2-b30755657b0013407af0441f79732c95_b.jpg


    图2-1 条码符号

    1、空白区

    位于条码两侧无任何符号及资讯的白色区域,主要用来提示扫瞄器准备扫瞄。

    2、起始字符

    指条码符号的第一位字码,用来标识一个条码符号的开始,扫瞄器确认此字码存在后开始处理扫瞄脉冲。

    3、数据字符

    位于起始字符后面的字码,用来标识一个条码符号的具体数值,允许双向扫瞄。

    4、校验字符

    用来判定此次阅读是否有效的字码,通常是一种算术运算的结果,扫瞄器读入条码进行解码时,先对读入各字码进行运算,如运算结果与检查码相同,则判定此次阅读有效。

    2.3 EAN码简述

    EAN码的全名为欧洲商品条码(European Article Number),源于公元1977年,由欧洲十二个工业国家所共同发展出来的一种条码。目前已成为一种国际性的条码系统。EAN条码系统的管理是由国际商品条码总会(International Article Numbering Association)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。目前已有30多个国家加盟EAN。

    EAN码由前缀码、厂商识别码、商品项目代码和校验码组成。前缀码是国际EAN组织标识各会员组织的代码,我国为690、691和692;厂商代码是EAN编码组织在EAN分配的前缀码的基础上分配给厂商的代码;商品项目代码由厂商自行编码;校验码为了校验代码的正确性。在编制商品项目代码时,厂商必须遵守商品编码的基本原则:对同一商品项目的商品必须编制相同的商品项目代码;对不同的商品项目必须编制不同的商品项目代码。保证商品项目与其标识代码一一对应,即一个商品项目只有一个代码,一个代码只标识一个商品项目。

    另外,图书和期刊作为特殊的商品也采用了EAN-13表示ISBN和ISSN。前缀977被用于期刊号ISSN图书号ISBN用978为前缀,我国被分配使用7开头的ISBN号,因此我国出版社出版的图书上的条码全部为9787开头。

    EAN码具有以下特性:

    1.只能储存数字。

    2.可双向扫描处理,即条码可由左至右或由右至左扫描。

    3.必须有一检查码,以防读取资料的错误情形发生,位于EAN码中的最右边处。

    4.具有左护线、中线及右护线,以分隔条码上的不同部分与截取适当的安全空间来处理。

    5.条码长度一定,较欠缺弹性,但经由适当的管道,可使其通用于世界各国。

    6.依结构的不同,可区分为:

    EAN-13码:由13个数字组成,为EAN的标准编码型式。
      EAN- 8码:由8个数字组成,属EAN的简易编码型式。


    2.4 EAN-13码符号的特征

    (1)条码符号的整体形状为矩形。由一系列互相平行的条和空组成,四周都留有空白区。

    (2)条空分别由1-4个同一宽度的的深或浅颜色的模块组成。深色模块用“1”表示,浅色模块用“0”表示。

    (3)在条码符号中,表示数字的每个条码字符仅由两个条和两个空组成,共7个模块。

    (4)除了表示数字的条码字符外,还有一些辅助条码字符,用作表示起始、终止的分界符和平分条码符号的中间分隔符。

    (5)条码符号可设计成既可供固定式扫描器全向扫描,又可用手持扫描设备识读的形式。

    (6)条码符号的大小可在放大系数的两个极限值所决定的尺寸之间变化,以适应不同印刷工艺的需求及用户对印刷面积的要求。

    (7)对一个特定大小的条码符号所规定的尺寸称为名义尺寸,放大系数的范围0.8-2.0。

    (8)供人识别的字符规定采用OCR-B字符。


    v2-e0cd94f82914f8d6801004c2d786dc5e_b.jpg


    图2-2 EAN-13条码符号


    2.4.1 EAN-13码字符集

    EAN-13条码字符集包括10个数字字符,即0-9。在条码符号中,每个数字字符由七个模块的二进制表示,其表示形式见条码字符集中的A,B,C三个子集(见表2-2)。

    表2-2 条码字符集


    v2-d5baf56760ca7213a3be122f6f522a3d_b.jpg


    A子集中条码字符所包含的深色模块的个数为奇数,称为奇排列。B、C子集中条码字符所包含的深色模块的个数为偶数,称为偶排列。

    条码字符集示意图见图2-3。A、B子集的条码字符从左到向右,以一个浅色模块开始,以一个深色模块结束。C子集的条码字符从左到右,以一个深色模块开始,以一个浅色模块结束。


    v2-1d85ca81d20a22b155a0e8cf23f18c2f_b.jpg


    图2-3 通用商品条码字符集示意图


    2.4.2 EAN-13码符号结构

    EAN-13条码符号是由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符及右侧空白区构成,如图2-4所示。


    v2-76003dba1c678afc9a2be6683a5aa477_b.jpg

    图2-4 EAN-13条码符号结构


    v2-79897878e45daf4d8a1eea9385bb23bd_b.jpg


    图2-5 EAN-13条码符号构成示意图

    左侧空白区:位于条码符号起始符左侧,无印刷符号且与空的颜色相同的区域。其最小宽度为11个模块宽。

    起始符:位于条码符号左侧,表示信息开始的特殊符号,由3个模块组成。

    左侧数据符:介于起始符和中间分隔符之间的表示信息的一组条码字符。表示前缀码(不包含前置码)和厂商代码,共6位数字。条码字符按A子集或B子集的形式构成。左侧数据符由42个模块组成。

    中间分隔符:位于条码符号的中间位置,是平分条码符号的特殊符号,由5个模块组成。

    右侧数据符:中间分隔符右侧的一组选自C子集的条码字符,表示5位商品代码,又35个模块组成。

    校验符:最后一个条码字符,选自C子集,由7个模块组成,表示一个校验字符。

    终止符:位于条码符号右侧,表示信息结束的特殊符号,由3个模块组成。

    右侧空白区:在终止符之外的无印刷符号且与空的颜色相同的区域,其最小宽度为7个模块。

    EAN-13条码符号所包含的模块总数为113个。EAN-13条码的前置码不用条码表示,也不包括在左侧数据符中。左侧数据符是根据前置码所决定的条码字符构成方式(奇排列和偶排列)来表示前置码之后的6位数字的。见表2-3。







    表2-3 左侧数据符的奇偶排列规则


    v2-6430229675d85759fcc8df12fd70de23_b.jpg


    注:表中A为A子集,B为B子集

    纵向值0-9:代表前置码数值;横向值12-7:代表代码位置序号


    2.5 EAN-13码的校验

    校验码的主要作用是防止条码标志因印刷质量低劣或包装运输中引起标志破损而造成扫描设备误读信息而设置,作为确保商品条形码识读正确性的必要手段。条形码用户在标志设计完成后,代码的正确与否直接关系到用户的自身利益。对代码的验证,校验码的计算是标志商品质量检验的重要内容之一。下面是EAN-13码的校验码验算方法,步骤如下:

    (1)将条形码中数字码由右至左位排序(包括校验码);

    (2)从代码位置序号2开始,所有偶数位的数字代码求和为a;

    (3)将上步中的a乘以3为a;

    (4)从代码位置序号3开始,所有奇数位的数字代码求和为b;

    (5)将a和b相加为s;

    (6)取s的十进制个位数d,再由10减去d即为校验位数值C。





    第三章 EAN-13码的识读


    3.1 Matlab数字图象处理技术简介

    图像处理就是将图像转换为一个数字矩阵存放在计算机中,并采用一定的算法对其进行处理。目前的图像处理技术已经在许多的应用领域中得到重视,并取得了巨大的成就。根据应用领域的不同要求,可以将图像处理技术划分为许多分支,其中比较重要的分支有:图像数字化、图像增强与复原、图像编码、图像分割与特征提取、图像分析和图像隐藏。

    在图像处理方面,Matlab是一种基于向量(数组)而不是标量的高级程序语言,数字图像实际上就是一组有序的离散数据(具有二值或灰度值的二维数组),使用Matlab的矩阵变量对这些离散数据形成的矩阵能够进行一次性的处理。因此,Matlab从本质上提供了对图像的支持,非常适合于图像处理,较其它标量语言而言,这也是Matlab非常显著的一大优势。

    Matlab的图像处理工具箱,功能十分强大,支持的图像文件格式丰富,如*.BMP、*.JPG、*.JPEG、*.GIF、*.TIF、*.TIFF、*.PNG、*.PCX、*.XWD、*.HDF、*.ICO、*.CUR等。利用Matlab所提供的图像处理与分析工具,结合其强大的数据处理能力,研究人员可利用前人已取得的研究成果,可以把精力集中在新技术理论的研究上,而不必关心图像文件的格式、读写、显示和已有成果的技术细节,并快速测试其图像处理分析的新方案。测试既可方便地得到统计数据,同时又可得到直观图示。

    Matlab提供的图像处理函数涵盖了图像处理的包括近期研究成果在内的几乎所有的技术方法,是学习和研究图像处理的人员难得的宝贵资料和加工工具箱。Matlab强大的图形功能和丰富的图像处理工具箱函数能够将复杂的算法转化为简单函数调用,省去了大量的底层编程工作,从而使科研人员专注于研究或教学,并能够达到快速实现设计思路的目的。这些函数按其功能可分为:图像显示;图像文件I/O;图像算术运算;几何变换;图像登记;像素值与统计;图像分析;图像增强;线性滤波;线性二元滤波设计;图像去模糊;图像变换;邻域与块处理;灰度与二值图像的形态学运算;结构元素创建与处理;基于边缘的处理;色彩影射表操作;色彩空间变换;图像类型与类型转换。



    3.2 条码图像处理及其Matlab实现

    3.2.1 条码图像预处理


    v2-8d507e091aeccc79374533d4b1c876fa_b.jpg

    对于一个条码图像我们先要对其进行一定的处理才能达到正确译码的目的。而要对其进行处理,首先是要将其读入。由于有噪声的存在,我们必须对其进行滤波。我们也可人为地加入一定类型的噪声仿真,然后用合适的滤波方法进行滤波,这样有助于理解各种滤波方法所针对的噪声类型。最后就是要二值化,得到二值图像。条码图像预处理流程图如图3-1所示。

    图3-1 条码图像预处理流程图

    1.Matlab中利用函数imread来实现图像文件的读取操作。其格式如下:

    A=imread(‘文件名.文件格式’)

    通常情况下,我们通过imread函数读取的大多数图像都是8位的。当把这些图像加载到内存中时,Matlab就将其存储在类uint8中。此外,Matlab还支持16位的PNG和TIFF图像。当用户读取这类图像时,Matlab就将其存储在类uint16中。而对于索引图像来说,即使图像矩阵的本身为uint8或uint16,imread函数仍将颜色映射表读取并存储在一个双精度浮点类型的矩阵中。

    例如:I=imread('zhong.bmp');

    该语句可将条码图像读入内存,并以矩阵形式存储。

    2.Matlab的图像处理工具箱提供imnoise函数,可以用该函数给图像添加不同种类的噪声。该函数的调用格式如下:

    J=imnoise(I,‘type’,parameters)

    表3-1列出了imnoise函数能够产生的五种噪声及其对应参数。





    表3-1 imnoise函数支持的噪声种类及参数说明


    v2-3bf4d3a283ab645c3953d08d5ece46a0_b.jpg


    例如:J=imnoise(I,'salt & pepper',0.01);

    该语句实现在条码图像I中加入椒盐噪声。

    3.条码图像被采集进入计算机,由于设备、以及传输过程中的各种因素的影响,一些噪声将会对图像的质量产生影响。任何一幅未经处理的原始图象,都存在一定程度的噪声干扰。不同的噪声干扰,处理方法不同。影响条码图像质量最典型的噪声是椒盐噪声。椒盐噪声的特点是此干扰在图像中是以孤立点的形式存在的。

    针对噪声的类型,我们采用中值滤波。中值滤波是一种非线性信号处理方法。可以克服线性滤波器如最小均方滤波,平均值滤波(平滑滤波)等所带来的图像细节模糊。而且对于脉冲干扰及点状噪声有良好抑制作用,能较好保持图像边缘。它可以起到既消除噪声又保持图像细节的作用。

    为了达到好的滤波效果应选择合适的滤波窗口。从条码图像的特征来讨论选择采用的中值滤波窗口。条码图像的特点在于是由纵向一定宽度黑白条空组成,我们建立不同大小的模板,对含有噪声的图像进行滤波处理,比较它们滤除噪声干扰的效果。

    在Matlab中可以使用imfilter函数或filter2函数调用创建好的滤波器(可以是预定义滤波器,也可以是自定义滤波器)对图像进行滤波。

    例如:L=medfilt2(J,[3 1]);

    该语句实现对加噪声后条码图像J滤波,采用3×1模板。

    执行低通滤波也能收到很好的效果。用Matlab实现为:

    K=double(J)/255;

    h=[1/9 1/9 1/9,1/9 1/9 1/9,1/9 1/9 1/9];

    L=filter2(h,K);

    4.为了便于对图像进行后续处理,需要对图像进行二值化处理。二值化是一种图像分割技术中的区域分割技术,它是区域分割中最基本也是最常用的手段,使用阈值把图像和背景分割出来,也称阈值分割。二值化处理将不可避免地丢失图像信息,若阈值选取过小,会提取多余的部分,若选取的过大,会丢失所需要的图像信息。它对物体与背景有较强对比度的图像分割特别有效。如果感兴趣的物体在其内部具有均匀一致的灰度值,并分布在一个具有另一个灰度值的均匀背景上,使用阈值分割方法效果很好。阈值分割算法主要有两个步骤:(1)确定需要的分割阈值;(2)将像素与分割阈值作比较并划分。其中阈值选取是图像二值化处理中的一项重要技术,它的选取直接关系到后续的处理。

    根据一维条码的特点,条码图像由条和空组成。条即深色模块用“1”表示,空即浅色模块用“0”表示,深色的条与白色的空灰度明显呈对比状态,这样的特点恰好符合二值表示数据的特点,因此可以简化阈值变换过程;在二值图像中,“0”表示黑色,“255”表示白色,条码图像的灰度图中,虽然条、空的颜色不是二值的“0”和“255”,而是在[0,255]之间的某个灰度值,但是条、空的灰度对比是明显的,一般是位于灰度直方图的灰度范围,在其中间左右的位置指定一个阈值。根据对现场图像的反复测试得出:若表示为[0,1]范围内的数据值,可以选择[0.45,0.55]内的值作为阈值T(基于数字图像处理方式的EAN-13条码识读算法研究)。

    指定了一个阈值T之后,将图像中的像素与阈值作比较,如果图像中某像素的灰度值小于该阈值,则将该像素的灰度值设置为0,否则灰度值设置为255。

    按下式对图像进行处理可得到二值图像g(x,y): (3-1)

    在Matlab中,通过使用函数graythresh和im2bw创建一个新的二值图像bw:

    level=graythresh(L);

    bw=im2bw(L,level);


    3.2.2 预处理结果与分析

    根据上述条码图像预处理的理论知识编译相关的Matlab程序,得到如图3-2所示图像预处理结果。


    v2-ce32b084eef1356c2e61ced545ed8574_b.jpg


    图3-2 条码图像预处理

    分析:Matlab图像处理工具箱支持的图像文件格式丰富,但通常情况下我们习惯于BMP格式图像的处理。利用imread函数将图像由计算机硬盘读入内存。

    图像读入识别设备后或多或少都会受到噪声的影响,噪声的来源和类型是随机的。在Matlab平台上我们利用图像处理工具箱提供的imnoise函数能够对图像添加gaussian,localvar,passion,salt&pepper,speckle五种类型的噪声,达到仿真的效果。噪声影响条码图像的质量,从而影响条码的正确识读。而要想达到好的滤波效果就要针对图像的特征采用相应的滤波方法。中值滤波和低通滤波就是相对较适合条码图像的滤波方法。对于中值滤波,采用不同的模板会有不同的滤波效果,例如采用3×3模板的除噪效果好于采用5×1模板,后者处理后的图像边缘上和数字上还存有未滤除的椒盐颗粒。

    在实际的识读过程中,影响条码图像质量的不仅仅是噪声,还有条码图像读入过程中出现的倾斜,因此必须对图像进行矫正。我们可采用Hough变换,快速、准确地找到倾斜角度,实现对图像的矫正。本设计不考虑图像的倾斜情况

    对滤波后的图像进行二值化处理,是条码识读的前提。二值化效果的好坏直接关系到条码识读的正确与否。如二值化后图像没达到预期的效果,我们运用形态学中的开和闭运算除去二值图像中的随机噪声。

    以上所有数字图像处理算法对其它一维条码是通用的,也可应用于其它一维条码的处理和识别。

    3.3 EAN-13码译码原理及其Matlab实现

    3.3.1 条码译码原理

    如图3-2所示是EAN-13条码的一个字符。条、空宽度的定义如下:图中C1、C2、C3、C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度。


    v2-7263868ef68d83a33580bff33af6b321_b.jpg


    图3-2 EAN-13条码宽度的定义

    设一个字符中单位模块的宽度为n,则单位模块的宽度:

    n=T/7

    T=C1+C2+C3+C4

    由于条码条、空宽度C1、C2、C3、C4已知,设条码条、空分别占单位模块的个数为mi,则:

    mi=ci/n(其中i取1、2、3、4)

    因此,由mi可知道条码的编码。例如:

    (1)若m1=2、m2=2、m3=2、m4=1;

    条码的排列为条-空-条-空,

    则可知条码编码为1100110,是右侧偶性字符1;

    (2)若m1=1、m2=2、m3=1、m4=3;

    条码的排列为空-条-空-条,

    则可知条码编码为0110111,是右侧奇性字符8。


    3.3.2 条码译码方法

    方案一:宽度测量法

    在图像方式的译码过程中,宽度的测量不再采用传统的脉冲测量法,而是通过记录每个条或空的宽度中所含象素的个数来确定实际的条/空宽度,从而确定整个条码符号所代表的信息。

    方案二:平均值法

    对条码符号图像中从起始符到终止符整个宽度进行测量,然后除以95(标准宽度),求出单位模块所含的像素列宽,再分别测量各个条空的实际宽度(此宽度以单位宽度为单位计算)

    方案三:相似边距离的测量方法

    这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量值来判别。

    前两种方案对条码图像的要求非常高,因为它们都是测量各元素符号的实际宽度,然后根据查表法得到所代表的码值。如果实际测量值与标准值存在一点偏差,就不能实现正确译码。而第三种方案正是有效的解决了这一问题,因此我们采用相似边距离测量的方法来实现译码功能.下面就简要说明一下这一方法。

    由原理知,要想辨识一个条码,必须先测量条码条、空宽度C1、C2、C3、C4以及一个字符的宽度T。条码图像经过预处理后得到的是二值图像,该点的颜色信息在阈值变换时已经定义,用255和0表示白和黑色。我们从条码的左边开始取点,若遇到点的灰度值由255变到0即由点的颜色由白色变为黑色,则表示检测到条,记录下该点的坐标值,如果点的颜色由黑色变为白色,则表示检测到空,记录下该点的坐标值。这样经过扫描后得到各个颜色变化点的坐标,然后将相邻两点的横坐标相减得到各个条、空的宽度.由前面所述EAN-13条码的组成知:一个由占3个条空的起始符、3个条空的终止符、4个条空的左侧数据符、5个条空的中间分隔符、20个条空的右侧数据符、4个条空的校验符组成。所以,整个条码字符占的条空总数为59,若条码字符没有发生几何畸变,一行扫描应记录的坐标数为60个;而对于有几何畸变的条码图像,例如条码污染、条码断裂、条码瑕疵等,该扫描行的坐标数将肯定大于60或小于60,这时将不记录该扫描行,对此行不处理。这样利用图像统计方法,逐行扫描图像,获取条码图像信息,比起只由一行获取信息的方式可靠性更高,这样即使个别噪声点存在并不影响图像信息的获取。

    (1)条码宽度的计算:

    设条码字符颜色由黑变为白或由白变为黑(由“0”变为“1”或由“1”变为“0”)的各点坐标为x1、x2、 ……、x60。则一行扫描的条空宽度(像素)分别为:c1=x2-x1、c2=x3-x2、……、c59=x60-x59.

    由上述图像条码译码理论可总结出条码条空宽度计算步骤,如图3-3所示:

    v2-1995d83881f25f2ffeaf7a2b066facd6_b.jpg


    图3-3 条码条空宽度计算

    在Matlab中采用读取像素的方法实现。经过二值化后得到一个二值化图象矩阵bw。简单起见,我们可以读取矩阵bw的中间一行,得到一个向量A。为了提高可靠性,我们也可逐行扫描。

    [h,l]=size(bw); %得到二值图像bw的大小

    A=bw(round(h/2),:);

    A中只有0和1表示黑与白。读取其中的元素,发生变化记下坐标(像素)存入另一个向量x中,x元素前后依次相减存入向量y中得条码宽度

    (2)条码字符的判别—相似边距法

    理论上条形码字符的逻辑值应该由条形码的实际宽度来判断,而相似边距离方法的设计思想通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由元素宽度的实际值来判别。此种方法的优点是:即使条码质量存在缺欠,使得实际测量值和条码应该具有的理论值有较大的偏差,仍然可以根据相似边的距离能够正确解释。什么是相似边距离?图3-4给出了相似边之间的距离,则图中t1, t2, t3, t4, t5, t6, t7(归一化值)为条形码相似边距离。本文采用归一化理论,用一种相似边距离归一化的方法对字符进行判别。该方法即使条码印刷质量有偏差,仍能正确对条码进行识读.


    v2-12bd7e0a70c6a490bbbdd4273c1ab94c_b.jpg


    图3-4 相似边之间的距离 图3-5条码字符宽度示图

    首先见图3-5各种宽度的定义:C1, C2, C3, C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度,t1 , t2为相似边之间的距离,则用下列值Ti(i=1,2)来定义TI与T2的归一化值。

    测量图3-4中7个宽度值T, t1, t2, t3, t4, t5, t6;然后将测量值t1, t2, t3, t4, t5, t6转换为常数值Tl, T2, T3, T4, T5,及T6即T序列值,它代表了这些测量值的整数模块宽,以下方法用于i序列值的求取:

    若1.5≦ti≦2.5,那么Ti=2

    若2.5≦ti≦3.5,那么Ti=3

    若3.5≦ti≦4.5,那么Ti=4

    若4.5≦ti≦5.5,那么Ti=5

    表3-2列出了正向译码时,EAN-13条码字符值与归一化值(Tl, T2)的对应关系。









    表3-2 EAN-13条码字符与归一化值

    v2-8c72175683ca203318b49aed8f7daee1_b.jpg


    表3-2中“E”表示偶字符,“O”表示奇字符

    EAN-13码字符编码与归一化值(T1. T2)的对应关系见表3-3。

    表3-3 EAN-13字符编码与归一化值

    v2-adce40a1ec2f512e14428520c61906a9_b.jpg


    表3-3中可以看到条形码编码和归一化值在多数情况下呈现一一对应的关系,只要确定了归一化值就能确定字符值,但是有四种情况例外,在表3-3中知,左侧奇字符和右侧偶字符1,7归一化值均为44,左侧奇字符和右侧偶字符2,8归一化值均为33,左侧偶字符1,7归一化值均为34,左侧偶字符2,8归一化值均为43。这两种情况可以在判别字符时根据C1,C2,C3,C4进一步判别,根据它们条空宽度特点进行判别。有1728字符标准条空宽度值的特点知:对于左侧奇字符、右侧偶字符1和7可通过C3与C4作比较,C3>C4者为字符1,反之为7;对于左侧奇字符、右侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符8,反之为2;对于左侧偶字符1和7可通过C1与C2作比较,C1>C2者为字符7,反之为1;对于左侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符2,反之为8;

    由上述条码字符识别理论可总结出相似边距离测量法的一般步骤。由条码宽度的计算我们得到了各个条、空的宽度(像素),并通过计算n=T/7,T=C1+C2+C3+C4得到单位模块的宽度(像素)。各个条空的宽度除以单位模块的宽度就是归一化的条空宽度。而为了方便译码,我们除去起始符3个条空,中间分隔符5个条空,终止符3个条空,对剩下的48个条空每4个条空为一组进行译码。计算相似边之间的距离t1、t2从而得到归一化(T1,T2)。最后查表可得条码字符。为检验译码的正确性利用校验位对码字进行校验。流程图如图3-6。

    v2-2259ef166550a51e552dc9f6c661a06f_b.jpg


    图3-6 字符判别流程图

    3.3.3 译码结果与分析

    根据上述译码理论,采用相似边距离测量方法对3.2.1节中预处理后的条码图像(二值图像)进行译码,得到如下所示译码结果。


    v2-144650bdff16a86e48ca3742d6bef8e2_b.jpg


    分析:通过多次对不同EAN-13条码的识读,证明该条码检测系统速度快、效率高、而误码率却很低,即使在图像预处理上达不到理想的效果,条码仍能正确识读。这是因为我们选择了相似边距离测量的方法。可见,影响条码识别效果的不仅仅是条码图像预处理效果,译码方法更是不可忽视的重要原因。相似边距离测量方法有着其它译码方法无可比拟的优势,它不是根据条码条空宽度的实际值来判别,而是通过所谓的相似边距离来判别。因此,即使条码质量存在欠缺,仍然能够根据相似边距离正确解释条码,有着很强的对实际情况的适应性。

    误码率方面,一般情况下条码都能够正确识读。但在由一个字符的归一化的相似边距离t1、t2转换为T序列值T1、T2时,如果t1、t2的值为2.5、3.5、4.5之一,系统将不能正确的将其转换为T序列值,此时存在最大的误码率,条码几乎不能被正确识读。所以应该尽量避免此种情况的发生,这就要求我们做好图像的预处理工作,防止条码线条过度展宽或细化。

    需要指出的是,在实际的译码中还存在着正向译码和反向译码的情况,两种情况下字符编码对应着不同的归一化值。因此译码前需要判别译码方向。本设计直接采用正向译码。

    最后,译码是编码的反过程,编码技术的熟练掌握对译码工作有着事半功倍的效果。



    第四章 结 论


    在对条码图像作相应的图像预处理之后,对得到的二值条码图像利用上述条码识别算法在Matlab软件环境下编写了相应的软件程序。通过多次实验,识别效果很好,误码率低,大大提高了条码的识别率。相信对其它一维条码图像识别具有一定的理论及实践参考价值。

    本次设计在译码方法上进行了比较选择,确定了相似边距离的测量方法的优越性。这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量来判别。对条码图像的要求相对其它方法而言较低,具有较高的识别率,因而能够很好的满足实际需要。同时用软件实现条码的识别比硬件具有更好的抗噪声性能,且速度快,效率高。

    尽管如此,设计中也遇到了很多的问题有待进一步的解决和探索研究。图像处理是条码识别的重要基础。本设计只是对质量较好的条码图像进行一般性处理,但实际中的图像并都不是这么理想,例如条码污染、条码断裂、条码瑕疵等。这些需要进行特殊的图像处理过程才能达到译码的目的。如果条码被污染了我们要进行修复,条码发生几何畸变我们要进行图像矫正等等。只有考虑到更多的方面才能提高系统的性能和适应性,对一定质量范围内的条码图像都能进行有效的处理。其次,对软件程序的精简也是我所追求的,希望通过最精练的语句实现所需要的功能。程序中很多的语句还有进一步改进的空间,这样既能精简语句,使语句简明易懂,也能提高程序整体的执行速度,提高条码识别效率。

    在设计中,由于第一次接触图像处理,对很多细节、常识方面了解不够导致问题的出现,而且没能采取科学的方法进行错误分析、排查,使得问题小却难以解决。今后在做类似的工作的时候要注重基础知识的学习,并讲究科学的方法。做软件编程的对所用语言基础要够熟练掌握并能借助一定的参考资料进一步充实自己,提高自己。


    考文献


    [1]朱虹,数字图像处理基础[M],北京:科学出版社,2005。

    [2]张兆礼,现代图像处理技术及Matlab实现[M],北京:人民邮电出版社,2001。

    [3]徐飞,MATLAB应用图像处理[M],西安:西安电子科技大学出版社,2002。

    [4]冈萨雷斯,数字图像处理[M],北京:电子工业出版社,2003。

    [5]朱秀昌、刘峰、胡栋,数字图像处理与图像通信[M],北京:北京邮电大学出版社,2002。

    [6]徐建华,图像处理与分析[M],天津:天津科学技术出版社,1989。

    [7]李金哲,朱俊英,条码自动识别技术[M],北京:国防工业出版社,1991。

    [8]戴宏民,条形码技术及应用[M],重庆:重庆大学出版社,1991。

    [9]王雅静,基于图像处理的EAN-13条码识别算法[J],山东理工大学学报(自然科学版),2005,第19卷(第4期):3-5。

    [10]赵素霞,基于数字图像处理方式的EAN-13条码识读算法研究[C],山东:山东大学,2005,48-60。



    附 录


    表一 EAN-13字符编码与归一化值(反向译码)

    v2-d43e5a9c95435c84ae291868436d5ef0_b.jpg



    v2-db2d0ba44c11c720ba0ded592d107ff5_b.jpg


    图一 1728判别子程序流程图



    v2-900d8bc9afc0d491be0e2bb20a1b2c02_b.jpg


    图二 条码图象预处理



    v2-8fb07b6c511c99b14f631c49342fa77d_b.jpg


    图三 译码结果

    展开全文
  • 条码扫描器

    2014-12-25 09:13:36
    个android条码扫描器程序,布局及功能均很简单,删除了zxing中大量无关代码,主要通过两个class完成条码的扫描工作,相较于其他扫描类代码更易入门。
  • 基于MATLAB的一维条码识别摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各...

    基于MATLAB的一维条码识别


    摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响,而一般条码在搬运过程中条码会不可避免的破损,所以对质量较差的条码的条码的识别尤为重要。

    不同的条码有着不同的识读过程。本设计研究一种基于图像处理方式的识读方法,通过计算机辨识来解决条码印刷质量不佳和条码变形等问题。该方法是采用摄像头采集条码图像,通过照相采集条码图像的方法避免了线性扫描器逐行扫描所产生的问题,同时简化了扫描条码图像的操作。然后通过一定的数字图像处理算法处理进行译码。译码算法主要分为两部分:第一部分首先对采集的条码图像进行预处理,图像的预处理包括图像分割,图像滤波等,良好的图像处理将对后面实现正确译码有重大贡献;第二部分就是对预处理后的条码图像进行译码,我们根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。与用条码识读器硬件进行译码相比,软件译码具有更大的灵活性和较低的成本,所以具有很大的市场空间。借助于matlab软件的功能我们完成这次译码工作。


    关键词:图像处理 图像分割 条形码识别 EAN-13 相似边距识别 图像滤波Matlab


    目 录

    第1章 引言................................................................01

    1.1 条码技术概述.........................................................01

    1.2 Matlab应用图像处理...................................................02

    1.3本文的研究意义及内容..................................................03

    1.3.1 研究意义.................................................03

    1.3.2 研究内容及本文的组织安排.................................04

    第2章 一维条码技术........................................................05

    2.1 一维条码的简介.......................................................05

    2.2 一维条码符号的结构...................................................05

    2.3 EAN码简述............................................................06

    2.4 EAN-13码符号的特征..................................................07

    2.4.1 EAN-13码字符集...........................................08

    2.4.2 EAN-13码符号结构.........................................09

    2.5 EAN-13码的校验纠错..................................................11

    第3章 条码图像的预处理............................. ......................12

    3.1 图像分割理论.........................................................12

    3.1.1 图像分割的定义...........................................12

    3.1.2 图像分割的算法类.........................................13

    3.1.3 图像分割结果.............................................14

    3.2 图像灰度及二值化...............................................15 3.3 图像加噪仿真...........................................................16

    3.3 图像的滤波. ....................................................16

    3.3.1 图像的平滑滤波...........................................16

    3.3.2 形态学滤波...............................................17

    第4章 条码的译码方法......................................................20

    4.1 译码方案的选择..................................................20

    4.2 相似边距法介绍..................................................21

    4.3. 条码字符的判别.................................................22

    第5章 条码译码的基本原理..................................................25

    5.1 EAN_13的译码原理分析............................................25

    5.2译码结果分析.....................................................26 第6章 结论................................................................28

    参考文献...................................................................30

    附录.......................................................................36






    第1章 引 言

    1.1 条码技术概述

    在信息时代的今天,计算机的应用己和我们的生活紧密地联系在一起。计算机快速准确的信息处理速度,给工农业生产、经营管理以及人们的日常生活等方面都带来了巨大的效益。可以说计算机的出现、普及和应用加速了社会发展进程。然而,在运用计算机进行信息处理时,面临的一个重要问题是如何提高信息输入速度问题,使之与计算机的高速运算能力相匹配。只有解决这个问题,才能发挥计算机高速处理信息的能力。因此,要求有一种简单、易行、廉价、高速的输入技术,条形码技术正是具备这一特征,因而它为世界各国所重视,并获得极大的发展。

    条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。随着70年代微处理器的问世,标志着“信息化社会”的到来,它要求人们对社会上各个领域的信息、数据实施正确、有效、及时的采集、传递和管理。因此如何代替人的视觉、人的手工操作、或者在复杂的环境中正确、迅速地获取信息并加以识别,成为人们普遍关心和有关人员精心研究的课题。

    通俗的说条形码是指在浅色衬底上印有深色矩形的线条(也称条码)排列而成的编码,其码条和空白条的数量和宽度按一定的规则(标准)排列。条形码是由一组规则排列的条、空、相应的数字组成。这种用条、空组成的数据编码可以供机器识读,而且很容易译成二进制数和十进制数。这些条和空可以有各种不同的组合方法,构成不同的图形符号,即各种符号体系,适用于不同的应用场合。条码系统是由条码符号设计、制作及扫描阅读组成的自动识别系统。微电子技术和激光技术的发展使得条码识别系统越来越受到人们的关注。条码是迄今为止最经济、实用的一种自动识别技术。条码技术具有以下几个方面的优点:

    1、可靠准确。有资料可查键盘输入平均每300个字符一个错误,而条码输入平均每15000个字符一个错误。如果加上校验位出错率是千万分之一。

    2、数据输入速度快。 与键盘输入相比较,用条形码扫描读入电脑的速度大约是键盘输入的100倍,并且能够实现“即时数据输入”,一个每分钟打90个字的打字员1.6秒可输入12个字符或字符串,而使用条码,做同样的工作只需0.3秒,速度提高了5倍。

    3、经济便宜。与其它自动化识别技术相比较,推广应用条码技术,所需费用较低。

    4、灵活、实用。条码符号作为一种识别手段可以单独使用,也可以和有关设备组成识别系统实现自动化识别,还可和其他控制设备联系起来实现整个系统的自动化管理。同时,在没有自动识别设备时,也可实现手工键盘输入。

    5、自由度大。识别装置与条码标签相对位置的自由度要比OCR大得多。条码通常只在一维方向上表达信息,而同一条码上所表示的信息完全相同并且连续,这样即使是标签有部分缺欠,仍可以从正常部分输入正确的信息。

    6、设备简单。条码符号识别设备的结构简单,操作容易,无需专门训练。

    7、易于制作,可印刷,称作为“可印刷的计算机语言”。条码标签易于制作,对印刷技术设备和材料无特殊要求。

    证因为条码具有上述迅速,准确,廉价,使用方便,适应性强等优点,克服了其他输入方法的不足,所以他在各个行业中的发展可谓突飞猛进,最初应用于物流管理,最引人注目的是pos系统,它使商店的定货管理,盘点,库存管理,库存查询,验货管理,收款等各项工作得到极大地提高。目前已经应用到计算机自动化的各个领域,包括质量跟踪,仓储管理,物资管理,票证管理,人流物流管理,图书文献检索,医疗卫生,邮电系统,安全检查等领域。

    1.2 Matlab应用图像处理

    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)及其反变换。

    (4) 图像的分析和增强。针对图像的统计计算MATLAB 提供了校正、直方图均衡、中值滤波、对比度调整、自适应滤波等对图像进行的处理。

    (5) 图像的数学形态学处理。针对二值图像,MATLAB 提供了数学形态学运算函数;蚀(Erode)、膨胀(Dilate)算子,以及在此基础上的开 (Open)、闭(Close)算子、厚化 (Thicken) 、薄化 (Thin) 算子等丰富的数学形态学运算。


    1.3 本文的研究意义及内容

    1.3.1 研究意义

    条形码技术主要研究如何用条码标识信息、并将条形码表示的信息转换成计算机可识读的语言,以实现自动输入、自动识读、自动统计.在先进的工业国家里,条码技术作为一种信息处理技术己成为社会化产物,不仅应用于生产过程,而且也应用于管理过程。在我国条码技术起步比较晚,但它的发展非常迅速,己被广泛用于工业、商业、图书出版、医疗卫生等各行各业。随着全球经济贸易体系的形成,将被更广泛用于其它领域。现在,它已变成商品进入国际市场的通行证.但是,由我国目前发展现状来看,主要有两种因素影响条码正常使用。首先条形码在印刷中存在许多质量问题,据1998年4月桂林条码工作会议公布的数字表明,我国商品条码不合格率达20%--30%,使大量名牌产品、优质产品不能进入超级市场(POS商店)。条码印刷质量对其能否正常使用是至关重要的,质量低劣出现扫描误读,不仅造成不必要的经济损失,而且将大大影响了工作效率。其次,运输过程中造成的条码磨损、断裂和脏污是影响条码正确误读的另一个重要的因素。

    目前,市场上普遍采用的条形码识读装置是光电识读器。由一般条码识读器的原理可知:条形码的宽窄和颜色的对比度都会对光的反射产生影响,不可避免的会影响到条码正确识读;此外,由于光电识读器采用线扫描方式,斑点、脏污和纸面断裂也会造成反射光的差异,相应的对条码识读也必然会产生影响。因此,一方面条码标准化工作需要大力加强;另一方面研制有一定的辨识能力的条码阅读装置具有十分重要的现实意义。条码图像辨识在一些特殊情况下将发挥着极大的优势。图像处理识读方法是首先对条码图像进行处理,然后利用统计方法,根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,这样将大大降低条码印刷质量以及条码污染等各种因素的干扰,从而有效地提高条码的识读率。

    1.3.2 研究内容及本文的组织安排

    自从20世纪70年代以来,由于数字计算机技术迅猛发展给图像处理技术提供了技术手段,图像处理技术被广泛应用于国民经济的各个部门,并逐步深入人们生活。到目前为止,通过各种信息检索,有关图像处理技术用于一维条形码识读方面的技术成果及参考资料还没有发现。尽管以前关于条码识读的设备很多,但都是针对光电处理而言的。因此,通过图像处理识别条码是一种新的尝试,而条码图像识读算法的研究正是在该情况下的理论探索,本文所研究的是基于图像处理方式的条码的识别工作,具体工作如下:

    1 研究印刷质量对条码的影响,通过辨别解决条码印刷质量不佳的问题。

    2 针对条码图像特点,确立相应的图像处理算法,对采集的条码图像进行预处理,该部分的算法包括对条码图像进行定位 分割,对图像除噪滤波等以有效提取条码图像信息,为后面实现正确译码做准备。

    3 通过计算机仿真的方法加入噪声,生成干扰图像,用此对图像预处理算法进行检索。

    4 对预处理的条码的图像进行译码,利用统计方法,归一化理论,根据相似边距来判别字符。


    第二章 一维条码技术

    2.1 一维条码简介

    条码由一组规则排列的条,空及相应的字符组成。条码的信息靠条和空的不同宽度不同位置来传递的,信息量的大小事由条码的宽度和印刷的精度来决定的,条码越宽,包容的条和空越多,传递的信息量也越大,条码印刷的精度越高单位长度内可以容纳的条空也越多,传递的信息量也越大。这种用条空组成的数据编码很容易供机器识读,而且很容易已成二进制和十进制的数。

    世界上约有225种以上的一维条码,每种一维条码都有自己的一套编码规格,规定每个字母(可能是文字或数字或文数字)是由几个线条(Bar)及几个空白(Space)组成,以及字母的排列。目前使用频率最高的几种一维条码码制有:EAN、UPC、三九码、交插二五码和EAN128码。其中UPC条码主要用于北美地区。EAN条码是国际通用符号体系,它们是一种定长、无含义的条码,主要用于商品标识。EAN128码是由国际物品编码协会和美国统一代码委员会联合开发、共同采用的一种特定的条码符号,它是一种连续型、非定长有含义的高密度代码,用以表示生产日期、批号、数量、规格、保质期、收货地等更多的商品信息。另有一些码制主要是适应于某种特殊场合,如库德巴码用于血库、图书馆、包裹等的跟踪管理;二五码用于包装、运输和国际航空系统为机票进行顺序编号。还有类似三九码的九三码,它的密度较高,可代替三九码。以上所说的都是一维条码,就是常说的传统条码。本文主要研究其中的EAN13码。

    条码可分为一维条码 (One Dimensional Barcode, 1D) 和二维码(Two Dimensional Code, 2D)两大类,目前在商品上的应用仍以一维条码为主,故一维条码又被称为商品条码,二维码则是另一种渐受重视的条码,其功能较一维条码强,应用范围更加广泛。


    2.2 一维条码符号的结构

    通常任何一个完整的条码是由两侧空白区、起始符、数据字符、校验符、终止符组成,以一维条码而言,其排列方式通常如表2-1所示:


    表2-1 条码符号结构


    v2-8fbd1eb235f02ef39b84b33988156a1b_b.jpg



    v2-b30755657b0013407af0441f79732c95_b.jpg


    图2-1 条码符号

    1、空白区

    位于条码两侧无任何符号及资讯的白色区域,主要用来提示扫瞄器准备扫瞄。

    2、起始符

    指条码符号的第一位字码,用来标识一个条码符号的开始,扫瞄器确认此字码存在后开始处理扫瞄脉冲。

    3、数据符

    位于起始字符后面的字码,用来标识一个条码符号的具体数值,允许双向扫瞄。

    4、校验符

    用来判定此次阅读是否有效的字码,通常是一种算术运算的结果,扫瞄器读入条码进行解码时,先对读入各字码进行运算,如运算结果与检查码相同,则判定此次阅读有效。

    2.3 EAN码简述

    EAN码的全名为欧洲商品条码(European Article Number),源于公元1977年,由欧洲十二个工业国家所共同发展出来的一种条码。目前已成为一种国际性的条码系统。EAN条码系统的管理是由国际商品条码总会(International Article Numbering Association)负责各会员国的国家代表号码之分配与授权,再由各会员国的商品条码专责机构,对其国内的制造商、批发商、零售商等授予厂商代表号码。目前已有30多个国家加盟EAN。

    EAN码由前缀码、厂商识别码、商品项目代码和校验码组成。前缀码是国际EAN组织标识各会员组织的代码,我国为690、691和692;厂商代码是EAN编码组织在EAN分配的前缀码的基础上分配给厂商的代码;商品项目代码由厂商自行编码;校验码为了校验代码的正确性。在编制商品项目代码时,厂商必须遵守商品编码的基本原则:对同一商品项目的商品必须编制相同的商品项目代码;对不同的商品项目必须编制不同的商品项目代码。保证商品项目与其标识代码一一对应,即一个商品项目只有一个代码,一个代码只标识一个商品项目。

    另外,图书和期刊作为特殊的商品也采用了EAN-13表示ISBN和ISSN。前缀977被用于期刊号ISSN图书号ISBN用978为前缀,我国被分配使用7开头的ISBN号,因此我国出版社出版的图书上的条码全部为9787开头。

    EAN码具有以下特性:

    1.只能储存数字。

    2.可双向扫描处理,即条码可由左至右或由右至左扫描。

    3.必须有一检查码,以防读取资料的错误情形发生,位于EAN码中的最右边处。

    4.具有左护线、中线及右护线,以分隔条码上的不同部分与截取适当的安全空间来处理。

    5.条码长度一定,较欠缺弹性,但经由适当的管道,可使其通用于世界各国。

    6.依结构的不同,可区分为:

    EAN-13码:由13个数字组成,为EAN的标准编码型式。
      EAN- 8码:由8个数字组成,属EAN的简易编码型式。

    2.4 EAN-13码符号的特征

    (1)条码符号的整体形状为矩形。由一系列互相平行的条和空组成,四周都留有空白区。

    (2)条空分别由1-4个同一宽度的的深或浅颜色的模块组成。深色模块用“1”表示,浅色模块用“0”表示。

    (3)在条码符号中,表示数字的每个条码字符仅由两个条和两个空组成,共7个模块。

    (4)除了表示数字的条码字符外,还有一些辅助条码字符,用作表示起始、终止的分界符和平分条码符号的中间分隔符。

    (5)条码符号可设计成既可供固定式扫描器全向扫描,又可用手持扫描设备识读的形式。

    (6)条码符号的大小可在放大系数的两个极限值所决定的尺寸之间变化,以适应不同印刷工艺的需求及用户对印刷面积的要求。

    (7)对一个特定大小的条码符号所规定的尺寸称为名义尺寸,放大系数的范围0.8-2.0。

    (8)供人识别的字符规定采用OCR-B字符。


    v2-e0cd94f82914f8d6801004c2d786dc5e_b.jpg


    图2-2 EAN-13条码符号

    2.4.1 EAN-13码字符集

    EAN-13条码字符集包括10个数字字符,即0-9。在条码符号中,每个数字字符由七个模块的二进制表示,其表示形式见条码字符集中的A,B,C三个子集(见表2-2)。

    表2-2 条码字符集


    v2-d5baf56760ca7213a3be122f6f522a3d_b.jpg


    A子集中条码字符所包含的深色模块的个数为奇数,称为奇排列。B、C子集中条码字符所包含的深色模块的个数为偶数,称为偶排列。

    条码字符集示意图见图2-3。A、B子集的条码字符从左到向右,以一个浅色模块开始,以一个深色模块结束。C子集的条码字符从左到右,以一个深色模块开始,以一个浅色模块结束。


    v2-1d85ca81d20a22b155a0e8cf23f18c2f_b.jpg


    图2-3 通用商品条码字符集示意图


    2.4.2 EAN-13码符号结构

    EAN-13条码符号是由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符及右侧空白区构成,如图2-4所示。


    v2-76003dba1c678afc9a2be6683a5aa477_b.jpg

    图2-4 EAN-13条码符号结构


    v2-79897878e45daf4d8a1eea9385bb23bd_b.jpg


    图2-5 EAN-13条码符号构成示意图

    左侧空白区:位于条码符号起始符左侧,无印刷符号且与空的颜色相同的区域。其最小宽度为11个模块宽。

    起始符:位于条码符号左侧,表示信息开始的特殊符号,由3个模块组成。

    左侧数据符:介于起始符和中间分隔符之间的表示信息的一组条码字符。表示前缀码(不包含前置码)和厂商代码,共6位数字。条码字符按A子集或B子集的形式构成。左侧数据符由42个模块组成。

    中间分隔符:位于条码符号的中间位置,是平分条码符号的特殊符号,由5个模块组成。

    右侧数据符:中间分隔符右侧的一组选自C子集的条码字符,表示5位商品代码,又35个模块组成。

    校验符:最后一个条码字符,选自C子集,由7个模块组成,表示一个校验字符。

    终止符:位于条码符号右侧,表示信息结束的特殊符号,由3个模块组成。

    右侧空白区:在终止符之外的无印刷符号且与空的颜色相同的区域,其最小宽度为7个模块。

    EAN-13条码符号所包含的模块总数为113个。EAN-13条码的前置码不用条码表示,也不包括在左侧数据符中。左侧数据符是根据前置码所决定的条码字符构成方式(奇排列和偶排列)来表示前置码之后的6位数字的。见表2-3。

    表2-3 左侧数据符的奇偶排列规则


    v2-6430229675d85759fcc8df12fd70de23_b.jpg


    注:表中A为A子集,B为B子集

    纵向值0-9:代表前置码数值;横向值12-7:代表代码位置序号,以“6901234567892”为例,其条码的左侧数据符的排列形式是由前置码6决定的。从表中可以知道排列规律是ABBBAA。

    2.5 EAN-13码的校验纠错

    校验码的主要作用是防止条码标志因印刷质量低劣或包装运输中引起标志破损而造成扫描设备误读信息而设置,作为确保商品条形码识读正确性的必要手段。条形码用户在标志设计完成后,代码的正确与否直接关系到用户的自身利益。对代码的验证,校验码的计算是标志商品质量检验的重要内容之一。下面是EAN-13码的校验码验算方法,步骤如下:|(1)将条形码中数字码由右至左位排序(包括校验码);

    (2)从代码位置序号2开始,所有偶数位的数字代码求和为a;

    (3)将上步中的a乘以3为a;

    (4)从代码位置序号3开始,所有奇数位的数字代码求和为b;

    (5)将a和b相加为s;

    (6)取s的十进制个位数d,再由10减去d即为校验位数值C。

    第三章 条码图像的预处理

    3.1 图像分割理论

    3.1.1 图像分割的的定义

    图像分割是数字图像处理领域一类非常重要的图像分析技术,在对图像的研究和应用中,根据不同领域的不同需要,在某一领域往往仅对原始图像中的某些部分(目标)感兴趣。这些目标区域一般来说都是具备自身特定的一些诸如灰度、纹理等,图像分割就主要根据图像在各个区域的不同特性,而对其进行边界或区域上的分割,并从中提取出所关心的目标。分别以图像的灰度、边界、形态学特征等为基础总结出图像分割的不同方法,清楚地介绍了各种不同分割方法的原理及数学基础,最后用MATLAB对不同的方法进行仿真实验。实验结果表明,不同的方法得到了不同的分割结果,并且没有一种通用的分割方法对所有的图像都能达到理想的效果。


    3.1.2图像分割算法

    图像分割因其广泛的应用前景一直受到学术界和工程界的高度重视,围绕图像分割的理论相继被提出。目前已经发展到近千种不同类型的分割算法。按下类方式进行划分:

    1. 按分割原理分类

    从图像分割的定义不难看出,图像分割是基于相邻像素值方面的两个性质:不连续性和相似性。区域内部的像素一般具有某种相似性,而区域和边界之间具有某种不连续性。根据区域和边界的特点,图像分割可以简单的分为边缘检测和区域生长两大类,也可以将两者结合使用。从原理上分为三类:1.阈值分割2.边缘检测3区域提取。

    算法1基于这样假设,每个区域有许多灰度相近的像素构成,物体和背景之剑或其他物体之间有明显的差别,还可以通过取门限的方法将像素分成不同的区域。算法2首先检测出局部的不连续性,再将他们连成边界,这些边界把图像分成不同的区域。算法3是根据区域内部的均匀性而实现的分割,可以分为合并,分裂及分裂合并三种。

    图像分割在本质上是找出空域像素与满足一定均一性的区域之间对应关系的过程。他得到的目标有两个形式:边缘和区域。边缘和区域。边缘和区域是互相对偶的因素,如果获得了准确的边缘,那么相应的区域也就可以方便地表示。如果得到有效地区域标记,那么边缘也就可以区域标记的基础上予以确定。

    1. 按分割过程中处理的策略分类

    无论采用什么算法,最终都必须通过计算机的处理才能将图像分割出来。计算机的处理策略有并行和串行之分,结合图像分割的特点与计算机处理的策略将图像分割算法分为:1.并行分割处理2.串行边界分割3并行区域分割4串行区域分割。

    1. 按相关知识分类

    在图像处理中,弧度,纹理,彩色,时变,噪声,立体,运动到呢个多维模式向量均是处理图像可以运用的知识。概括起来可以分为以下五类五种类型: 1.面向特征的过程2.已统计机理为中心的构造3.针对图像爱你过对象的新号表示4数据融合的多信息源集成5特定领域系统的方法。

    综上,图像分割的算法非常多,但因为棋处理的对象差距很大,不能找到一个通用方法。所以具体问题具体分析,选择适当的方法进行分割目标。

    3.1.3图像分割结果

    本文采用的是分水岭算法,分水岭算法(watershed)是一种借鉴了形态学理论的分割方法,在该方法中,将一幅图看成一个拓扑形图,其中灰度值对应地形高度值。高灰度值对应着山峰,低灰度值对应着山谷。水总是朝声势底的地方流动,直到一局部低洼处才停下来,这个低洼处被称为吸水盆地。最终所有的水会分聚在不同的吸水盆地,吸水盆地之间的山脊被称为分水岭。水从分水岭流下时,它朝不同的吸水盆地流去的可能性是相等。将这种想法应用于图像分割,就是要在灰度图像中找出不同的吸水盆地和分水岭,由这些不同的吸引盆地和分水岭组成的区域即边我们要分割的目标。

    分水岭阈值选择算法可以看成是一种自适应的多阈值分割算法,在图像梯度图上进行阈值选择时,经常遇到的问题是如何恰当地选择阈值。阈值若选得太高,则许多边缘会丢失或边缘出现破碎现象;阈值若选得太低,则容易产生虚假边缘,而且边缘变厚导致定位不精确,然而分水岭阈值选择算法则可避免这个缺点。Matlab图像处理工具箱提供的watershed函数可用于实现分水岭算法。


    v2-9bc6854709c6de87f0b2c42fe2c84ca7_b.jpg

    图3.13利用分水岭方法的图像分割

    3.2 灰度处理及二值化

    Matlab能够处理的四种类型图像:

    1) 索引图像

    索引图像包括图像矩阵与颜色图数组,其中,颜色图是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵包含一个值,这个值就是颜色图中的索引。颜色图为m*3双精度值矩阵,各行分别指定红绿蓝(RGB)单色值。Colormap=[R,G, B],R,G,B为值域为[0,1]的实数值。图像矩阵与颜色图的关系依赖于图像矩阵是双精度型还是uint8(无符号8位整型)类型。如果图像矩阵为双精度类型,第一点的值对应于颜色图的第一行,第二点对应于颜色图的第二行,依次类推。如果图像矩阵是uint8,有一个偏移量,第0点值对应于颜色图的第一行,第一点对应于第二行,依次类推;uint8长用于图形文件格式,它支持256色。

    2) 灰度图像

    在MATLAB中,灰度图像是保存在一个矩阵中的,矩阵中的每一个元素代表一个像素点。矩阵可以是双精度类型,其值域为[0,1];也可以为uint8类型,其数据
    范围为[0,255]。矩阵的每个元素代表不同的亮度或灰度级。

    3) 二进制图像

    二进制图像中,每个点为两离散值中的一个,这两个值代表开或关。二进制图像保存在一个由二维的由0(关)和1(开)组成的矩阵中。从另一个角度讲,二进制图像可以看成为一个仅包括黑与白的灰度图像,也可以看作只有两种颜色的索引图像。二进制图像可以保存为双精度或uint8类型的双精度数组,显然使用uint8类型更节省空间。在图像处理工具箱中,任何一个返回二进制图像的函数都是以uint8类型逻辑数组来返回的。

    4) RGB图像

    与索引图像一样,RGB图像分别用红,绿,蓝三个亮度值为一组,代表每个像素的颜色。与索引图像不同的是,这些亮度值直接存在图像数组中,而不是存放在颜色图中。图像数组为M*N*3,M,N表示图像像素的行列数。

    对图像进行灰度处理,为实现数字的阈值变换提供前提条件,要将256色位图转变为灰度图,首先必须计算每种原色对应的灰度值,灰度与RGB颜色的对应关系

    Y=0.299R+0.587G+0.114B

    将调色板转换成灰度调色板。实现的指令:y=rgb2gray(I)。

    为了对图像进行后续处理,需要对图像进行二值化处理,二值化是图像分割技术中的区域分割技术,它是区域分割中最基本也是最常用的手段,使用阈值将背景与图像分割出来,也称阈值分割。阈值分割的主要算法有两个步骤:1.确定需要的分割阈值2将像素与分割阈值作比较并划分。


    v2-40215814f9ee1b3111634685f6531fee_b.jpg

    v2-24a6d0bf29906b891651748b9938db24_b.jpg

    3.2.1灰度图像 3.2.2二值化图像

    3.3 图像的加噪仿真

    图像增强操作主要是针对图像各种噪声而言的,为了说明以上滤波方法的用途,需要模拟数字图像的各种噪声来分析滤波效果。

    Matlab图像处理工具箱提供imnoise函数,可以用该函数添加各种噪声函数调用格式如下:

    J=imnoise(I‘type’,parameters)。下表列出imnoise函数能够产生的五种噪声及对应的参数


    v2-3bf4d3a283ab645c3953d08d5ece46a0_b.jpg




    3.4 图像的滤波

    3.4.1图像的平滑滤波

    (一)均值滤波器

    均值滤波器也称线性平滑滤波器,是一种最常用的线性低通滤波器。均值滤波器所有的系数都是整数,为了保持输出图像仍在原来的灰度值范围内,模板与像素领域的乘积和药除以9,以3*3领域为例。

    (二)中值滤波器

    中值滤波器是一种最常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,二者不同是在于中值滤波器的输出像素是由领域像素值是由领域的中间值决定的而不是平均值决定的,中值对极限像素值远不如平均值那么敏感,所以中值滤波器产生的模糊较少,更适合消除孤立噪声点。它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。加权中值滤波能够改进中值滤波的边缘信号保持效果。但对方向性很强的指纹图像进行滤波处理时 ,有必要引入方向信息,即利用指纹方向图来指导中值滤波的进行。中值滤波器的优点是:它可以克服线性滤波器(如均值滤波)给图像带来的模糊,做到在有效地清除脉冲噪声的同时,又保持良好的边缘特性,从而获得较满意的复原效果。

    3.4.2形态学滤波

    数学形态学时一种应用于图像处理和模式识别领域的新方法,它涉及微分几何,几分几何,测度论泛函分析和随机过程等许多数学理论,着重研究图像的几何结构,这种结构表示的可以是宏观也可以是微观的,用具有一定形态的元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。主要有以下函数:

    1、dilate函数

    该函数能够实现二值图像的膨胀操作,有以下形式:

    BW2=dilate(BW1,SE);BW2=dilate(BW1,SE,…,n)

    其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2=dilate(BW1,SE,…,n)表示执行膨胀操作n次。

    2、erode 函数

    该函数能够实现二值图像的腐蚀操作,有以下形式:

    BW2= erode(BW1,SE);BW2= erode(BW1,SE,…,n)

    其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀操作n次。

    3、bwmorph函数

    该函数的功能是能实现二值图像形态学运算。它的格式如下:

    ① BW2=bwmorph(BW1,operation);② BW2=bwmorph(BW1,operation,n)

    其中:对于格式①,bwmorph函数可对二值图像BW1采用指定的形态学运算;对于格式②,bwmorph函数可对二值图像BW1采用指定的形态学运算n次。operation为下列字符串之一:

    ‘clean’:除去孤立的像素(被0包围的1)

    ‘close’:计算二值闭合

    ‘dilate’:用结构元素计算图像膨胀

    ‘erode’:用结构元素计算图像侵蚀

    4、imclose函数

    该函数功能是对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀操作后进行腐蚀操作。调用格式为:

    IM2=imclose(IM,SE);IM2=imclose(IM,NHOOD)

    5、imopen函数

    该函数功能是对灰度图像执行形态学开运算,即使用同样的结构元素先对图像进行腐蚀操作后进行膨胀操作。调用格式为:IM2=imopen(IM,SE);IM2=imopen(IM,NHOOD);

    根据上述条码图像预处理的理论知识编译相关的Matlab程序,得到如图3-3.2所示图像预处理结果。




    v2-8f6c25d92dadffa6a9d2cf54919798cd_b.jpg


    3-3.2 图像处理的结果

    第四章 条码的译码方法

    4.1 译码方案的选择

    方案一:宽度测量法

    在图像方式的译码过程中,宽度的测量不再采用传统的脉冲测量法,而是通过记录每个条或空的宽度中所含象素的个数来确定实际的条/空宽度,从而确定整个条码符号所代表的信息。

    方案二:平均值法

    对条码符号图像中从起始符到终止符整个宽度进行测量,然后除以95(标准宽度),求出单位模块所含的像素列宽,再分别测量各个条空的实际宽度(此宽度以单位宽度为单位计算)

    方案三:相似边距离的测量方法

    这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量值来判别。

    前两种方案对条码图像的要求非常高,因为它们都是测量各元素符号的实际宽度,然后根据查表法得到所代表的码值。如果实际测量值与标准值存在一点偏差,就不能实现正确译码。而第三种方案正是有效的解决了这一问题,因此我们采用相似边距离测量的方法来实现译码功能.下面就简要说明一下这一方法。

    由原理知,要想辨识一个条码,必须先测量条码条、空宽度C1、C2、C3、C4以及一个字符的宽度T。条码图像经过预处理后得到的是二值图像,该点的颜色信息在阈值变换时已经定义,用255和0表示白和黑色。我们从条码的左边开始取点,若遇到点的灰度值由255变到0即由点的颜色由白色变为黑色,则表示检测到条,记录下该点的坐标值,如果点的颜色由黑色变为白色,则表示检测到空,记录下该点的坐标值。这样经过扫描后得到各个颜色变化点的坐标,然后将相邻两点的横坐标相减得到各个条、空的宽度.由前面所述EAN-13条码的组成知:一个由占3个条空的起始符、3个条空的终止符、24个条空的左侧数据符、5个条空的中间分隔符、20个条空的右侧数据符、4个条空的校验符组成。所以,整个条码字符占的条空总数为59,若条码字符没有发生几何畸变,一行扫描应记录的坐标数为60个;而对于有几何畸变的条码图像,例如条码污染、条码断裂、条码瑕疵等,该扫描行的坐标数将肯定大于60或小于60,这时将不记录该扫描行,对此行不处理。这样利用图像统计方法,逐行扫描图像,获取条码图像信息,比起只由一行获取信息的方式可靠性更高,这样即使个别噪声点存在并不影响图像信息的获取。

    4.2 相似边距法介绍

    条码字符的判别—相似边距法:

    理论上条形码字符的逻辑值应该由条形码的实际宽度来判断,而相似边距离方法的设计思想通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由元素宽度的实际值来判别。此种方法的优点是:即使条码质量存在缺欠,使得实际测量值和条码应该具有的理论值有较大的偏差,仍然可以根据相似边的距离能够正确解释。什么是相似边距离?图3-4给出了相似边之间的距离,则图中t1, t2, t3, t4, t5, t6, t7(归一化值)为条形码相似边距离。本文采用归一化理论,用一种相似边距离归一化的方法对字符进行判别。该方法即使条码印刷质量有偏差,仍能正确对条码进行识读.


    v2-12bd7e0a70c6a490bbbdd4273c1ab94c_b.jpg


    图4-1 相似边之间的距离 图4-2条码字符宽度示图


    首先见图4-2各种宽度的定义:C1, C2, C3, C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度,T1 , T2为相似边之间的距离,则用下列值ATi(i=1,2)来定义TI与T2的归一化值。以下方法用于Ti序列值的求取:

    若Ti/T≦2.5/7,那么ATi=2

    若2.5/7≦Ti/T≦3.5/7,那么ATi=3

    若3.5/7≦Ti/T≦4.5/7,那么ATi=4

    若4.5/7≦Ti/T,那么ATi=5

    表4-1列出了正向译码时,EAN-13条码字符值与归一化值(Tl, T2)的对应关系。


    v2-8c72175683ca203318b49aed8f7daee1_b.jpg


    表4-1中“E”表示偶字符,“O”表示奇字符


    EAN-13码字符编码与归一化值(T1. T2)的对应关系见表4-2。

    表4-2 EAN-13字符编码与归一化值

    v2-adce40a1ec2f512e14428520c61906a9_b.jpg



    表4-2中可以看到条形码编码和归一化值在多数情况下呈现一一对应的关系,只要确定了归一化值就能确定字符值,但是有四种情况例外,在表3-3中知,左侧奇字符和右侧偶字符1,7归一化值均为44,左侧奇字符和右侧偶字符2,8归一化值均为33,左侧偶字符1,7归一化值均为34,左侧偶字符2,8归一化值均为43。这两种情况可以在判别字符时根据C1,C2,C3,C4进一步判别,根据它们条空宽度特点进行判别。有1728字符标准条空宽度值的特点知:对于左侧奇字符、右侧偶字符1和7可通过C3与C4作比较,C3>C4者为字符1,反之为7;对于左侧奇字符、右侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符8,反之为2;对于左侧偶字符1和7可通过C1与C2作比较,C1>C2者为字符7,反之为1;对于左侧偶字符2和8可通过C2与C3作比较,C2>C3者为字符2,反之为8;


    v2-2259ef166550a51e552dc9f6c661a06f_b.jpg

    由上述条码字符识别理论可总结出相似边距离测量法的一般步骤。由条码宽度的计算我们得到了各个条、空的宽度(像素),并通过计算n=T/7,T=C1+C2+C3+C4得到单位模块的宽度(像素)。各个条空的宽度除以单位模块的宽度就是归一化的条空宽度。而为了方便译码,我们除去起始符3个条空,中间分隔符5个条空,终止符3个条空,对剩下的48个条空每4个条空为一组进行译码。计算相似边之间的距离t1、t2从而得到归一化(T1,T2)。最后查表可得条码字符。为检验译码的正确性利用校验位对码字进行校验。流程图如图4-3。

    图4-3 判别字符流程图

    4.3 条码字符的判别

    如图4-4所示是EAN-13条码的一个字符。条、空宽度的定义如下:图中C1、C2、C3、C4表示每个字符中四个相邻条、空的宽度,T表示一个字符的宽度。


    v2-7263868ef68d83a33580bff33af6b321_b.jpg


    图4-4 EAN-13条码宽度的定义

    设一个字符中单位模块的宽度为n,则单位模块的宽度:

    n=T/7

    T=C1+C2+C3+C4

    由于条码条、空宽度C1、C2、C3、C4已知,设条码条、空分别占单位模块的个数为mi,则:

    mi=ci/n(其中i取1、2、3、4)

    因此,由mi可知道条码的编码。例如:

    (1)若m1=2、m2=2、m3=2、m4=1;

    条码的排列为条-空-条-空,

    则可知条码编码为1100110,是右侧偶性字符1;

    (2)若m1=1、m2=2、m3=1、m4=3;

    条码的排列为空-条-空-条,

    则可知条码编码为0110111,是右侧奇性字符8。



    第五章 条码的译码的基本原理

    5.1 EAN-13的译码原理分析

    由上一章可知,要辨别一个条码,必须知道条码的码,空间隔C1,C2,C3,C4和一个字符的宽度T.图像经过分割,灰度,二值化处理后得到就是关于条码的二值图像,把图像看作一个二维矩阵,矩阵中的点就是0和255表示白与黑。我们进行列扫描,对于每一列如果有大于大于二分之一行是0的话,判定这一列是0。最后我们得到的是一个一维矩阵,从而由这个一维矩阵,来做字符识别。我们检测这个一维矩阵,若遇到矩阵由0变到255,或是由255变到0,的话,记录下坐标值。然后由坐标值相减得到条空的宽度。由前面的EAN-13条码组成可知:一个条码由3个条空起始符,3个条空终止符,24个条空左侧数据区,5个条空的中间分隔符,20个右侧数据符,4个条空的校验码,所以扫描的坐标应该为60个,整个条空总数为59。字符判别流程图:扫描识别的流程图如下:

    v2-5db875d0d84fa4635aef4f29370697e4_b.jpg

    图5-1 条码扫描的流程图

    5.2 译码的结果分析

    根据上述译码理论,采用相似边距离测量方法对预处理后的条码图像(二值图像)进行译码,得到如下所示译码结果。


    v2-3b40d3be57c36cf12c30abd4fde02001_b.jpg


    分析:通过多次对不同EAN-13条码的识读,证明该条码检测系统速度快、效率高、而误码率却很低,即使在图像预处理上达不到理想的效果,条码仍能正确识读。这是因为我们选择了相似边距离测量的方法。可见,影响条码识别效果的不仅仅是条码图像预处理效果,译码方法更是不可忽视的重要原因。相似边距离测量方法有着其它译码方法无可比拟的优势,它不是根据条码条空宽度的实际值来判别,而是通过所谓的相似边距离来判别。因此,即使条码质量存在欠缺,仍然能够根据相似边距离正确解释条码,有着很强的对实际情况的适应性。


    第六章 结论

    在对条码图像作相应的图像预处理之后,对得到的二值条码图像利用上述条码识别算法在Matlab软件环境下编写了相应的软件程序。通过多次实验,识别效果很好,误码率低,大大提高了条码的识别率。相信对其它一维条码图像识别具有一定的理论及实践参考价值。

    本次设计在译码方法上进行了比较选择,确定了相似边距离的测量方法的优越性。这种方法的设计思路是通过对符号中相邻元素的相似边之间距离的测量来判别字符的逻辑值,而不是由各元素宽度的实际测量来判别。对条码图像的要求相对其它方法而言较低,具有较高的识别率,因而能够很好的满足实际需要。同时用软件实现条码的识别比硬件具有更好的抗噪声性能,且速度快,效率高。

    尽管如此,设计中也遇到了很多的问题有待进一步的解决和探索研究。图像处理是条码识别的重要基础。本设计只是对质量较好的条码图像进行一般性处理,但实际中的图像并都不是这么理想,例如条码污染、条码断裂、条码瑕疵等。这些需要进行特殊的图像处理过程才能达到译码的目的。如果条码被污染了我们要进行修复,条码发生几何畸变我们要进行图像矫正等等。只有考虑到更多的方面才能提高系统的性能和适应性,对一定质量范围内的条码图像都能进行有效的处理。其次,对软件程序的精简也是我所追求的,希望通过最精练的语句实现所需要的功能。程序中很多的语句还有进一步改进的空间,这样既能精简语句,使语句简明易懂,也能提高程序整体的执行速度,提高条码识别效率。

    条码识别系统的测试和实验结果分析:

    我所做的设计包括图像处理,条码识别,图像处理是非常重要的一个环节,在这之中我运用到很多的图像分割的方法,主要用到阈值分割,高低帽图像增强分割,以及图像的腐蚀,膨胀等分割方法,每种分割方法都有其特点,对不同程度污染的条码的分割的效果不一样,其次过于条码识别的方法,利用的矩阵的列扫描扫出正确的条空,这种程序通俗易懂实现起来也比较简单,再条码译码部分主要是利用相似边距法来读取条空的编码,并译码。利用这个思路,用matlab编程能够实现对轻度污染的条码进行识别。下面图片为识别的处理的结果。

    v2-c5ab7aa9ecc8438ad0e075cdc307312d_b.jpg



    v2-6f461273b61a7019ed0276c5fe6e5ebc_b.jpg

    图6-1 图像分割

    图6-2 条码的译码结果

    展开全文
  • 霍尼韦尔ms7120驱动是由honeywell官方为该型号的扫描枪打造的驱动程序,用户安装驱动程序以后,就可以让扫描枪进行...官方介绍霍尼韦尔Orbit7120全向扫描器一直是最畅销的固定式全向激光扫描器,对于柜,欢迎下载体验
  • 安卓电脑条码扫描器是一款是一款安卓手机条码扫描器应用软件,用户只需将安卓手机能和电脑连接,就像扫描枪一样的效果,还支持当下流行的二维码识别,软件还支持摄像头进行一维码,二维码识别,软件界面美观简洁、...
  • Python生成 一维条码

    2021-05-13 09:39:25
    条码库python-barcode 首先需要安装barcode包,在安装barcode包的过程中可能会碰到类似问题 ...一维条码 python-barcode支持的条形码 EAN-8 EAN-13 EAN-14 UPC-A JAN ISBN-10 ISBN-13 ISSN Code 39 C
  • BarcodeScanner Android手机客户端关于二维码扫描的源码,使用了zxing 3.1.1代码并对其进行了精简,支持低版本的sdk,实现了二维码和一维码扫描、从图片解析一维码和二维码,闪光灯、调焦。。。 参考文档
  • 本无线扫描器以单片机mPSD3254BV 为核心,通过扫描子系统可以扫描一维或二维条型,键盘和显示系统方便用户进行人机交流,无线传送模块可以将现场采集到的数据发送到其它设备,同时本扫描器也能存储上万条数据...
  • C# 生成一维码(条形码)和二维码

    千次阅读 2022-03-06 19:37:06
    C#生成条形码和二维码,使用Zxing
  • 条码检测系统——基于MATLAB的一维条码识别摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书...
  • 数独采用的是微软自带的Microsoft sudoku软件随便截取的图像,如下图所示: 经过程序求解后,得到的结果如下图所示: def getFollow(varset, terminalset, first_dic, production_list):  follow_dic = {}  ...
  • 1、一维条码

    千次阅读 2017-12-07 20:05:04
     1、一维条码 一维条码:由一组规则排列的条、空以及对应的字符组成的标记,“条”指对光线...一维条码制: EAN、39、交叉25、UPC、128、93,ISBN,及Codabar(库德巴)等。    EAN

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,969
精华内容 1,587
关键字:

一维条码扫描软件

友情链接: COMDebugSetup.zip