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

图像处理 专栏收录该内容
191 篇文章 27 订阅

条码检测系统——基于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


图三 译码结果

  • 0
    点赞
  • 1
    评论
  • 7
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

M管家

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值