南京航空航天大学课程设计题目二维码的生成及识别小组成员:何俊豪韩怀晓晋晓飞瞿诗华薛莉二〇一五年十一月第一章QR码简介QR码是由日本Denso公司与1994年制定出来的一种矩阵二维码符号,它除了具有信息容量大、可靠性高、可表示汉字及图像信息、保密性强等优点外,还具有超高速响应、全方位识别等特点。QR码符号是由正方形的细小模块构成,分为功能区和编码区。功能图形包括位置探测图形、分隔符、定位图形、校正图形、格式信息、版本信息等,编码区域包括数据编码块和纠错码图形。普通QR码基本图形及区域功能对照图如图1.1所示。图1.1QR码基本结构1.1QR码的密度标识图形位于两个“回”字标识符之间的黑白相间的条纹,用红色线标注的,这个区域可以用于确定QR码符号的像素方块的密度(即一个像素的大小),标识识别模块如图1.2所示。图1.2QR码密度标识图形1.2位置探测图形位置探测图形由三个重叠的同心正方形构成,如图1.3所示。通过探测位置探测图形可以迅速的从背景图像中判断出QR码符号的大致位置。图1.3QR码探测图形二维码定位就是找到二维码符号的位置探测图形,对有明显条码特征的区域进行定位,然后根据图形结构特征值对不同的条码符号进行进一步的处理。通过QR码的定位图形,可以得到左上角位置探测图形的边界点和左下角位置探测图形的边界点如图1.4(a)所示,因此可以采用鲁棒性较好的算法拟合条码左边框,然后通过直线拟合得到条码的上边框直线。在此基础上构建直角三角形,寻找出图形中心,如图1.4(b)所示,并可以得到第四个交点,如图1.4(c)所示。(a)确定左边界和上边界(b)确定探测图形中心(c)确定第四个交点图1.4条码图像初步定位流程1.3版本信息QR码符号共有40种规格,版本1的规格为21模块×21模块,版本2为25模块×25模块,以此类推,每一版本符号比前一版本每边增加4个模块,直到版本40,规格为177模块×177模块。QR码的版本信息图形在整个二维码图像中的位置如图1.5所示,QR码最高版本40可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。图1.5版本信息图形1.4纠错码QR码具有“纠错能力”,即使在使用过程中遇到污损、折叠等现象,也可以自动恢复数据。这一“纠错能力”具备四个级别,级别越高,纠错能力越高,但是数据量也会增加,编码尺寸也会变大。QR码各级别纠错码纠错能力如表1.1所示。表1.1纠错码级别纠错能力对照表QR码的纠错能力级别L约7%级别M约15%级别Q约25%级别H约30%第二章QR码编码规则介绍将输入的数据转变为一个位流,如果最开始的模式指示符不是默认的,其前面要用ECI标头,如果以默认的开始,位流的开头为第一个模式的指示符,如表2.1所示,该表定义了不同模式下的模式指示符。表2.2定义了不同模式和符号版本下的字符计数指示符的长度。表2.1模式指示符模式指示符ECI0111数字0001字母数字00108位字节0100日本汉字1000中国汉字1101结构链接0011FNCI0101(第一位置)1001(第二位置)终止符(信息结尾)0000表2.2字符计数指示符的位数版本数字模式字母数字模式8位字节模式中国汉字模式1~91098810~261211161027~40141316122.1数字模式编码实现将输入的数据从左至右每三位转化成一个10位的二进制数,剩余的一位或者两位数据分别转化成4位或7位二进制数。然后在转换后的二进制数据前加上模式指示符和字符计数指示符。例如输入数据:88899966,编码步骤如图2.1所示。输入数据:88899966888--1101111000999--111110011166--100001011011110001111100111100001000010000001000110111100011111001111000010转换为二进制连接序列添加模式指示符和字符计数指示符图2.1数字模式编码流程2.2字母模式编码实现字母模式编码规则与数字模式编码规则类似,不过首先要根据对应的字母模式编码转换表2.3将字符转化为相应的数值,再将每两个字母分为一组,前面字符的值乘以与第二个字符的值相加,所得的结果转换为位二进制数。表2.3字母模式编码转换表字符值字符值字符值字符值字符值字符值字符值字符值0066C12I18O24U30SP36.421177D13J19P25V31$37/432288E14K20Q26W32%38:443399F15L21R27X33*3944A10G16M22S28Y34+4055B11H17N23T29Z35-412.3中国汉字模式编码实现GB2312标准规定的汉字字符为双字节表示。QR的汉字编码模式将16位的转换为13位二进制字符序列,提高了编码效率。编码具体步骤:(1)将第一字节值减去0xA6;(2)将(1)的结果乘以0x60;(3)将第二字节值减去0xA1;(4)将(2)的值加上(3)的值;(5)将结果转化成13位二进制。2.4纠错编码按需要将码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了。纠错码主要通过里德-所罗门纠错算法算出来,例如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。就是说二维码区域中大约1/3的码字时冗余的。对于这224个纠错码字,它能够纠正112个替代错误(如黑白颠倒)或者224个据读错误(无法读到或者无法译码)。在规格确定的条件下,将原先产生的序列按次序放如分块中,按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块按顺序构成一个序列,添加到原先的数据码字序列后面,如图2.2所示。图2.2二维码矩阵构造2.5Zxing简介Zxing是一个开放源码的,用Java实现的多种格式一维或者二维的条码图像处理库,它包含了联系到其他语言的端口,通常使用Zxing生成相应的二维码码以及解码。生成二维码的编码技术是指基于给定内容生成二维条码图片,Zxing可以对生成的二维码的图片格式、各项参数以及二维码类型进行设置,生成的图片包含给定的内容,当使用识别设备进行扫描时,能够读出给定的内容。使用Zxing进行编码的步骤主要如下:首先,将所需的Zxing类库中的包导入工程;其次,对需要生成二维条码的给定内容进行编码方式处理,防止在显示中文时出现乱码问题,并指定所生成二维条码图片的路径、名称和文件格式;然后,找到Zxing中二维码QR码所对应的编码类QR-CodeWriter,调用encode方法生成给定内容对应的比特矩阵;最后将比特矩阵转化为制定的图片格式。第三章处理流程及结果演示3.1处理流程二维码处理流程如图3.1所示,若已有二维码图像,直接读取该图像,在此基础上完成解码识别等过程,用户也可按照自己的意愿在文本框里输入汉字或数值等内容,调用Zxing,生成对应的二维码图像。后对图像进行灰度化、加噪平滑、二值化、旋转校正、畸变校正等预处理,并在此基础上再次调用Zxing完成解码识别的过程。开始结束读取已有QR图像自动生成QR图像预处理解码识别灰度化加噪平滑二值化旋转校正畸变校正调用Zxing界面设计调用Zxing图3.1二维码生成及处理流程图3.2界面设计本实验设计界面如图3.2所示,界面可实现功能:打开一幅二维码图像,对该图像进行灰度化、加噪平滑、二值化、旋转校正、畸变校正等预处理,并在这些过程的基础上完成对二维码图像的解码过程。还可以对用户自身想要的文字或者网址进行二维码图形的制作,并完成解码显示。图3.2界面设计3.3预处理及其结果演示通过读取图像打开待处理原始二维码图像,并显示该二维码图像如图3.3所示。根据待识别图像各自特点施以不同的预处理手段。图3.3原始QR图像3.3.1灰度化处理通常情况下,使用数码相机等摄像设备获取的QR码是彩色的,和灰度图像相比,彩色图像含有的信息量较大,所占存储空间更多,将彩色图像转化成灰度图像是为了减少存储空间,降低运算量。灰度化处理后图像如图3.4所示。图3.4灰度化处理图像3.3.2平滑处理对图像加入椒盐噪声,然后采用中值滤波对图像进行平滑滤波处理,加噪及平滑处理后图像分别如图3.5(a)和(b)所示。(a)加噪图像(b)平滑图像图3.5加噪平滑处理3.3.3二值化处理标准的二维码图像是由黑白两种小的模块组合而成的,灰度化之后需对图像进行二值化处理,以便数据的压缩、特征的突出以及图形的识别。图像二值化的方法是通过预先设定的一个阈值,将灰度图像分为小于这个阈值和大于这个阈值的两部分,通过阈值的选取可以将图像的背景区和条码符号分开,本文采用自适应阈值法对图像进行二值化处理。自适应阈值法的基本原理是采用某一假定的灰度值t将图像的灰度分为两组,当两组的类间方差最大时,此灰度值就是二值化的最佳阈值,二值化处理结果如图3.6所示。图3.6二值化处理3.3.4旋转校正在二维码图像采集的过程之中,由于拍摄角度的问题,会导致图像产生一定的旋转畸变,本文采取霍夫变换的方法对此情况进行校正,旋转校正前后的图像如图3.7所示。QR二维码平滑处理图3.7原图(左)以及旋转校正后的图像(右)在旋转校正之前,需要对图像做边缘检测。本实验使用的边缘检测算子为“canny”算子,“canny”算子可寻找图像梯度的局部最大值,且不易受噪声干扰,能够很好地检测出弱边缘,边缘检测结果如图3.8所示。canny边界图像图3.8边缘检测采取霍夫变换的方法对图像进行旋转校正,主要是在图像空间和参数空间建立起一个“线-点”之间的对应关系,每条曲线表示一个点,Hough变换统计所有变化的峰值,并标记,得到4个顶点,如图3.9所示。-80-60-40-20020406080-300-200-1000100200300图3.9Hough空间显示图使用Hough变换检测线段,标出线段以及线段的起始和端点,得到每条线段的斜率,并计算倾斜角度值θ,最后将图像中的线条与点显示出来,如图3.10所示。直线标识图像图3.10直线标识图像图像的坐标原点默认为平面的左上角,根据得到的角度值θ,将图像按照θ角度进行旋转,便能够完成对图像的旋转校正。3.3.5畸变矫正可能会由于角度的问题,导致图像产生几何形变,使原来的QR码呈现不规则的四边形,从而影响二维码信息的正确提取。使用双线性插值法将不规则则的四边形区域通过一定的映射关系变为QR码标准正方形,从而方便了对二维码信息的提取。畸变校正前后如图3.10所示。图3.10原图(左)以及畸变校正后的图像(右)3.4QR码解码识别解码技术是指从二维码中读取出所包含的信息,本实验直接调用Zxing完成解码识别的过程,包括以下几个步骤:首先,导入Zxing类库中的包;其次,指定二维条码图片的路径;然后,找到Zxing中二维条码QR码所对应的解码类QR-CodeReader,调用其decode方法生成二维条码所包含信息对应的对象;最后,读取出对象中的信息。3.5结果展示本实验对不同的QR二维码图像进行解码识别,证明,对于不同的二维码图片,本文的处理效果具有普遍适应性,如图3.11,3.12,3.13,3.14,3.15所示。图3.11含网址的普通QR码解码显示图3.12模糊QR码图像解码显示图3.13带图片的QR码解码显示图3.14旋转QR码图像解码显示图3.15畸变QR码图像解码显示本实验也可以对用户所需内容进行二维码图像生成及解码显示,如图3.16所示。图3.16自制二维码并解码显示