二维条码的格式和漂亮霸气符号马甲格式代表的含义是怎样的

当前位置: >> 二维条码认识与识别 二维条码的认识和识别组 长:李学泓学号: 年级专业班级:13 自动化 3 年级专业班级:13 自动化 3组员一:__熊筠野_____ 学号:指导教师
邓继忠摘要随着信息技术的发展,二维条码应运而生,并且具有很好的应用前景。 作为二维条码的一种,矩阵式的二 维条码是建立在计算机图像处理技术组合编码原理等基础上的一种特殊码制&。 二维条码/二维码 (2-dimensional bar code) 是用某种特定的几何图形按一定规律在平面(二维方向 上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的 “0” 、 “1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入 设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的 字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、 及处理图形旋转变化等特点。 二维条码/二维码能够在横向和纵向两个方位同时表达信息, 因此能在很小 的面积内表达大量的信息。 本实验研究对象是二维码之一 QRcode,完成对其的定位,二值化,去除白框,实现统计模块数,获 取版本号,去除功能区域,反色,获取格式及版本信息,去除格式及版本区域,获取码内信息,去除掩 模,译码以及具有以上所有功能的一键运行功能。关键词: 计算机图像处理 二维码 版本号 格式信息QR 码定位二值化去除白框旋转模块数版本信息功能区域 码内信息掩模 译码 一键运行1 目录目 录 1. 设计要求…………………………………………………………………………………..…...4 2. 开发环境………………………………………………………………………………….........4 3. 原理说明………………………………………………………………………………….........5 3.1 二维条码与一维条码………………………………………………………………….………5 3.2 二维条码的分类………………………………………………………..……………………...5 3.2.1 堆叠式/行排式二维条码…………………………………………….…………………….6 3.2.2 矩阵式二维码…………………………………………………..…………………………..6 3.2.3 邮政码…………………………………………………………………………………….…6 3.3 了解 QR Code 码………………………………….…………………………………………...6 3.3.1 QR 码编码字符集……………………………………………………………………...……7 3.3.2 QR 码符号的基本特性与纠错能力……………………...………………………………....7 3.3.3 QR code 的主要特点………………………………………………………………………8 3.3.4 QR code 的符号结构………………………………………………………………………8 3.3.5 符号版本和规格……………………………………………………………………..……..9 3.3.6 寻像图形……………………………………………………………..……………………13 3.3.7 定位图形……………………………………………………………..……………………14 3.3.8 校正图形……………………………………………………………..……………………14 3.3.9 分隔符、编码区域、空白区…………………………………………..…………………14 3.4 编码…………………………………………………………………………………………...14 3.4.1 数据分析………………………………………………………………..…………………16 3.4.2 数据编码………………………………………………………..…………………………16 3.4.3 纠错编码………………………………………………..…………………………………16 3.4.4 构造最终信息………………………………………………………..……………………17 3.4.5 在矩阵中布置模块……………………………………………………………………..…17 3.4.6 掩膜……………………………………………………………………………………..…17 3.4.7 格式和版本信息…………………………………………………..………………………172 3.5 进一步深入认识 QR Code……………………………………..…………………………….17 3.5.1 QR Code 模式…………………………………………………………………….……......17 3.5.2 码字在矩阵中的布置………………………………………….………………………….21 3.5.3 掩模……………………………………………………………………..……………….…23 3.5.4 格式信息…………………………………………………………….………………….…25 3.5.5 版本信息………………………………………………………………………………..…26 4. 系统分析……………………………………………………….………………………….….27 4.1 系统的主要功能分析………………………………………………….………………….….27 4.1.1 二值化..................................................................................................................................27 4.1.2 QR code 定位并标记位置图像...........................................................................................27 4.1.3 QR code 的版本识别,并计算模块数...............................................................................27 4.1.4 去除功能区域......................................................................................................................27 4.1.5 获取格式信息及版本信息..................................................................................................27 4.1.6 获取码内信息......................................................................................................................27 4.1.7 去除掩膜并获取码内信息..................................................................................................27 4.1.8 译码......................................................................................................................................27 4.2 系统的关键问题及解决方法………………………………………………………….…...…28 5. 系统设计………………………………………………………………………………….......28 5.1 程序流程图及说明………………………………………………………...………………....28 5.2 程序主要模块(或功能)介绍…………………………………………………………..….29 5.2.1 标记模块……………………………………………………………………………..……30 5.2.2 信息提取模块………………………………………………………………………..……30 5.2.3 译码模块……………………………………………………………….……………….…33 6. 实验结果与分析…………………………………………………………...………………....40 6.1 实验成果…………………………………………………………………...……………….…45 6.2 存在问题及改进设想……………………………………………………………………....…48 7. 设计体会………………………………………………………………….………….……...497.1 系统开发的体会…………………………………………………………….………………...49 7.2 对本门课程的改进意见或建议…………………………………………………………...….49 参考文献……………………………………………………………………….……………….…493 1. 设计要求 1) 了解二维条形码(QR Code)的编码原理; 2) 编写识别二维条形码的程序; 3) 调试与验证程序; 4) 编写二维条形码(QR Code)认识与识别实验报告; 5) 编写二维条形码(QR Code)认识与识别演示 PPT。 2. 开发环境 本项目的开发环境是 LabWindows/CVI 以及 IMAQ_VisionLabWindows/CVI 是美国 National Instrument 公司开发的基于 C 语言的虚拟仪器开发的 32 位面向计 算机测控领域虚拟仪器的软件开发平台,适用于自动测试、自动控制、测试仪器同学、测试硬件控制、 信号分析及图像处理等软件的开发。经过版本的不断更新,LabWindows/CVI 已经成为测控领域应用最广4 泛的软件开发工具之一。本项目主要是使用 LabWindows/CVI(5.0 版) 。它以 ANSIC 为核心,将功能强大、 使用灵活的 C 语言平台与用于数据采集、分析和表达的测控专业工具有机地结合起来。它的集成化开发 平台、交互式编程方法、丰富的功能面板和库函数大大增强了 C 语言的功能,为熟悉 C 语言的开发人员 建立检测系统、数据采集系统、过程监控系统等提供了一个理想的软件开发环境。 IMAQ_Vision 是 NI 公司开发的基于 LabWindows/CVI 的高级图像处理和分析软件包, 是进行图像处理 和分析的教学和科研的有力工具。该软件包的默认安装路径为 C:CVI401,安装完成后,软件包提供了 3 个重要的文件: 1) Imaq_Cvi.h:包含了与 IMAQ_Vision for LabWindows/CVI 相关的所有常量(constant) 、枚举类型 (enumerated type) 、结构(structure)和函数原型(prototypes)的定义; 2) Imaq_Cvi.fp:包含 IMAQ_Vision for LabWindows/CVI 的所有的函数面板; 3) Imaq_Cvi.lib:包含了 IMAQ_Vision for LabWindows/CVI 的所有函数。 IMAQ_Vision 为图像处理和分析共提供了 15 种类型的函数,用户可以按类同于 C 语言库函数的形式 引用这些函数。 在硬件方面,只需要电脑即可。 3. 原理说明 3.1 二维条码与一维条码 二维条码和一维条码都是信息表示、携带和识读的手段,但是一维条码是对“物品”的标识,二维 条码则是对“物品”的描述。二维条码除了左右(条宽)的粗细及黑白线条有意义外,上下的条高也有 意义,因此与一维条码相比,二维条码可存放的信息量较大。二维条码具有信息量大、安全性高、读取 率高、纠错能力强等特点。 表 1 二维条形码与一维条码的对照 项目 条码 类型 信息密度与 信息容量 错误校验及 纠错能力 垂直方向是 否携带信息 不携带信息 用途 对物品的标 识 对数据库和 通信网络的 依赖 多数应用场 合依赖数据 库及通信网 络 可不依赖数 据主通信网 络而单独应 用 识读设备 可用线扫描 器识读, 如光 笔、线阵 CCD、激光枪 等 对行排式二 维条码可用 线扫描器的 多次扫描识 读; 对于矩阵 式二维条码 仅能用图像 扫描识读一维条码信息密度低, 可通过校验 信息容量较 字符进行错 小 误校验, 没有 纠错能力 信息密度高, 具有错误校 信息容量大 验和纠错能 力, 可根据需 求设置不同 纠错级别携带信息对物品的描 述二维条码5 3.2 二维条码的分类 二维条码可以分为堆叠式/行排式二维条码、矩阵式二维条码和邮政码。 堆叠式/行排式二维条码形 态上是由多行短截的一维条码堆叠而成;矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用 “点”表示二进制“1” ,用“空”表示二进制“0” ,由“点”和“空”的排列组成代码。邮政码通过不 同长度的条进行编码。图 1 为二维条码的分类 3.2.1 堆叠式/行排式二维条码 行排式二维条码(又称:堆积式二维条码或层排式二维条码),其编码原理是建立在一维条码基础之 上,按需要堆积成二行或多行。 它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点, 识读设备与条码印刷与一维条码技术兼容。但由于行数的增加,需要对行进行判定、其译码算法与软件 也不完全相同于一维条码。有代表性的行排式二维条码有如 PDF417 等。图 2 为各种二维条码 3.2.2 矩阵式二维码 短阵式二维条码(又称棋盘式二维条码)它是在一个矩形空间通过黑、白像素在矩阵中的不同分布 进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1” ,点的不出 现表示二进制的“0” ,点的排列组合确定了矩阵式二维条码所代表的意义。 矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一种新型图形符号自动识 读处理码制。 具有代表性的矩阵式二维条码有: Code One、 Maxi Code、 QR Code、 Data Matrix 等。图 1 二维条码的分类3.2.3 邮政码 邮政码通过不同长度的条进行编码,主要用于邮件编码,如 BPO 4-State 。 3.3 了解 QR Code 码 QR 码是由日本 Denso 公司于 1994 年 9 月研制的一种矩阵二维码符号,QR 码除具有一维条码及其它 二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点外, QR 码还具有如下主要特点:6 普通的一维条码只能在横向位置表示大约 20 位的字母或数字信息,无纠错功能,使用时候需要后台 数据库的支持,而 QR 码二维条码是横向纵向都存有信息,可以放入字母、数字、汉字、照片、指纹等大 量信息,相当一个可移动的数据库。如果用一维条码与二维条码表示同样的信息,QR 二维码占用的空间 只是条码 1/11 的面积。 QR 码 (2D 符号) 在横向和纵向上都包含有信息,而 Bar Code 条码只有一个方向上包含有信息。QR 码能够包含的信息比条码多得多 ,如图 3 所示图 3 QR 码和 Bar Code 码 QR 码比其他二维码相比,具有识读速度快、数据密度大、占用空间小的优势。QR 码的三个角上有三 个寻象图形,使用 CCD 识读设备来探测码的位置、大小、倾斜角度、并加以解码,实现 360 度高速识读。 每秒可以识读 30 个含有 100 个字符 QR 码。QR 码容量密度大,可以放入 1817 个汉字、7089 个数字、4200 个英文字母。QR 码用数据压缩方式表示汉字,仅用 13bit 即可表示一个汉字,比其他二维条码表示汉字 的效率提高了 20%。QR 具有 4 个等级的纠错功能,即使破损或破损也能够正确识读。QR 码抗弯曲的性能 强,通过 QR 码中的每隔一定的间隔配置有校正图形,从码的外形来求得推测校正图形中心点与实际校正 图形中心点的误差来修正各个模快的中心距离, 即使将 QR 码贴在弯曲的物品上也能够快速识读。 QR 码可 以分割成 16 个 QR 码,可以一次性识读数个分割码,适应于印刷面积有限及细长空间印刷的需要。此外 微型 QR 码可以在 1 厘米的空间内放入 35 个数字或 9 个汉字或 21 个英文字母,适合对小型电路板对 ID 号码进行采集的需要。多到 7,089 数字可以被编码。 3.3.1 QR 码编码字符集: 1) 数字型数据; 2) 字母数字型数据; 3) 8 位字节型数据; 4) 中国汉字字符; 5) 日本汉字字符。 3.3.2 QR 码符号的基本特性与纠错能力 QR 码符号的基本特性:7 符号规格 21×21 模块(版本 1)-177×177 模块(版本 40) (每一规格:每边增加 4 个模块)数据 类型与容量(指最大规格符号版本 40-L 级) 1) 数字数据 :7,089 个字符 2) 字母数据 :4,296 个字符 3) 8 位字节数据 :2,953 个字符 4) 中国汉字、日本汉字数据 :1,817 个字符 数据表示方法:深色模块表示二进制“1” ,浅色模块表示二进制“0” 。 纠错能力: 1) L 级:约可纠错 7%的数据码字 2) M 级:约可纠错 15%的数据码字 3) Q 级:约可纠错 25%的数据码字 4) H 级:约可纠错 30%的数据码字 掩模:可以使符号中深色与浅色模块的比例接近 1:1,使因相邻模块的排列造成译码困难的可能性 降为最小。 3.3.3 QR code 的主要特点 (1)超高速识读: 从 QR Code 码的英文名称 Quick Response Code 可以看出,超高速识读特点是 QR Code 码区别于四 一七条码、Data Matrix 等二维码的主要特性。由于在用 CCD 识读 QR Code 码时,整个 QR Code 码符号中 信息的读取是通过 QR Code 码符号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短, 它具有超高速识读特点。 用 CCD 二维条码识读设备,每秒可识读 30 个含有 100 个字符的 QR Code 码符 号;对于含有相同数据信息的四一七条码符号,每秒仅能识读 3 个符号;对于 Data Martix 矩阵码,每 秒仅能识读 2~3 个符号。 (2)全方位识读: QR Code 码具有全方位(360°)识读特点,这是 QR Code 码优于行排式二维条码如四一七条码的另一 主要特点,由于四一七条码是将一维条码符号在行排高度上的截短来实现的,因此,它很难实现全方位识 读,其识读方位角仅为±10° (3)能够有效地表示中国汉字、日本汉字:由于其特定的数据压缩模式表示中国汉字和日本汉字,它仅用 13bit 可表示一个汉字,而四一七条码、Data Martix 等二维码没有特定的汉字表示模式,因此仅用字节 表示模式来表示汉字,在用字节模式表示汉字时,需用 16bit(二个字节)表示一个汉字,因此比其它 的二维条码表示汉字的效率提高了 20%。 3.3.4 QR code 的符号结构 每个 QR code 码符号由名义上的正方形模块构成,组成一个正方形阵列,它由编码区域和包括寻像8 图像、分隔符、定位图像和校正图像在内的功能图像完成。功能图像不能用于数据编码。符号的四周由 空白区包围。如图 4 所示:空白区 位置探测图形位置探测图形 分 隔符 定位图形 校正图形功能 图形 符号格式信息 版本信息 编码区 格式数据和纠错码字图 4 QR code 的符号结构 3.3.5 符号版本和规格 QR 码符号共 40 种规格,分别为版本 1、版本 2 ?? 版本 40。版本 1 为 21*21 模块,版本 2 为 25*25 模块,每一版本比前一个版本每边多 4 个模块,以此类推,模块为 177*177 模块。如图 5、图 6、图 7、 图 8、图 9、图 10、图 11 所示:9 数据和纠错码字 格式信息及其纠错码 版本信息及其纠错码 剩余位21 模块 525 模块 921 模块525 模块9版 本1图5 版本 1 结构 图6 版本 2 结构版本 2图7版本 6 结构图8版本 7 结构10 73 模块 5773 模块57版本 14图9版本 14 结构11 101 模块 85101 模块85版本 21图 10 版本 21 结构12 177 模块 161177 模块 161版本 40图 11 版本 40 结构3.3.6 寻像图形 QR Code 图像具有三个位置探测图形,分别位于条码的左上角、右上角和左下角。如图 12 所示,形 特征是黑白条。每个位置探测图形可以看作是由 3 个重叠的同心的正方形组成,它们分别为 7*7 个深色 色模块、5*5 个浅模块和 3*3 个深色模块。如图 12 所示,位置探测图形的模块宽度比为 1:1:3:1:1。 由于位置探测图形具有特殊的比例,同时在掩模作用下,符号中其他地方遇到类似图形的可能性极小,因 此可以在视场中迅速地识别可能的 QR 码符号。识别组成的寻象图形的三个位置探测图形,可以精确定位 条码。13 1:1:3 :1:1A: 3 模块 A B C B: 5 模块 C: 7 模块图 12 寻像图形 3.3.7 定位图形 水平和垂直定位图分别为一个模块宽的一行和一列,由深色浅色模块交替组成,其开始和结束都是 深色模块。水平定位图形位于上部的两个位置探测图形之间,符号的第六行。垂直定位图形位于左侧的 两个位置探测图形之间,符号的第六列。它们的作用是确定符号的密度和版本,提供决定模块坐标的基 准位置。见图 4。 求各模块中心坐标的图形。黑白图形相互配置。当 QR 码歪斜或模块间隔出现误差时用于轴正数据模 块的中心坐标。 3.3.8 校正图形 每个校正图形可看做是三个重叠的同心正方形,由(5*5)个的深色模块, (3*3)个的浅色模块以及 位于中心的一个深色模块组成,校正图形的数量视符号的版本数而定,在模式 2 的符号中,版本 2 以上 (含版本 2)的符号均有校正图像。见图 4。 补正 QR 码歪斜的图形,求得校正图形的中心坐标,补正 QR 码的歪斜。在校正图形中配置有孤立的 黑模块,使得更容易检测出中心坐标。 3.3.9 分隔符、编码区域、空白区 1)分隔符:在每个位置探测图形和编码区域之间有宽度为 1 个模块的分隔符,它全部由浅色模块组成, 见图 4。 2)编码区域:包括表示数据码字、纠错码字、版本信息和格式信息的符号字符,见图 4。 3)空白区:环绕在符号四周的 4 个模块宽的区域,其反射率应与浅色模块相同,见图 4。 3.4 编码 3.4.1 数据分析 即分析输入的数据流,确定转换字符所使用的模式类型。QR Code 码包括几种不同的模型以便高效的 转换数据字符,必要时可以进行模块之间的转换,从数字模式到日本汉字模式和中文汉字模式,每种模 式所需要的位数逐渐增加,通过模式的转换可以使数据的为流长度最短。 表 2 QR Code 码各版本符号的数据容量14 版本每边的模块 功能图形模块 格式及版本信息 数(A) 数 (B) 202 235 243 251 259 267 390 398 406 414 422 430 438 611 619 627 635 643 模块数 (C) 31 31 31 31 31 31 67 67 67 67 67 67 67 67 67 67 67 67除 C 以外的数 据模块数 (D=A2-B-C) 208 359 567 807 68 68 56 67 数据容量 [码字]* (E) 26 44 70 100 134 172 196 242 292 346 404 466 532 581 655 733 815 901剩余位1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1821 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 890 7 7 7 7 7 0 0 0 0 0 0 0 3 3 3 3 315 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 4093 97 101 105 109 113 117 121 125 129 133 137 141 145 149 153 157 161 165 169 173 177651 659 882 890 898 906 914 922 930 19 43 82 06 161467 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 6752 29648991 58 88 21 23 61 96 063 3 4 4 4 4 4 4 4 3 3 3 3 3 3 3 0 0 0 0 0 03.4.2 数据编码 对于不同模式,按照各模式所定义规则,将数据字符转换为位流。当需要进行模式转换时,在新的 模式转换起始位置加入模式指示符,在数据序列末端加入终止符,由此产生的位流可以分为每 8 位一个 码字,必要时加入填充字符以满足不同版本所需要的数据码数。 3.4.3 纠错编码 QR Code 码采用相对纠错算法生成一系列纠错码字,添加数据码字序列之后,使符号在遇到损坏时不16 至于丢失数据。共有 L、M、Q、H 四个纠错等级,对应四种纠错容量。 根据版本和纠错等级,将数据码 字分为一块或多块,对每一块分别进行纠错运算,每个版本,每个纠错等级的码字总数、纠错码字总数、 纠错快的结构和数量都有规定。 3.4.4 构造最终信息 在每一块中置入数据和纠错码字,必要时加剩余位。 3.4.5 在矩阵中布置模块 将寻象图形、分隔符、定位图形、校正图形与码字模块一起放入矩阵。 3.4.6 掩膜 为了提高 QR Code 码阅读的可靠性,最好均匀的安排深色和浅色模块,且尽可能避免位置探测图形 出现在其他区域。具体方法是:依次将掩膜图形用于符号的编码区域,按评价结果选择,是深色浅色模 块比率最优,且不希望出现图形最小化。 3.4.7 格式和版本信息 格式信息为 15 位,其中 5 位数据位,其余 10 位,其余 10 位有 BCH(15,5)编码得到的纠错位。 版 本信息 18 位,其中 6 位数据位,其余 12 位是由 BCH(18,6)编码计算出来的纠错位。 3.5 进一步深入认识 QR Code 3.5.1 QR Code 模式 QR Code 模式有 ECI 模式、数字模式、字母数字模式、八位字节模式、日本汉字模式、中国汉字模式、 结构链接模式、FNCI 模式,各模式指示符如表 3 所示表 3 模式指示符 模式 ECI 数字 字母数字 8 位字节 日本汉字 中国汉字 结构链接 FNC1 指示符 10 01 00110101 (第一位置) 1001 (第二位置) 终止符 ( 信息结 0000 尾) 1)扩充解释(ECI)模式 本模式用于按可选的字节值解释(例如不同的字符集)对某类数据进行编码,可选的字节值解释应17 符合 AIM ECI 规范中对该类数据进行预处理的规则。模式用模式指示符 0111 引入。不需要引入 QR 码缺 省扩充解释(ECI 头 000020,对应于 JIS8/转换 JIS 字符集) ,尤其是在任何符号的开始。 2) 数字模式 对十进制数字 0~9(ASCII 值 30HEX 至 39HEX)编码,通常的密度为每 10 位表示 3 个字符。即将输 入的数据每三位分为一组, 将每组数据转换为 10 位二进制数。 如果所输入的数据的位数不是 3 的整数倍, 所余的 1 位或 2 位数字应分别转换为 4 位或 7 位二进制数。将二进制数据连接起来并在前面加上模式指 示符和字符计数指示符。数字模式中字符计数指示符如表 4 中定义的有 10、12 或 14 位。输入的数据字 符的数量转换为 10、12 或 14 位二进制数后,放置在模式指示符之后,二进制数据序列之前。 例 1 (符号版本 1-H) 输入的数据: (1) 分为 3 位一组: 012 345 67 (2) 将每组转换为二进制: 012→ 345→ 67 →) 将二进制数连接为一个序列: ) 将字符计数指示符转换为二进制(版本 1-H 为 10 位) : 字符数为:8→ (5) 加入模式指示符 0001 以及字符计数指示符的二进制数据: 000 1000011 表 4 字符计数指示符的位数 版本 1~9 10~26 27~40 3)字母数字模式 将输入的数据分为两个字符一组,用 11 位二进制表示。将前面字符的值乘以 45 与第二个字符的值 相加,将所得的结果转换为 11 位二进制数。如果输入的数据的字符数不是 2 的整数倍,将最后一个字符 编码为 6 位二进制数。 将所得的二进制数据连接起来并在前面加上模式指示符和字符计数指示符, 按表 3 的规定在字母数字模式中,字符计数指示符的长度为 9、11 或 13 位。将输入的字符数编码为 9、11 或 13 位二进制数,放在模式指示符之后,二进制数据序列之前。 按照表 5,每个输入的字符赋于一个数值 V,它的值为 0 到 44。 数字模 字母数字模 8 位字节模 日本汉字模 中国汉字 式 式 式 式 模式 10 9 8 8 8 12 14 11 13 16 16 10 12 10 1218 表 5 字母数字模式的编码/译码 字符 值 字符 值 字符 值 字符 值 字符 值 字符 值 字符 值 字符 值 0 1 2 3 4 5 4)8 位字节模式 在本模式中,一个 8 位码字直接表示一个输入数据字符的 JIS8 字符值,即密度为每个字符 8 位,如 表 5 所示。在非缺省的其它 ECI 中,它直接表示一个 8 位字节的值。 将二进制数据连接起来并在前面加上模式指示符和字符计数指示符。 8 位字节模式的字符计数指示符 为 8 位或 16 位,将输入字符数转换为 8 位或 16 位二进制数据放在模式指示符之后,二进制数据序列之 前。 8 位字节模式的位流的位数计算公式如下:D = 4 + C + 8D,其中:B=位流的位数,C=字符计数指示 符的位数,D=输入数据的字符数 表 6 八位字节模式的编码/译码 0 1 2 3 4 5 6 7 8 9 A B 6 7 8 9 10 11 C D E F G H 12 13 14 15 16 17 I J K L M N 18 19 20 21 22 23 O P Q R S T 24 25 26 27 28 29 U V W X Y Z 30 31 32 33 34 35 SP $ % * + 36 37 38 39 40 41 . / : 42 43 4419 5)日本汉字模式 日本汉字模式用于表示与基于 JIS X 0208 的转换 JIS 系统一致的日本汉字字符。转换 JIS 值由 JIS X 0208 转换而来。具体内容见 JIS X 0208 附录 1 转换代码表示法。每个双字节字符由 13 位二进制码字表 示。 6)中国汉字模式 7)混合模式 QR 码符号可以包含以 8.3.1 到 8.3.5 中描述的多种模式所表示的混合数据序列。 8)结构链接模式20 结构链接模式用于把一个数据文件分开表示为多个 QR 码符号的序列,要求所有的符号可以识读并且 数据可以按正确的顺序重新建立。每个符号都要有一个结构链接头,以标识这个序列的长度及该符号在 其中的位置,并且检验是否所有识读的符号属于同一个文件。 9)FNC1 模式 FNC1 模式用于表示按 UCC/EAN 应用标识标准或国际 AIM 协会已经同意的具体行业标准格式化的数据。 10)终止符 符号的数据结尾由紧跟在最后一个模式段后面的终止符序列 0000 表示,当数据位流数量正好填满符 号的容量时,它可以省略,或者当符号所余的容量不足 4 位时它可以截短。 3.5.2 码字在矩阵中的布置 1) 符号字符表示 在 QR 码符号中有两种类型的符号字符: 规则的和不规则的。 它们的使用取决于它们在符号中的位置, 以及与其他符号字符和功能图形的关系。 多数码字在符号中表示为规则的 2×4 个模块的排列。其排列有两种方式,垂直布置(2 个模块宽,4 个模块高) ;如果需要改变方向,可以水平布置(4 个模块宽,2 个模块高) 。当改变方向或紧靠校正图形 或其他功能图形时,需用不规则符号字符。 2) 功能图形的布置 按照与使用的版本相对应的模块数构成空白的正方形矩阵。在寻象图形、分隔符、定位图形以及校 正图形相应的位置,填入适当的深色浅色模块。格式信息和版本信息的模块位置暂时空置,它们对所有 版本都是相同的。 3) 符号字符的布置 在 QR 符号的编码区域中,符号字符以 2 个模块宽的纵列从符号的右下角开始布置,并自右向左,且 交替地从下向上或从上向下安排。下面给出了符号字符以及字符中位的布置原则。如图 13,14,15 所示。 a)位序列在纵列中的布置为从右到左,向上或向下应与符号字符的布置方向一致。 b)每个码字的最高位(表示为位 7)应放在第一个可用的模块位置,以后的放在下一个模块的位置。如果 布置的方向是向上的,则最高位占用规则模块字符的右下角的模块,布置的方向向下时为右上角。如果 先前的字符结束于右侧的模块纵列,最高位可能占据不规则符号字符的左下角模块的位置。 c)如果符号字符的两个模块纵列同时遇到校正图形或定位图形的水平边界,可以在图形的上面或下面继 续布置,如同编码区域是连续的一样。 d)如果遇到符号字符区域的上或下边界(即符号的边缘,格式信息,版本信息或分隔符) ,码字中剩余的 位应改变方向放在左侧的纵列中。 e)如果符号字符的右侧模块纵列遇到校正图形或版本信息占用的区域,位的布置形成不规则排列符号字 符,在相邻校正图形或版本信息的单个纵列继续延伸。如果字符在可用于下一个字符的两列纵列之前结21 束,则下一个符号字符的首位放在单个纵列中。向上 0 1 2 3 4 5 6 7 向下 6 7 4 5 2 3 0 1由向上变为向下 (i) 2 3 4 5 0 1 6 7由向上变为向下(ii) 0 1 2 3 4 5 6 7图 13 向上或向下的规则字符的位的布置向上 1 3 5 7 0 1 2 3 4 6 0 2 4 6 A A A A A 5 7图 14 布置方向改变的符号字符为布置示例第二个字符A 表示校正图形占用的模块第一个字符图 15 临近校正图像的位置布置示例 还有另一种可供选择的符号字符布置方法,可得到相同的结果,将整个码字序列视为一个单独的位 流,将其(最高位开始)按从右向左,按向上和向下的方向交替的布置于两个模块宽的纵列中。并跳过 功能图形占用的区域,在纵列的顶部或底部改变方向,每一位应放在第一个可用的位置。如图 16,17 所 示。 当符号的数据容量不能恰好分为整数个 8 位符号字符时,要用相应的剩余位填充符号的容量。在进 行掩模以前,这些剩余位的值为 0。E3 D19E4D20数据码字 纠错码字E2 E5 E15 E11 E1 D21D18E16E12E6D22D17D12D11 D5 D4 D10E14E13E10E7D28D23D16D13D6 D3剩余位E8D27D24 D15 D25 D14D7 D2D26D9 D8 D1E922 图 16 版本 2-M 符号的符号字符布置图17版本7-H符号的符号字符布置3.5.3 掩模 为了 QR 码阅读的可靠性,最好均衡地安排深色与浅色模块。应尽可能避免位置探测图形的位图 1011101 出现在符号的其他区域。为了满足上述条件,应按以下步骤进行掩模。 1)掩模不用于功能图形 2)用多个矩阵图形连续地对已知的编码区域的模块图形(格式信息和版本信息除外)进行 XOR 操作。XOR 操作将模块图形依次放在每个掩模图形上,并将对应于掩模图形的深色模块的模块取反(浅色变成深色, 或相反) 。 3)对每个结果图形的不合要求的部分记分,以评估这些结果。 4)选择得分最低的图形。 表 7 给出了掩模图形的参考(放置于格式信息中的二进制参考)和掩模图形生成的条件。掩模图形 是通过将编码区域(不包括为格式信息和版本信息保留的部分)内那些条件为真的模块定义为深色而产 生的。所示的条件中,i 代表模块的行位置,j 代表模块的列位置, (i,j)=(0,0)代表符号中左上角的位 置。表 7 掩模图形参考23 掩模图形参考 000 001 010 011 100 101 110条件 (i + j) mod 2 = 0 i mod 2 = 0 j mod 3 = 0 (i + j) mod 3 = 0 ((i div 2) + (j div 3)) mod 2 = 0 (i j) mod 2 + (i j) mod 3 = 0 ((i j) mod 2 + (i j) mod 3) mod 2 = 0111 ((i j) mod 3 + (i+j) mod 2) mod 2 = 0 版本 1 符号的所有的掩模图形,用掩模图形参考 000 到 111 的掩模结果。如图 18 所示i j000 (i + j) mod 2 = 0001 i mod 2 = 0010 j mod 3 = 0011 (i + j) mod 3 = 0100 ((i div 2 ) + (j div 3 )) mod 2 = 0101 (i j) mod 2 + (i j) mod 3 = 0功能模块 掩模不用于功能模块110 110 ((i j) mod 2 + (i j) mod 3) mod 2 = 0 ((i j) mod 2 + (i j) mod 3) mod 2 = 0图 18 版本 1 符号的所有的掩模图形 掩模过程如图 19 所示:24 未进行掩模的符号??掩模图形 000 到 111....................待评估的 掩膜结果选择得分最低的结果图 19 掩模过程 3.5.4 格式信息 格式信息为 15 位,其中有 5 个数据位,10 个是用 BCH(15,5)编码计算得到的纠错位。 格式信息数据的第 3 到第 5 位的内容为掩模图形参考。 按上述方法计算 10 位纠错数据,并加在 5 个数据位之后;将 15 位格式信息与掩模图形 010 进行 XOR 运算,以确保纠错等级和掩模图形合在一起的结果不全是 0;格式信息掩模后 的结果应映射到符号中为其保留的区域内。需要注意的是,格式信息在符号中出现两次以提供冗余,因 为它的正确译码对整个符号的译码至关重要。格式信息的最低位模块编号为 0,最高位编号为 14,位置 为(4V+9,8)的模块总是深色,不作为格式信息的一部分表示,其中 V 是版本号。 纠错等级指示符如表 8 所示表 8 纠错等级指示符 纠错等级 二进制指示符25 L M Q H 3.5.5 版本信息01 00 11 10版本信息为 18 位,其中,6 位数据位,通过 BCH(18,6)编码计算出 12 个纠错位。6 位数据为版本 信息,最高位为第一位。12 位纠错信息在 6 位数据之后。 只有版本 7~40 的符号包含版本信息, 没有任何版本信息的结果全为 0。 所以不必对版本信息进行掩 模。 最终的版本信息应映射在符号中预留的位置,见图 20。需要注意的是,由于版本信息的正确译码是 整个符号正确译码的关键,因此版本信息在符号中出现两次以提供冗余。版本信息的最低位模块放在编 号为 0 的位置上,最高位放在编号为 17 的位置上。见图 21。版本信息图 20 版本信息位置26 0 3 6 9 12 15 1 4 7 10 13 16 2 5 8 11 14 170 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 位于右上角的版本信息位于左下角的版本信息图 21 版本信息的模块布置 4. 系统分析 4.1 系统的主要功能分析 4.1.1 二值化 由于载入的图像不一定是标准的二值图像,所以需要对图像进行二值化处理,方便进一步对图像进 行处理。本项目主要用到的都是标准的二值图像。 4.1.2 QR Code 定位并标记位置图像寻找探测图形即为 QR Code 的定位,首先把左上角探测图形命名为方块 1,左下角探测图形命名为 方块 2,右上角探测图形命名为方块 3,可以用扫描黑色像素函数,逐行扫描和逐列扫描找出方块 1、2、 3 的各边位置, 找到探测位置图形后就可以用矩形标记函数和填充函数将三个方块的位置标记并填充为像 素值是 100 的区域。 4.1.3 QR Code 的版本识别,并计算模块数 在对 QR Code 解码过程中,我们首先要找到 QR Code 的具体位置并确定它的版本号和模块数,这就 要找到三个作为确定条码位置的位置探测图形,根据位置探测图形固有的 7*7 模块数的特点和探测图形 与条码宽度的比较,可以计算出条码的模块数,继而得出版本号。 4.1.4 去除功能区域 由图 4 可知,功能区包括位置探测图像,位置探测图形分隔符,定位图形以及校正图形。去除功能区, 其实是为了把功能区都标识为同一像素灰度级, 本设计将其灰度级标识为 100, 这样可方便进一步对图像 处理。 4.1.5 获取格式信息及版本信息 格式信息为 15 位,其中有 5 个数据位,10 个是用 BCH(15,5)编码计算得到的纠错位。版本信息 为 18 位,由版本信息可知其纠错级别和掩模参考图形编号。 4.1.6 获取码内信息 QR Code 中白点黑点编译成二进制的 1、0。 4.1.7 去除掩模并获取码内信息 去除掩模后再把 QR Code 中白点黑点编译成二进制的 1、0。此为 QR Code 中真正的码内信息。 4.1.8 译码27 把码内信息译码出其所代表的含义。 4.2 系统的关键问题及解决方法 本次二维条码 QRcode 的识别的关键问题是找到各个模块的字符集,理解所有模式下的各种编码方法 及个别的特殊编码方法,或许还存在特殊的掩模方式,还有就是寻找能存放两位字节字符的储存定义类 型,目前也正因为没有找到字符集,不知道汉字等的对应编码,还不能实现对汉字、偏旁部首等的识别。 现在做到的只是解决了按规则的编码方式编译的 QRcode 码里面的占单位字节数字、大小写字母、符 号等的识别。 5. 系统设计 5.1 程序流程图及说明 本项目的程序总流程图如图 22 所示:1.打开一幅图像2.二值化2.1 旋转3.去除白框6.反色5.去除功能区域4.获取版本号7.获取格式及版本信息8.去除格式及版本区域9.获取码内信息12.退出11.译码10.去除掩模1.一键运行2.退出图 22QR Code 识别的总流程图二值化:由于载入的图像不一定是标准的二值图像,所以需要对图像进行二值化处理,方便进一步 对图像进行处理。本项目主要用到的都是标准的二值图像。 旋转:实现对图像不是正面时的不同位置的转换。 去除白框:QR Code 的白框信息是无用信息,为了降低信息量,所以应去除白框,便于对 QR Code 定位。 获取版本号:获取版本号是本项目的一个重要组成部分。QR Code 有 40 种版本。28 去除功能区:由图 4 可知,功能区包括位置探测图像,位置探测图形分隔符,定位图形以及校正图 形。去除功能区,其实是为了把功能区都标识为同一像素灰度级,本项目将其灰度级标识为 100,这样可 方便进一步对图像处理。 反色:图像中的黑点代表 0,白点代表 1,而实际的 QR Code 中的黑点代表 1,白点代表 0,故须对 图像进行反色。 获取格式信息和版本信息:格式信息为 15 位,其中有 5 个数据位,10 个是用 BCH(15,5)编码计 算得到的纠错位。版本信息为 18 位,由版本信息可知其纠错级别和掩模参考图形编号。 去除格式及版本区域:把格式及版本区域的灰度级标识为 150。 获取码内信息:QR Code 中白点黑点编译成二进制的 1、0。 去除掩模并获取去除掩模后的码内信息:去除掩模后再把 QR Code 中白点黑点编译成二进制的 1、0。 此为 QR Code 中真正的码内信息。 译码:把码内信息译码出其所代表的含义。 为了方便运行完以上所有步骤,本项目还设置了一键运行。程序主界面如图 23 所示:图 23 程序主界面 5.2 程序主要模块(或功能)介绍29 5.2.1 标记模块 即去除功能图形及去除格式及版本区域,使用的函数是 IPI_DrawRect(),该函数的功能是将选取的 区域(矩形)标记为你自己想设定的灰度值,使用这个函数需要在该函数前面先将要标记的区域用 MakeRect 选定出来,例如要将位置探测图形 1 标记为灰度值为 100.0 的区域,就先选定区域: Rect1=MakeRect (0, 0, my*8, mx*8); /*my: y 轴方向的模块像素数,mx: x 轴方向的模块像素 数*/ 再将选定的区域进行标记: IPI_DrawRect (Image3, Image4, Rect0, IPI_DRAW_PAINT, 100.0); 结果如图 24(参考) :图 24 标记图像 在该程序的应用中,主要是对 QRcode 码的功能图形、格式信息区域及版本信息区域的标记,便于之 后信息的提取。 5.2.2 信息提取模块 包括格式信息的提取、版本信息的提取、码内信息的提取三部分。格式信息的提取及版本信息的提 取都是在相应的信息区域使用两个小循环,即可把格式信息及版本信息顺序地提取出来,存放到一个预 先定义好的数组里面;30 格式信息提取的具体程序如下(参考) : //获取格式 1 的信息 h=8*my+my/2; e=0; for (w=mx/2; w&=8*mx+mx/2; w=w+mx) { IPI_GetPixelValue (Image5, w, h, &pixval); if (pixval==0||pixval==255) geshi1[e++]=pixval/255; } w=w- for (h=7*my+my/2; h&=my/2; h=h-my) { IPI_GetPixelValue (Image5, w, h, &pixval); if (pixval==0||pixval==255) geshi1[e++]=pixval/255; } 而码内信息的提取,是在格式信息及版本信息提取之后将这两部分的区域与之前的功能图形区域一 起标记之后再进行的,由于 QRcode 码的特殊的编码形式,码内信息的提取时由四个小循环结构嵌套,对 图像全图扫描来提取的,中间加入必要的条件判定语句来实现跳跃式的扫描,同样是实现了将码内信息 顺序地提取出来,并存放到已定义好的数组内; 码内信息提取的具体程序如下(参考) : //获取除模后原位流信息 i=width6-mx/2; L1: if (h1&=4+version) { i1=i; /* my/2 是为了提取中心的像素来替代整个模块的像素,固定高度for (j=height6-my/2; j&=0; j=j-my) for (i=i1; i&=i1- i=i-mx) { IPI_GetPixelValue (Image6, i, j, &pixval);if (pixval==0||pixval==255) { k[e2]=pixval/255; m=i/ n=j/ //去除掩模31 switch (bianhao) { case 0: e=(m+n)%2; case 1: e=n%2; case 2: e=m%3; case 3: e=(m+n)%3; case 4: e=((n/2)+(m/3))%2; case 5: e=(m*n)%2+(m*n)%3; case 6: e=((m*n)%2+(m*n)%3)%2; case 7: e=((m*n)%3+(n+m)%2)%2; } if (e==0) q[e1++]=abs(k[e2++]-1); else q[e1++]=k[e2++];} } h1++; if (i&=6*mx&&i&7*mx) i=i-; goto L2; } L2: if (h2&=4+version) { i2=i; for (j=my/2; j&=height6; j=j+my) for (i=i2; i&=i2- i=i-mx) { IPI_GetPixelValue (Image6, i, j, &pixval);32 if (pixval==0||pixval==255) { k[e2]=pixval/255; m=i/ n=j/ //去除掩模 switch (bianhao) { case 0: e=(m+n)%2; case 1: e=n%2; case 2: e=m%3; case 3: e=(m+n)%3; case 4: e=((n/2)+(m/3))%2; case 5: e=(m*n)%2+(m*n)%3; case 6: e=((m*n)%2+(m*n)%3)%2; case 7: e=((m*n)%3+(m+n)%2)%2; } if (e==0) q[e1++]=abs(k[e2++]-1); else q[e1++]=k[e2++]; } } h2++; goto L1; } 5.2.3 译码模块33 就是将以上操作得到的数据位流进行拆分,细化的话,要先将从码中提取出来的数据流信息去除掩 模,转变为初始的原位流信息,再根据二维条形码的编码规则反向编译出原位流里最初始的数据信息。 二维条形码的编码有多种模式,有字母数字模式、数字模式、8 位字节模式、混合模式、中国汉字模式、 日本汉字模式等等,但是由于时间关系,我们只实现了数字模式、字母数字模式及 8 位字节模式的图像 识别。以下主要讲识别数字模式信息,字母数字信息和八位字节信息。 //识别数据信息 switch (z) { //识别数字模式信息 case 1: sw=0; //识别字符计数指示符 for (i=0; i&z1; i++) { z4[i]=1; for (j=4; j&3+z1-i; j++) z4[i]=z4[i]*2; sw=sw+q[4+i]*z4[i]; } sprintf (resultstr, &字符计数指示符: %d&,sw); InsertTextBoxLine (PANEL, PANEL_TEXTBOX_3, -1, resultstr); //识别数据尾组位数 s0=sw%3; //识别数据整块组个数 s00=sw/3; //识别整块组数据信息 e=0; for (r=1; r&=s00; r++) { s=0; //确定各个数据位的位权 for (i=0; i&10; i++) { z4[i]=1;34 for (j=0; j&9-i; j++) z4[i]=z4[i]*2; //确定数据的十进制表示 s=s+q[4+z1+(r-1)*10+i]*z4[i]; } //识别第一位数据 s1=s/100; w[e++]=s1+'0'; //识别第二位数据 s1=s%100; s2=s1/10; w[e++]=s2+'0'; //识别第三位数据 s2=s1%10; w[e++]=s2+'0'; } //确定尾组信息位数 switch (s0) { case 1: z11=4; case 2: z11=7; } //识别尾组数据信息 s=0; //确定各个数据位的位权 for (i=0; i&z11; i++) { z4[i]=1; for (j=0; j&z11-i-1; j++) z4[i]=z4[i]*2; //确定数据的十进制表示35 s=s+q[4+(s00+1)*z1+i]*z4[i]; } switch (z11) { //识别一位数据 case 4: w[e++]=s+'0'; //识别两位数据 case 7: //识别第一位数据 s1=s/10; w[e++]=s1+'0'; //识别第二位数据 s1=s%10; w[e++]=s1+'0'; } //识别字母数字模式信息 case 2: sw=0; //识别字符计数指示符 for (i=0; i&z1; i++) { z4[i]=1; for (j=4; j&3+z1-i; j++) z4[i]=z4[i]*2; sw=sw+q[4+i]*z4[i]; } sprintf (resultstr, &字符计数指示符: %d&,sw); InsertTextBoxLine (PANEL, PANEL_TEXTBOX_3, -1, resultstr); //识别数据尾组位数 s0=sw%2; //识别数据整块组个数36 s00=sw/2; //识别整块组数据信息 e=0; for (r=1; r&=s00; r++) { s=0; for (i=0; i&11; i++) { z4[i]=1; for (j=0; j&10-i; j++) z4[i]=z4[i]*2; s=s+q[4+z1+(r-1)*11+i]*z4[i]; } //识别第一位数据 s1=s/45; if (s1&=0&&s1&=9) w[e++]=s1+'0'; if (s1&9&&s1&36) w[e++]=s1+'7'; if (s1==36) w[e++]=' '; if (s1==37||s1==38) w[e++]=s1+'1'-'0'; if (s1==39||s1==40) w[e++]=s1+'3'-'0'; if (s1==41||s1==42||s1==43) w[e++]=s1+'4'-'0'; if (s1==44) w[e++]=':'; //识别第二位数据 s1=s%45; if (s1&=0&&s1&=9) w[e++]=s1+'0'; if (s1&9&&s1&36) w[e++]=s1+'7'; if (s1==36)37 w[e++]=' '; if (s1==37||s1==38) w[e++]=s1+'1'-'0'; if (s1==39||s1==40) w[e++]=s1+'3'-'0'; if (s1==41||s1==42||s1==43) w[e++]=s1+'4'-'0'; if (s1==44) w[e++]=':'; } //识别数据尾数的信息 if (s0==1) { //识别尾组数据信息 s=0; for (i=0; i&6; i++) { z4[i]=1; for (j=0; j&5-i; j++) z4[i]=z4[i]*2; s=s+q[4+z1+11*s00+i]*z4[i]; } if (s&=0&&s&=9) w[e++]=s+'0'; if (s&9&&s&36) w[e++]=s+'7'; if (s==36) w[e++]=' '; if (s==37||s==38) w[e++]=s+'1'-'0'; if (s==39||s==40) w[e++]=s+'3'-'0'; if (s==41||s==42||s==43) w[e++]=s+'4'-'0'; if (s==44) w[e++]=':';38 } //识别结构连接模式信息 case 3: sw=0; //识别字符计数指示符 for (i=0; i&z1; i++) { z4[i]=1; for (j=4; j&3+z1-i; j++) z4[i]=z4[i]*2; sw=sw+q[4+i]*z4[i]; } sprintf (resultstr, &字符计数指示符: %d&,sw); InsertTextBoxLine (PANEL, PANEL_TEXTBOX_3, -1, resultstr); //识别 8 位字节模式信息 case 4: sw=0; //识别字符计数指示符 for (i=0; i&z1; i++) { z4[i]=1; for (j=4; j&3+z1-i; j++) z4[i]=z4[i]*2; sw=sw+q[4+i]*z4[i]; } sprintf (resultstr, &字符计数指示符: %d&,sw); InsertTextBoxLine (PANEL, PANEL_TEXTBOX_3, -1, resultstr); //识别数据信息 for (e=0; e& e++) w[e]=q[12+e*8]*128+q[13+e*8]*64+q[14+e*8]*32+q[15+e*8]*16+q[16+e*8]*8+q[17+e*8]*4+q[18+e*8 ]*2+q[19+e*8];39 结构存放到数组 q 里面的数据就已经是我们想要的原位流信息,再根据编译规则,先识别出编译的 模式,再识别出数据的字符计数指示符,最后才对我们最想要识别的最初始信息的识别。识别的过程根 据编译的模式的不同,有不同的识别步骤和方法,不过大都是要先统计出每组数据的十进制值,再根据 不同的模式按照不同的字符集对应识别出信息。 6. 实验结果与分析 6.1 实验结果 运行情况如图 25-37 所示:图 25 打开一幅 QR Code 图像 运行程序后,点击打开键打开一幅 QR Code 图像。40 图 26 原图像图 27 二值化 二值化是进行图像预处理的一个重要组成部分,本项目的二值化程序如下: //二值化 void Ezh()41 { IPI_Threshold (Image1, Image2, 128, 255.0, 255.0, TRUE); IPI_SetWindowAttribute (1, ATTR_LEFT, 550); IPI_SetWindowAttribute (1, ATTR_TOP, 150); IPI_WindDraw (Image2, 1, &二值图像&, TRUE); }图 28 去除白框 由图 27 知,白框是对 QR Code 识别无用的,故为了方便进一步对图像进行处理,对图像进行去除白 框处理。42 图 29 获取版本号 此一步主要是:获取版本号,每边的模块数,X 轴模块像素数,Y 轴模块像素数图 30 去除功能区域 功能区包括位置探测图像,位置探测图形分隔符,定位图形以及校正图形。去除功能区,其实是为43 了把功能区都标识为同一像素灰度级,本项目将其灰度级标识为 100,这样可方便进一步对图像处理。图 31 反色 图像中的黑点代表 0,白点代表 1,而实际的 QR Code 中的黑点代表 1,白点代表 0,故须对图像进 行反色。图 32 获取格式及版本信息 获取格式信息和版本信息:格式信息为 15 位,其中有 5 个数据位,10 个是用 BCH(15,5)编码计44 算得到的纠错位。版本信息为 18 位,由版本信息可知其纠错级别和掩模参考图形编号。图 33 去除格式及版本区域 去除格式及版本区域道理同去除功能区,此例是把格式及版本区域的灰度级标识为 150。图 34 获取码内信息 获取码内信息:把 QR Code 中白点黑点编译成二进制的 1、0。不过,这时还没去除掩模,故不是真 正的 QR Code 中的信息。45 图 35 去除掩模及获取码内信息去除掩模并获取去除掩模后的码内信息:去除掩模后再把 QR Code 中白点黑点编译成二进制的 1、0。 此为 QR Code 中真正的码内信息。图 36 译码46 译码:把码内信息译码出其所代表的含义。此一步难度比较大,须找到各个模块的字符集,理解所 有模式下的各种编码方法及个别的特殊编码方法,或许还存在特殊的掩模方式,还有就是寻找能存放两 位字节字符的储存定义类型。其他模式版本的:47 图 37 一键运行 一键运行,可一步把以上所有的功能都进行,方便省时 程序里将图像先进行反色处理,因为在实际应用的二维条形码中,黑色区域表示的值是 1、白色表示 的值是 0,而在图像的灰度值里面,黑色的灰度值为 0、白色的灰度值为 255,反色之后可以使得后面对 条形码信息的提取方便些;在除模取反时,直接将原值减一再取绝对值即可得到原值的取反值,省了要 先对原值进行判定再重新赋值的步骤;程序还多处使用了全局变量,使得程序的整体性和简洁性提高; 在信息的提取之前,就先把非信息的功能区域标记为其他数值的灰度值,使得在提取数据信息时,可直 接全图像扫描,使得程序更加简单,运行效率也相应有所提高;在提取码内信息时,是在已将非码内信 息标记之后的图像内使用四个循环相互嵌套的方法,中间再加入必要的跳跃扫描实现的;显示部分是纯 采用剪切板 textbox 来显示的, textbos 比 listbox 更直接更容易使用和显示, 还能在 textbox 里直接对 显示框内对结果进行分析、复制等。另外,还特意添加了个一键运行,减少点击次数。 程序的创新之处还有就是对图像进行了二值化预处理和去除掩模功能。 6.2 存在问题及改进设想 这次的设计目前只实现了版本较低的二维条形码的部分模式下数字、字母、8 位字节的识别(8 位字 节下的日文汉字可以识别) ,而且二维条形码还得是严格按编码规则来编译的才能准确译码。该程序还存 在很多问题,对那些应用非标准的编译方式进行编译的条形码是不能进行准确地识别的、对版本高的, 有存在数据交叉排序的不能进行准确的识别、对占两个字符位的符号或汉字也不能进行准确的识别。在 改进方面,这个课题还存在很大的发展空间,首先可以扩充识别范围,包括增加能够准确识别更多的模 式(ECI 模式、日本汉字模式、结构连接模式等)及模式字符(汉字、日本汉字等) ,还可以增加识别的 版本号,向更高的版本号识别进军,接着还可以连接摄像头来实现对二维条形码的实时检测识别并带有48 不断检测出图像的偏移角度,以便实现任意拍照,以便使用性增强等。这些都是很有挑战性,同时也是 二维条形码识别的发展趋势。 7. 设计体会 7.1 系统开发的体会 通过这次设计,我们把自己所学的理论知识运用于实践,受益非浅。对二维条码知识及 CVI 环境都 有进一步的了解。 对我们而言,本设计不仅是对大学所学过的知识的总结和考察,而且更是一个扩大自 己知识面,锻炼动手能力的机会,经过这次的设计,使我们在理论和实践方面都有了很大的提高。 7.2 对本门课程的改进意见或建议 希望老师能早点结束理论课,早点让我们实践。实验中的有好几个部分重复了,能否简化为同一个。 这门课是门好课。 参考文献及资料 1. 邓继忠、张泰岭.数字图像处理技术.广东科技出版社.2005 年 2. 陈丹晖、刘红.条码技术与应用.化学工业出版社,2005 年 3. 邓继忠.图像处理实验指导 4. QR Code_编码解码标准5. 二维码基础及应用―QR 码进阶49 二维条码的识别方法 2页 免费 条码的基础知识 51页 免费如要投诉违规内容,请到...让大家对二维条码有 了更直观的认知。此次专题以此为切入点展望二维条码的更广泛...二维条形码手机识别系统的设计与实现2_党团建设_党团工作_应用文书。密级: 保密...峪 3 刀 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和...二维条码作为一种全新的自动识别和信息载体技术, 其经济性 和可靠性正在被越来越多的人所了解和认知。 二维条码及其主要特点 二维条码 (2-dimensional bar code) ...二维条码作为一种全 新的自动识别和信息载体技术,其经济性和可靠性正被越来越多 的人们所了解和认知。因此,我们要进一步研究二维条形码扫描 仪扫描二维码。 2.1....用户认知使用习惯得到有效提高,二维码的应用被更多的人喜爱并使用。 二维条码的是...二维条形码的识读设备对于二维条形码的识读会有一些限制,但是均能识别一 维...在二 维条码标准化研究方面,国际自动识别制造商协会(AIM)、美国标准化协 会(...但是,仅仅知道这些还是 不够的,要真正知道二维条码的适用之处,不仅要认识二维...肉与肉制品二维条码识别追溯技术要求 1、 范围 本标准规定了肉与肉制品二维条码识别追溯的术语和定义、 原则和 目标、系统功能、追溯信息等的要求。 本标准适用于...二维条码质量监测的原理和方法_物理_自然科学_专业资料。二维条码质量监测的原理和方法一,概述条码是便于机器识别的图形符号,可分为一维条码和二维条码。在超市,图书...主题词: 主题词:条码技术、二维条码、手机二维码、图书二维码 一、条码技术 条码技术是在计算机技术和信息技术基础上发展起来的一门集编码、印刷、 识别、数据采集和...2、实训任务 ① 了解和认识常用的一维条码、二维条码; ② 熟悉商品条码和 EAN?UCC 系统的主要内容; ③ 了解条码的识读、符号的生成和检测设备的原理与系统应用... All rights reserved Powered by copyright ©right 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 论文标点符号格式 的文章

 

随机推荐