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

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

一、算法分析

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

文章先对条码技术诞生及发展、条码技术的优点进行简要概述,使读者对条码有个清晰的概念。重点介绍一维条码中的EAN-13码的发展、结构、特征、译码原理及其Matlab实现。对Matlab图像处理方面也有一定的研究。

二、条码译码方法

方案一:宽度测量法

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

方案二:平均值法

对条码符号图像中从起始符到终止符整个宽度进行测量,然后除以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所示:

图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(归一化值)为条形码相似边距离。本文采用归一化理论,用一种相似边距离归一化的方法对字符进行判别。该方法即使条码印刷质量有偏差,仍能正确对条码进行识读.

图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条码字符与归一化值

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

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

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

表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。

图3-6 字符判别流程图

3.3.3 译码结果与分析

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

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

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

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

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

表一 EAN-13字符编码与归一化值(反向译码)
图一 1728判别子程序流程图
图二 条码图象预处理
图三 译码结果

基于MATLAB的条形码二维码检测系统相关推荐

  1. 基于MATLAB的条形码二维码识别系统

    一.课题介绍 本设计研究的是基于数字图像处理的EAN-13条形码识别算法,通过工具平台MATLAB实现.其中图像处理部分是条码识别重要的前期工作,利用MATLAB强大的图象处理工具箱实现图像的读入.加 ...

  2. 基于MATLAB的条码二维码识别系统

    基于MATLAB的条码二维码识别系统 课题介绍 本设计研究的是基于数字图像处理的EAN-13条形码识别算法,通过工具平台MATLAB实现.其中图像处理部分是条码识别重要的前期工作,利用MATLAB强大 ...

  3. 条码条形码二维码检错系统供应

     条码条形码二维码检错系统可防止因人为误操作.设备损坏等原因导致的错误,减少产品的退货返工,避免客户的投诉,提高工作效率.减少人力成本.适用于各种需要对条码进行检查的场合,如标签打印检查.装箱前对箱型 ...

  4. 基于springboot的食品二维码溯源系统

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于springboot的食品二维码溯源系统. 计算机毕业生设计,课程设计需要帮助的可以找我 2 设计概要 21世纪是信息化时代,随着信息技 ...

  5. 基于深度学习的二维码检测和识别(含完整代码和数据)

    最近尝试着将深度学习技术引入到二维码检测和识别中,期望能够提升传统二维码的识读性能,能够适用更多复杂背景,并且最终应用到工业生产中,方便生产线上对产品的ID管理. 项目最终实现效果如下所示: 相对来说 ...

  6. python公司企业编码条形码二维码生成系统

    wx供重浩:创享日记 对话框发送:python编码 免费获取完整源码源文件+配置说明教程等 在PyCharm中运行<企业编码生成系统>即可进入如图1所示的系统主界面.在该界面中可以选择要使 ...

  7. 基于主要成分分析的人脸二维码识别系统-含Matlab代码

    目录 一.引言 二.人脸图像信息处理 2.1 主成分分析PCA 2.2 PCA人脸压缩与重构算法分析 三.二维码转换以及识别 3.1 QR码 3.2 将人脸图像生成二维码 3.3 二维码的识别与图像还 ...

  8. python opencv 条形码及二维码检测识别

    目录 条形码检测识别 二维码检测识别 基于python opencv pyzbar 实现. 条形码检测识别 原图: 最后截取图: 直接上代码: import cv2 import numpy as n ...

  9. 【第 07 章 基于主成分分析的人脸二维码识别MATLAB深度学习实战案例】

    基于主成分分析的人脸二维码识别MATLAB深度学习实战案例 人脸库 全套文件资料目录下载链接–>传送门 本文全文源码下载[链接–>传送门] 如下分析: 主文件 function varar ...

  10. GM65条形码二维码扫描识别模块与STM32学习

    目录 模块介绍: 简介: 原理介绍: 工作流程: 技术参数: 修改配置: 代码介绍: 串口函数: 主函数: 模块介绍: 简介: GM65 条形码二维码扫描识别模块是一种基于激光扫描头的识别设备 原理介 ...

最新文章

  1. 聚合复合_【专家视觉】聚合物接枝多壁碳纳米管及其聚氨酯复合材料
  2. 深圳大学梁臻博士提出EEGFuseNet高维脑电图混合无监督深度特征表征与融合模型及其在情绪识别中的应用...
  3. 口语学习Day8:今天聊聊微信有关的英语总结!
  4. JVM有哪些类加载器?
  5. livecharts中仪表盘_LiveCharts文档-3开始-4可用的图表
  6. 本文主要总结关于mysql的优化(将会持续更新)
  7. .NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)
  8. git-文本内容的回退-缓冲区退到工作区-工作区改动后改为改动前
  9. dll 共享_系统DLL查看和检测工具ListDLLs
  10. 对话框式activity
  11. SpringBoot与缓存
  12. atitit 项目管理 持续集成 构建管理CI jenkins.docx
  13. 有关嵌入式、单片机、51单片机、STM32、的一些概念详解
  14. 链家终于掏空了链家!
  15. 如何创建控制台应用程序
  16. 机器学习特征工程--标准化和归一化
  17. GANerated Hands for Real-Time 3D Hand Tracking from Monocular RGB
  18. 小技巧——如何为foxmail中的文字编辑超链接
  19. 基于用户画像的PythonDjango框架的电影推荐系统设计与实现
  20. 蝉知 7.7 正式发布,移动端全面改版!

热门文章

  1. 语音信号处理(赵力)作业答案第8章——语音合成
  2. ImageMagick图片转PDF
  3. 微信公众号运营推广基础入门知识
  4. C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
  5. 三菱plc232数据线驱动下载_三菱FX系列PLC没有编程电缆,通过DIY232串口下载程序...
  6. Linux Ubuntu 安装Tomcat 7,亲测有效
  7. tanh函数matlab_MATLAB模拟双曲正切函数tanh和双曲余切函数coth
  8. xshell中文问号乱码
  9. Android周日历可滑动可选择日期
  10. 【matlab】多维向量的转置