1、东华大学研究生课程论文封面 教师填写: 得分 任课教师签名 年 月 日 学生填写: 姓名 学号 专业 导师 课程名称 任课教师 课程学分 上课时间 20 至 20 学年 第 学期 星期 递交时间 年 月 日 本人郑重声明:我恪守学术道德,崇尚严谨学风。所呈交的课程论文,是 本人独立进行研究工作所取得的成果。除文中已明确注明和引用的内容外,本 论文不包含任何其他个人或集体已经发表或撰写过的作品及成果的内容。论文 为本人亲自撰写,我对所写的内容负责,并完全意识到本声明的法律结果由本 人承担。 论文作者签名: 1 摘 要 在自动识别技术中,二维条码技术以其低成本、快速识读、大信息量、高 安全性等优点
2、,在社会生活中应用越来越广泛。物联网技术的蓬勃发展,也对 二维条技术提供了广阔的应用空间。相应的二维条码编码、解码技术研究已经 很多,应用上也基本成熟。目前,随着移动通信技术的飞速发展,手机的拥有 量和使用量越来越大,功能也越来越强。二维条码技术和移动通信技术的结合, 促成了手机二维码的诞生。因此,研究在手机等带有摄像头的智能嵌入式设备 中的解码技术变得非常必要。与 PC 系统下的解码方式相比,手机型号多种多 样,性能差别很大,摄像头拍摄时受环境干扰也多。在复杂条件下如何有效进 行二维条码解码的研究就显得非常必要。本文以 QR 二维条码为例,通过图像 处理技术对带有摄像头的智能设备采集的二维条
3、码图像进行分析处理,解码出 二维条码的编码信息,为手机二维码的广泛应用打下一定的技术基础。 关键词:QR,二维码,编解码,物联网 2 目录 目录 2 1 绪 论 1 1.1 目的和要求 .1 1.2 设计内容 .1 1.3 总体设计方案 .1 2 二维码简介 2 2.1 定义 .2 2.2 原理 .2 2.3 应用 .3 3 二维码解码技术 4 3.1 算法总体流程 .4 3.2 图像的灰度化 .4 3.3 图像的降噪处理 .5 3.4 图像的二值化处理 .6 3.5 图形的定位 .7 3.6 常规扫描方法 .7 3.7 测试和调试 .11 结论 13 致谢 14 参考文献 15 1 1 绪
4、论 1.1 目的和要求 本课题主要研究二维条码的识别程序及译码方法,使用 C 语言来开发二维 码的识别程序。查找并阅读相关资料,了解基本的内容,利用需求分析文档,对 整个系统有个初步的架构。搜寻实验用的文件文档集和研究过程中用到的各种 工具软件。根据已有的资料并借助面向对象的程序设计思想对系统各模块进行 分析、建模、设计。使用 C 语言来开发二维码识别程序。 1.2 设计内容 本文主要来完成二维码识别和译码程序,运用图像校正、二值化、边缘检 测等各种图像处理方法实现条码的预处理,并进行二维码码的解码,结合图像 处理技术,完成了基于图像处理的二维码快速识别的解码系统。 1.3 总体设计方案 本设
5、计的主要任务是在研究二维条码的码制标准的基础上实现对二维码的 告诉采集与识别,详细分析二维码的基本特点、符号结构;在条码图像识别方面, 研究了对采集的条码图像进行预处理的方法,即:对图像进行整形。运用图像校 正、二值化、去噪、边缘检测、图像旋转、数据纠错等多种图像处理方法实现 条码图像的预处理、条码定位、条码分割和数据提取。对预处理后的条码图像 进行译码。 2 2 二维码简介 2.1 定义 二维条码/二维码(英文名: QR Code) 是用某种特定的几何图形按一定规 律在平面(二维方向)分布的黑白相间的图形记录数据符号信息的。二维码是 DOI(Digital Object Unique Ide
6、ntifier,数字对象唯一识别符)的一种,全 球最大的二维码资源中心是“渡云” ,为全球用户统一提供了“唯一数据样本” 的物品、人员、组织二维码识别信息 2.2 原理 二维码的原理可以从矩阵式二维码的原理和行列式二维码的原理来讲述。 矩阵式二维码(又称棋盘式二维码)是在一个矩形空间通过黑、白像素在 矩阵中的不同分布进行编码。下图是国内常用的矩阵式二维码实例,手机正常 扫描后会跳出高可靠性的信息:在矩阵元素位置上,出现方点、圆点或其他形 状点表示二进制“1” ,不出现点表示二进制的“0” ,点的排列组合确定了矩阵 式二维码所代表的意义。矩阵式二维码是建立在计算机图像处理技术、组合编 码原理等基
7、础上的一种新型图形符号自动识读处理码制。具有代表性的矩阵式 二维码有:Code One、Maxi Code、QR Code、 Data Matrix 等。 图 21*21 的矩阵中,黑白的区域在 QR 码规范中被指定为固定的位置,称为 寻像图形(finder pattern)和定位图形(timingpattern)。寻像图形和定位图 形用来帮助解码程序确定图形中具体符号的坐标。黄色的区域用来保存被编码 的数据内容以及纠错信息码。蓝色的区域,用来标识纠错的级别(也就是 Level L 到 Level H)和所谓的“Mask pattern“,这个 区域被称为“格式化信息” (format inf
8、ormation) 。 行排式二维码(又称:堆积式二维码或层排式二维码),其编码原理是建立 在一维码基础之上,按需要堆积成二行或多行。它在编码设计、校验原理、识 读方式等方面继承了一维码的一些特点,识读设备与条码印刷与一维码技术兼 容。但由于行数的增加,需要对行进行判定、其译码算法与软件也不完全相同 3 于一维码。有代表性的行排式二维码有 CODE49、CODE 16K、PDF417 等。其中的 CODE49,是 1987 年由 David Allair 博士研制,Intermec 公司推出的第一个 二维码。 2.3 应用 网络资源下载(网址链接,APP 下载) 二维码名片(拍码即可快速导入联
9、系人) 证照应用(身份证、识别证、会员证等证照之资料登记及自动输入) 支付方式(拍码支付,方便快捷) 车辆管理应用(驾驶证,车辆的年审文件等基本信息转化保存在二维码) 景点门票应用(景点门票,采用二维码进行售票、检票,提高通行效率) 表单应用(公文表单、商业表单、进出口报单、舱单等资料之传送交换) 婚礼应用(传统的婚礼要大派请柬,2013 年婚礼只用发一张二维码即可) 会议服务(二维码彩信短信邀请函,二维码签到,彩信会刊、会后感谢) 追踪应用(生产线零件、客户服务、邮购运送、维修记录等自动追踪) 创意应用(二维码指示牌,二维码宣传广告,二维码食品身份证) 保密应用(商业情报、政治情报、军事情报
10、等机密资料之加密及传递) 4 3 二维码解码技术 3.1 算法总体流程 首先,对采集的彩色图像进行灰度化,以提高后继的运行速度。 其次,去除噪声。采用十字形中值滤波去除噪音对二码图像的干扰主要是 盐粒噪声。 再次,利用灰度直方图工具,使用迭代法选取适当的阈值,对二维码进行 二值化处理,使其变为白底黑色条码。 最后,确定二维码的位置探测图形,对条码进行定位,旋转至水平后,获 得条码数据,以便下一步进行解码。 灰度化 去噪 二值化 寻找探测图 形 确定旋转角 度 定位旋转获得数据 图 3.1 算法总体流程 3.2 图像的灰度化 灰度化的常用方法有两种: 1.Gray(i,j) = 0.299 *
11、R(i,j) + 0.587 * G(i,j) + 0.114 * B(i,j) 2.Gray(i,j) = 30 * R(i,j) + 59 * G(i,j) + 11 * B(i,j)/100 本设计进行灰度化的实现函数如下: internal virtual void imageToGrayScale(int image) 5 for (int y = 0; y 16 int g = imagexy 8 int b = imagexy int m = (r * 30 + g * 59 + b * 11) / 100; imagexy = m; 3.3 图像的降噪处理 降噪的方法很多,选用
12、的是中值滤波法,因为中值滤波是一种非线性平滑 滤波器。中值滤波在降低噪声的同时,又可以保持图像的细节,使用中值滤波 时能较好保护图像的边缘。 中值滤波的滤波窗口的形状和尺寸对滤波效果有一定的影响。常用的中值 滤波窗口形状一般为正方形、十字形等。就一般经验而言,对于有缓慢变化的 较长轮廓线物体的图像,适合使用正方形窗口;对于包含尖角物体的图像,适 合使用十字形窗口。窗口大小一般小于图像中最小有效物尺寸为宜。 中值滤波的函数实现如下: internal virtual bool applyMedianFilter(bool image, int threshold) bool filteredMa
13、trix = new boolimage.Length; for (int i = 0; i image.Length; i+) filteredMatrixi = new boolimage0.Length; 6 /filtering noise in image with median filter int numPointDark; for (int y = 1; y image0.Length - 1; y+) for (int x = 1; x image.Length - 1; x+) /if (imagexy = true) numPointDark = 0; for (int
14、fy = - 1; fy 2; fy+) for (int fx = - 1; fx threshold) filteredMatrixxy = POINT_DARK; return filteredMatrix; 3.4 图像的二值化处理 二值化就是将图像转换成只有黑或白两种颜色,二值的方法也有很多,一 种较为常用的是阈值法,取一个合适的阈值,使图像中每一个像素点应该属于 目标还是背景区域,从而产生相应的二值图像。 7 设原始图像为 f(x,y),按照一定的准则在该图像中找到特征阈值 T,将图 像分割为两部分,分割后的图像为: Tyxfbyxg),( ),(10 (2-1) 其中,b 0为黑
15、,b 1为白。 在 QR 码的图像二值化中,一般取 b0=1,b 1=0,也就是:Tyxfyxg),( ),( (2-2) 根据确定阈值的取样范围来分,二值化的方法可以分为全局阈值法与局部 阈值法。全局阈值法对整幅图像的所有像素点进行取样,通过相关算法计算出 一个阈值,进行二值化。而局部阈值法(又称为自适应阈值法)是将整幅图像 划分成若干区域(通常是均匀划分) ,对每块区域中的像素点进行阈值计算,每 块区域得出一个阈值,然后分块进行二值化9,10,11。使用局部阈值法时,每 一块区域的二值化过程是独立进行的。 本文使用的是中间值法,先对区域中所有像素点进行遍历,找出最大的灰 度值 Grayma
16、x 和最小的灰度值 Graymin,然后求出最大灰度值与最小灰度值的 中间值 Graymid,将该灰度值作为区域的阈值,即 T = Graymid = (Graymax + Graymin) / 2。 3.5 图形的定位 图 3.2 定位图形 3.6 常规扫描方法 GB/T 18284-2000 中推荐的扫描方法如下: 1. 在 X 方向进行依次扫描。 8 a) 固定 Y 坐标的取值,在 X 方向上画一条水平直线(称为扫描线)进行扫 描。当扫描线被黑白相间地截为 1:1:3:1:1 时,可以认为该直线穿过了 位置探测图形。在实际判定时,比例系数允许 0.5 的误差,即比例系数 为 1 的,允许
17、范围为 0.51.5,比例系数为 3 的,允许范围为 2.53.5。 b) 当寻找到有直线穿过位置探测图形时,记录下位置探测图形的外边缘相 遇的第一点和最后一点 A 和 B。由 A、B 两点为端点的线段称为扫描线 段。将扫描线段保存下来。 图 3.3 扫描线段 2. 在 Y 方向,使用相同的方法,进行垂直扫描,同样保存扫描得到的扫 描线段。 扫描步骤获得的扫描线段是没有经过分类的,也就是对于特定的一条扫 描线段,无法获知其具体对应于三个位置探测图形中的哪一个。在计算 位置探测图形中心坐标之前,要将所有的扫描线段按照位置进行归类。 一般采用距离邻域法进行扫描线段的分类。 距离邻域法的思想是:给定
18、一个距离阈值 dT。 ,当两条扫描线段的中点 的距离小于 dT。时,认为两条扫描线段在同一个邻域内,将它们分为一 类,反之则归为不同的类别。 距离邻域法的具体步骤如下: (1) 给定一个距离阈值 dT。 ,d T。要求满足以下条件:位于同一个位置探测图 形之中的任意两点之间的距离小于 dT。 ,位于不同位置探测图形中的任意 两点之间的距离大于 dT (2) 新建一个类别,将第 1 条扫描线段归入其中。 (3) 对于第 i 条扫描线段 li(2in) ,做以下操作: a) 求出 li的中点 Ci。 9 b) 分别计算 Ci与在已存在的每一个类别中的第一条扫描线段的中 点的距离 d,若 dd T,
19、则直接将 li加入相应类别中。 c) 若无法找到 li可以加入的类别,则新建一个类别,将 li加入其 中。 (4)将所有类别按照包含扫描线段的数目进行从大到小排序,保存前 3 个类别 (即包含扫描线段数目最多的 3 个类别) ,其余的视为误判得到的扫描线段(在 位置探测图形以外的位置得到的符合扫描特征的扫描线段) ,直接舍去。 距离邻域法结束后得到的分好 3 个类别的扫描线段就分别对应了 3 个位置 探测图形。距离邻域法的关键就是距离阈值的选取。一般对于不同大小的 QR 码 图像,要使用不同的距离阈值。 其中 GB/T 18284-2000 中推荐的位置探测图形中心坐标的计算方法如下: (1)
20、 在 X 方向的扫描线段中找出最外侧的两条,分别取中点,记为 A、B。由 A、B 两点连一条直线。 图 3.4 对 X 方向扫描线段的处理 (2) 在 Y 方向的扫描线段中找出最外侧的两条,分别取中点,记为 C、D。由 C、D 两点连一条直线。 图 3.5 对 Y 方向扫描线段的处理 (3) 计算直线 AB 与直线 CD 的交点 O,即为位置探测图形中心点。 10 图 3.6 位置探测图形中心点 将 QR 码符号的左上、右上位置探测图形的中心分别记为 A、B。连接 A、B。直线 AB 与水平线的夹角 即为 QR 码符号的旋转角度。 图 3.7 旋转角度 对于该旋转角度 ,求出其正弦值 sin
21、与余弦值 cos 即可。具体计算公式 如下: ABysin (2-3)xco (2-4) 其中, 22BABAyxB (2-5) 在 GB/T 18284-2000 中定义的位置探测图形边长的计算是基于无旋转图像的, 在无旋转图像中,水平扫描线段的长度即为位置探测图形的边长。 水平扫描线段 AB 的长度即为位置探测图形的边长 X。 图 3.8 位置探测图形的边长 11 对于经过旋转的 QR 码图像,先通过插值算法生成旋正的 QR 码图像,然后 按照如上所述的方法进行位置探测图形边长的计算 3.7 测试和调试 为了便于调试,本文设计了一个 QR 编码的方法,用于生成 QR 图像,再把生成的图像
22、用识别器进行识别。 界面如下: 图 3.9 调试界面 其中实现 QR 编译的类为 QRCodeEncoder ,主要的属性有: QRCodeEncodeMode、QRCodeScale、QRCodeVersion、QRCodeErrorCorrect,编译方法声明 为 Bitmap Encode( String , Encoding ),设置好 QRCodeEncoder 的属性后,再调用 QRCodeEncoder. Encode( 需编码的字符串 ,字符串的字符集 )就可以得到字符串对应的 QR 码,结果是一个 Bitmap 类,可以保存为图片。 图 3.10 二维码图片 QR 码的识别处
23、理,封装在 QRCodeDecoder 类中,该类有一个解码方法声明为 String 12 decode(QRCodeImage) ,其中 QRCodeImage 为需要识别的图片,返值为识别后的字符串, 要使用 QRCodeImage,可以在生成 QRCodeImage 对象的时候,传一个 Bitmap 对象。 译码界面如下: 图 3.11 译码界面 13 结论 本文已详细分析了图像的识别技术,在此基础上,根据新的应用需求也可 以进行其它条码的识别。研究二维码图像的识别技术。运用图像校正、二值化、 去噪、边缘检测、Hough 变换、图像旋转等多种图像处理方法实现条码图像的 预处理、条码定位、
24、条码分割和数据提取。但由于各方面的原因,仍然存在着 许多问题有待于进一步研究,比如识别算法的单一性问题以及纠错问题等,在 稳定性和高效性也有进一步改进的可能。希望在后续工作中进一步改进和完善 系统的功能。 二维码由于具有高密度、大容量、纠错能力强、可表示文字图像等信息、 可加密等优点,己广泛应用于传统的工业自动化生产线、医疗服务、收费系统、 商品管理系统及信息查询系统等各个领域。而且随着当今信息技术的发展和网 络的普及,二维条码将有更大的商机和更广阔的发展前景。 14 致谢 在课程设计的这段时间里,每个阶段的工作与学习都充满着酸甜苦辣,不 过一切总将过去。在任课老师的悉心指导以及同学的帮助与鼓
25、励下,我顺利地 完成课程设计,在此,我对他们表示衷心地感谢!首先,我要感谢我的任课老 师范红。范老师平易近人,和蔼可亲,很少批评我们,对我们不会的问题,她 都不厌其烦的给我们讲解,并教会我很多新的知识。在本次课程设计的过程中, 范老师给予了许多的关怀,帮助和支持。在此,向范老师表示深深的谢意。其 次,我还要感谢学校,是她提供了良好的学习条件和生活环境。课程设计期间, 图书馆相关的书籍为我提供了很好的查阅平台,还有学校的电子阅览室有着丰 富的文献资料供我查阅,这都给我顺利完成课程设计带来了很大的方便。 15 参考文献 1李弼程,彭天强,彭波.智能图像处理技术M.北京:电子工业出版社,2004 2
26、于殿涨.图像检测与处理技术M.西安:西安电子科技大学出版社,2006 3杨淑莹.VC+十图像处理程序设计M.北京:北方交通大学出版社,2003 4孙家广.计算机图形学M.北京:清华大学出版社,2002 5何斌,马天予,王运坚.VisualC+数字图象处理M.北京:人民邮电出版社,2002 6中国物品编码中心.条码技术与应用M.北京:清华大学出版社,2004 7张成海,郭卫华. QRCode一种新型的矩阵符号M.北京:中国标准出版社,2000。 8中国物品编码中心.QRCode二维码技术与应用M.北京:中国标准出版社,2002。 9王新梅.纠错码与差错控制.北京:人民邮电出版社M,1989. 10朱诗兵,刘作学,李迎春.信息论与编码理论M.北京:科学出版社,2005 11刘宏伟,严妍.快速响应码的识别和解码M.北京:计算机工程与设计,2005.6