QRCode识别实验报告.docx
- 文档编号:29266096
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:34
- 大小:509.56KB
QRCode识别实验报告.docx
《QRCode识别实验报告.docx》由会员分享,可在线阅读,更多相关《QRCode识别实验报告.docx(34页珍藏版)》请在冰豆网上搜索。
QRCode识别实验报告
课程大作业实验报告
二维条码(QRCode)的认识和识别
课程名称:
数字图像处理
组长:
舒明学号:
200730540116年级专业班级:
07通信1班
成员二:
丘晖学号:
200730590123年级专业班级:
07通信1班
成员三:
张旋学号:
200730590131年级专业班级:
07通信1班
指导教师邓继忠
报告提交日期2010年5月31日
项目答辩日期
2010年6月1日
摘要
二维条码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的
黑白相间的图形记录数据符号信息的在代码编制上巧妙地利用构成计算机内部
逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表
示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处
理。
本实验研究对象是二维码之一QRcode,完成对其的定位,实现统计模块数、
获取版本号、标志图像的功能。
关键词:
二维码特点QR码定位模块数版本号标志图像实现图
I
ABSTRACT
Two-dimensionalbarcodeisaspecificgeometryaccordingtocertainrulesintheplane
(two-dimensionaldirection)distributionofblackandwhitegraphicrecordoftheinformationdata
symbolsinthecodeonthecleveruseofthepreparationoftheinternallogicofthe
computer-basedcomposition"0""1"bitstreamoftheconcept,usingthebinarynumber
correspondswiththegeometricshapetorepresentthetextvalueofinformation,throughtheimage
inputdeviceortheopticalscanningdeviceinordertoachieveinformationliteracyautomatically
processedautomatically.
Theexperimentalstudyisoneofthetwo-dimensionalcodeQRcode,tocompletetheir
positioning,toachievestatisticalmodulenumber,toobtaintheversionnumber,logoimage
features.
Keys:
Two-dimensionalcodeQRCodeLocateModuleNumberVersion
numberLogoimageImplementationplan
II
1.项目要求.................................................................1
2.项目原理说明.............................................................1
2.1二维条码与一维条码..................................................................................1
2.2二维条码的分类.........................................................................................1
2.3了解QRcode码......................................................................................2
2.4编码.............................................................................................................6
3.系统分析...............................................................7
3.1系统的主要功能分析...............................................................................7
3.2系统的关键问题及解决方法......................................................................7
4.系统设计.................................................................8
4.1程序流程图及说明.....................................................................................8
4.2程序主要模块介绍...................................................................................13
5实验结果与分析..........................................................14
5.1实验结果...................................................................................................14
5.2项目的创新之处.......................................................................................16
5.3存在问题及改进设想................................................................................16
6.心得体会................................................................16
III
1.项目要求
1)自行查找资料,了解二维条形码(QRCode)的编码原理;
2)从网上或图书馆搜集一些而为条形码的样本图像,挑选一些简单的(内含较
少汉字信息)样本用于识,样本不少于10个;
3)编写识别二维条码的程序;
4)调试与验证程序。
2.项目原理说明
2.1二维条码与一维条码
二维条码和一维条码都是信息表示、携带和识读的手段,但是一维条码是对
“物品”的标识,二维条码则是对“物品”的描述。
二维条码除了左右(条宽)的粗细及黑白线条有意义外,上下的条高也有意
义,因此与一维条码相比,二维条码可存放的信息量较大。
二维条码具有信息量大、安全性高、读取率高、纠错能力强等特点。
2.2二维条码的分类
二维条码可以分为堆叠式/行排式二维条码和矩阵式二维条码。
堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成;矩阵式
二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1”,
用“空”表示二进制“0”,由“点”和“空”的排列组成代码。
2.2.1堆叠式/行排式二维条码
行排式二维条码(又称:
堆积式二维条码或层排式二维条码),其编码原理是
建立在一维条码基础之上,按需要堆积成二行或多行。
它在编码设计、校验原理、识读方式等方面继承了一维条码的一些特点,识
1
读设备与条码印刷与一维条码技术兼容。
但由于行数的增加,需要对行进行判定、
其译码算法与软件也不完全相同于一维条码。
有代表性的行排式二维条码有CODE49、CODE16K、PDF417等。
2.2.2矩阵式二维码
短阵式二维条码(又称棋盘式二维条码)它是在一个矩形空间通过黑、白像
素在矩阵中的不同分布进行编码。
在矩阵相应元素位置上,用点(方点、圆点或
其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列
组合确定了矩阵式二维条码所代表的意义。
矩阵式二维条码是建立在计算机图像处理技术、组合编码原理等基础上的一
种新型图形符号自动识读处理码制。
具有代表性的矩阵式二维条码有:
CodeOne、MaxiCode、QRCode、DataMatrix
等。
2.3了解QRcode码
2.3.1QRcode的主要特点
(1)超高速识读:
从QRCode码的英文名称QuickResponseCode可以看出,超高速识读特点
是QRCode码区别于四一七条码、DataMatrix等二维码的主要特性。
由于在用
CCD识读QRCode码时,整个QRCode码符号中信息的读取是通过QRCode码符
号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短,它具有
超高速识读特点。
用CCD二维条码识读设备,每秒可识读30个含有100个字符的QRCode码
符号;对于含有相同数据信息的四一七条码符号,每秒仅能识读3个符号;对于
DataMartix矩阵码,每秒仅能识读2~3个符号。
(2)全方位识读:
QRCode码具有全方位(360°\u65289X识读特点,这是QRCode码优于行排式二维
条码如四一七条码的另一主要特点,由于四一七条码是将一维条码符号在行排高
度上的截短来实现的,因此,它很难实现全方位识读,其识读方位角仅为±10°
(3)能够有效地表示中国汉字、日本汉字:
2
由于其特定的数据压缩模式表示中国汉字和日本汉字,它仅用13bit可表示
一个汉字,而四一七条码、DataMartix等二维码没有特定的汉字表示模式,因
此仅用字节表示模式来表示汉字,在用字节模式表示汉字时,需用16bit(二个
字节)表示一个汉字,因此比其它的二维条码表示汉字的效率提高了20%。
2.3.2QRcode的符号结构
每个QRcode码符号由名义上的正方形模块构成,组成一个正方形阵列,它
由编码区域和包括寻像图像、分隔符、定位图像和校正图像在内的功能图像完成。
功能图像不能用于数据编码。
符号的四周由空白区包围。
如图1所示:
图1QRCode的图形结构
2.3.3符号版本和规格
共40种规格,分别为版本1、版本2„„版本40。
版本1为21*21模块,
版本2为25*25模块,每一版本比前一个版本每边多4个模块,以此类推,模块
为177*177模块。
如图2、图3、图4所示:
3
图2版本1的结构
图3版本2的结构
图4版本7的结构
4
2.3.4寻像图形
QRCode图像具有三个位置探测图形,分别位于条码的左上、左下角。
位置
探测图形如下图所示,形特征是黑白条。
比例为:
黑∶白∶黑∶白∶黑=1∶1∶3∶
1。
由于位置探测图形具有特殊的比例,同时在掩模作用下,在QRCode条码的
其他位置不可能出现这样比例的图形,所以可以通过找到三个位置探测图形来精
确定位条码,如图5所示:
图5位置探测图形的结构
2.3.5定位图形
水平和垂直定位图分别为一个模块宽的一行和一列,由深色浅色模块交替组
成,其开始和结束都是深色模块。
水平定位图形位于上部的两个位置探测图形之
间,符号的第六行。
垂直定位图形位于左侧的两个位置探测图形之间,符号的第
六列。
它们的作用是确定符号的密度和版本,提供决定模块坐标的基准位置。
见
图1。
2.3.6校正图形
每个校正图形可看做是三个重叠的同心正方形,由(5*5)个的深色模块,
(3*3)个的浅色模块以及位于中心的一个深色模块组成,校正图形的数量视符
号的版本数而定,在模式2的符号中,版本2以上(含版本2)的符号均有校正
图像。
见图1。
2.3.7编码区域
5
编码区域包括表示数据码字、纠错码字、版本信息和格式信息的符号字符。
见图1。
2.4编码
2.4.1数据分析
即分析输入的数据流,确定转换字符所使用的模式类型。
QRCode码包括几
种不同的模型以便高效的转换数据字符,必要时可以进行模块之间的转换,从数
字模式到日本汉字模式和中文汉字模式,每种模式所需要的位数逐渐增加,通过
模式的转换可以使数据的为流长度最短。
2.4.2数据编码
对于不同模式,按照各模式所定义规则,将数据字符转换为位流。
当需要进
行模式转换时,在新的模式转换起始位置加入模式指示符,在数据序列末端加入
终止符,由此产生的位流可以分为每8位一个码字,必要时加入填充字符以满足
不同版本所需要的数据码数。
2.4.3纠错
QRCode码采用相对纠错算法生成一系列纠错码字,添加数据码字序列之后,
使符号在遇到损坏时不至于丢失数据。
共有L、M、Q、H四个纠错等级,对应四
种纠错容量。
根据版本和纠错等级,将数据码字分为一块或多块,对每一块分别进行纠错
运算,每个版本,每个纠错等级的码字总数、纠错码字总数、纠错快的结构和数
量都有规定。
2.4.4掩
为了提高QRCode码阅读的可靠性,最好均匀的安排深色和浅色模块,且尽
可能避免位置探测图形出现在其他区域。
具体方法是:
依次将掩膜图形用于符号
的编码区域,按评价结果选择,是深色浅色模块比率最优,且不希望出现图形最
小化。
2.4.5格式和版本信息
格式信息为15位,其中5位数据位,其余10位,其余10位有BCH(15,5)
6
编码得到的纠错位。
版本信息18位,其中6位数据位,其余12位是由BCH(18,6)编码计算
出来的纠错位。
3.系统分析
3.1系统的主要功能分析
3.1.1QRCode的版本识别,并算块数
在对QRCode解码过程中,我们首先要找到QRCode的具体位置并确定它的
版本号和模块数,这就要找到三个作为确定条码位置的位置探测图形,根据位置
探测图形固有的7*7模块数的特点和探测图形与条码宽度的比较,可以计算出条
码的模块数,继而得出版本号。
3.1.2QRCode定位并标位置图像
寻找探测图形即为QRCode的定位,首先把左上角探测图形命名为方块1,
左下角探测图形命名为方块2,右上角探测图形命名为方块3,可以用扫描黑色
像素函数,逐行扫描和逐列扫描找出方块1、2、3的各边位置,找到探测位置图
形后就可以用矩形标记函数和填充函数将三个方块的位置标记并填充为像素值
是0的区域。
3.2系统的关键问题及解决方法
第一个关键问题是找到三个方块的各边界位置,解决的方法是:
用一个水平
方向的循环和垂直方向的循环分别从左到右和从上到下扫描确定每列和每行的
黑色像素点数,从左到右扫描每一列时,一旦出现黑色像素即可判定为方块1
和方块2的左边界,继续扫描直到当黑色像素消失,这时候可以判定为方块3
的右边界。
同理从上到下扫描每一行时候可以判定出方块1和方块3的上边界,方块2
的下边届;确定了方块1上边界和左边界的位置后,只扫描方块1的上边界那一
行,从方块1的左边界从左到右开始扫描,首次出现黑色像素为0的时候即可判
7
定为方块1和方块2的右边界,然后从方块3的右边界从右到左扫描,首次出现
黑色像素为0的时候即可判定为方块3的左边界,同理,根据单列扫描额度方法
可以判定出方块1和方块3的下边界和方块2的上边界,至此,三个位置探测图
形的四个边界都已经找到。
第二个关键问题是识别版本号和计算模块数,解决的方法是:
找到方块1
的左边界left1和右边界right1,找到方块3的右边界right3之后,则
right1-left1为方块1的宽度,right3-left1为QRCode的宽度,可用公式
7*(right3-left1)/(right1-left1)得出QRCode的模块数。
4.系统设计
4.1程序流程图及说明
假设我们将定位正方形的四条边的位置设为up1,down1,left1,right1。
如
图6所示:
图6变量的设定
以此类推,分别设定其他两个定位正方形的边长位置为up2,down2,left2,
8
right2;up3,down3,left3,right3。
为了得到他们的位置,我们可以采用行列扫描的方式,如图7所示:
图7扫描方式
下面,我们用框图形式介绍我们如何得到up1,down1,left1,right1。
见图8。
行扫描
列扫描
否
像素值为0
是
计数值加1
否
列尾
9
是
图8程序框图
通过这个程序框图我们便得到了每一列像素值为0(黑色点)的个数。
由于
图像是二值的,所以我们只要找到第一个计数值不为0的那一列就是left1的值,
同理,我们可以得到left2,以及right3。
同理,当我采用先行扫描,再列扫描的方式的话,就可以得到up1,up3,down2
的值。
在这6个值的基础上,我们就可以求出剩余的6个值。
具体代码如下:
//统计每列黑色像素的个数
for(x=0;x for(y=0;y { IPI_GetPixelValue(SourceImage,x,y,&pixval); if(pixval==0) { a[x]++; } } //找出1、2左边界和3右边界 for(x=0;x { if(a[x]==0&&a[x+1]>1) { left1=x+1; left2=x+1; break; } } for(x=width-1;x>0;x--) { if(a[x]==0&&a[x-1]>1) { right3=x-1; break; } } 10 //统计每行黑色像素的个数 for(y=0;y for(x=left1;x { IPI_GetPixelValue(SourceImage,x,y,&pixval); if(pixval==0) { b[y]++; } } //找出1、3上边界和2下边界 for(y=0;y { if(b[y]==0&&b[y+1]>1) { up1=y+1; up3=y+1; break; } } for(y=height-1;y>0;y--) { if(b[y]==0&&b[y-1]>1) { down2=y-1; break; } } //找出1、2右边界 for(x=left1;x { IPI_GetPixelValue(SourceImage,x,up1,&pixval); if(pixval>0) { right1=x-1; right2=x-1; break; } } //找出1、3下边界 for(y=up1;y { IPI_GetPixelValue(SourceImage,left1,y,&pixval); if(pixval>0) 11 } { } down1=y-1; down3=y-1; break; //找出3左边界 for(x=right3;x>0;x--) { IPI_GetPixelValue(SourceImage,x,up1,&pixval); if(pixval>0) { left3=x-1; break; } } //找出2上边界 for(y=down2;y>0;y--) { IPI_GetPixelValue(SourceImage,left1,y,&pixval); if(pixval>0) { up2=y-1; break; } } n=(right3-left1+1)/((right1-left1+1)/7);//计算模块数 version=(n-21)/4+1;//计算版本号 通过设定断点,再点击变量窗口,我们可以很清楚的看到3个定位正方形四 条边的具体位置。 见图9。 12 图9变量窗口 得到了定位正方形的位置,我们也就可以提取QRCode的编码图形区了。 4.2程序主要模块介绍 图10程序的主界面 程序的主界面如图10所示,我们程序包含的功能有3个: 打开QRCode图 形;获取版本号和模块数;标记图像获得编码图形区。 13 5实验结果与分析 5.1实验结果 程序运行情况如图11图12、图13所示: 图11打开QRCode图片 14 图12计算版本号 图13标记图形 15 5.2项目的创新之处
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QRCode 识别 实验 报告