著录项信息
专利名称 | 一种二维码的编码和解码方法及其印刷物 |
申请号 | CN201410042801.4 | 申请日期 | 2014-01-28 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-11-12 | 公开/公告号 | CN104143109A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06K19/06 | IPC分类号 | G;0;6;K;1;9;/;0;6;;;G;0;6;K;7;/;1;0查看分类表>
|
申请人 | 深圳市雁联计算系统有限公司 | 申请人地址 | 广东省深圳市福田区车公庙泰然八路云松大厦16楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 深圳市雁联计算系统有限公司 | 当前权利人 | 深圳市雁联计算系统有限公司 |
发明人 | 赵明刚 |
代理机构 | 深圳市顺天达专利商标代理有限公司 | 代理人 | 郭伟刚 |
摘要
本发明公开了一种二维码的编码和解码方法及其印刷物,编码方法包括:确定输入数据的编码模式;将输入数据转换为数据码字流;确定纠错等级、行数M和列数N;生成纠错码字并添加到数据码字流之后;生成二维码的水平和竖直分割线,通过水平和竖直分割线将二维码外边框围成的区域分割为编码区块;将添加了纠错码字的数据码字添加到各编码区块中。解码方法包括:扫描二维码并生成二值图像;生成边界图像;生成边框图像;分别编码区块的顶点坐标;获得数据码字流;纠错解码数据码字流;还原数据。印刷物上印刷有所述二维码。在实现高编码密度的同时,还可以通过调整二维码的行数和列数来调整二维码的长宽比,从而适应不同的实际应用的需求。
一种二维码的编码和解码方法及其印刷物\n技术领域\n[0001] 本发明涉及二维码技术,更具体地说,涉及一种二维码的编码和解码方法及其印刷物。\n背景技术\n[0002] 一维码是一种廉价、简单、准确的数字信息传递方式,其通过在水平方向排列的条和空来表达信息,在竖直方向不表达信息,其容量十分有限。相比之下,二维码在竖直方向也能表达信息,容量大大增加,并且通过应用纠错算法,二维码的可靠性也大大增强。\n[0003] 常规的二维码主要有PDF417、QR、DataStrip和Data matrix等,他们可以分为两类:层排式二维码和矩阵式二维码。其中,层排式二维码可以看作是由多行一维码堆积而成,常见的层排式二维码主要有美国的PDF417码。PDF417码为长方形,其缺点在于其采用了一个基于929个码字(4个黑白间隔)的编码方式,每个条码字符只能代表9.2位数据,这大大降低了单个PDF417码的数据量。\n[0004] 矩阵式二维条码是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码,其通过在矩阵相应元素位置上用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。常见的矩阵式二维码主要有日本的QR码、中国的网格矩阵码(GM码)和紧密矩阵码(CM码),QR码和GM码为正方形,CM码为长方形。与层排式二维码相比,矩阵式二维码在同等面积下可编码更多数据,即具有更高的编码密度。\n[0005] 在二维码的实际应用中,预留用于印制二维码的区域可能是长方形,例如支票右下角区域,若采用层排式二维码则无法获得高编码密度,若采用正方形的矩阵式二维码,将大大浪费编码面积,从而导致编码容量下降。虽然CM码也是长方形的,但它在高度方向上没有定位功能,在实际应用中,由于打印或扫描二维码区域时难以保证100%均匀性,当CM码过高时,识读将会非常困难,甚至完全无法识读。\n发明内容\n[0006] 本发明针对现有的二维码由于其长宽比不可调而无法满足实际应用需求的缺陷,提供一种二维码的编码和解码方法及其印刷物,生成的二维码具有高编码密度,并且可以调整二维码的长宽比。\n[0007] 本发明解决其技术问题采用的技术方案是:提供一种二维码的编码方法,包括以下步骤:\n[0008] S1、分析输入数据的类型,确定各类型的输入数据的编码模式;\n[0009] S2、将输入数据按照确定的编码模式对应的编码规则转换为位流,并将编码产生的位流转换为数据码字流;\n[0010] S3、确定二维码的纠错等级、行数M和列数N,所述纠错等级为纠错码字占总码字的比例,M和N均为正整数;\n[0011] S4、生成纠错码字,并将生成的纠错码字添加到数据码字流之后;\n[0012] S5、根据二维码的行数M和列数N分别生成二维码的水平分割线和竖直分割线,通过水平分割线和竖直分割线将二维码的外边框围成的区域分割为M行、N列的编码区块,每个编码区块包括多个单元模块,将格式信息编码于编码区块的部分单元模块中,所述格式信息包括纠错等级以及该编码区块在二维码网格图形中的位置信息;\n[0013] S6、将添加了纠错码字的数据码字流中的码字按顺序分别添加到各编码区块的剩余单元模块中。\n[0014] 优选地,步骤S2包括以下子步骤:\n[0015] S21、将输入数据按照类型分段;\n[0016] S22、分别将各段输入数据按照该类型的编码模式对应的编码规则转换为位流,每段位流包括编码模式指示符、数据长度指示符和数据位流;\n[0017] S23、将编码产生的位流转换为数据码字流。\n[0018] 优选地,输入数据的类型包括数字字符、字母字符、汉字字符和任意二进制数据;\n编码模式包括数字模式、数字字母混合模式、小写字母模式、大写字母模式、汉字模式和字节模式。\n[0019] 优选地,步骤S4包括以下子步骤:\n[0020] S41、若纠错码字的个数与数据码字流中的码字的个数之和大于255,则将数据码字分割成多个纠错块,并确定每个纠错块添加纠错码字的数量;\n[0021] S42、生成纠错码字,并按照各纠错块添加纠错码字的数量将生成的纠错码字分别添加到对应的纠错块的数据码字之后。\n[0022] 优选地,步骤S6包括以下子步骤:\n[0023] S61、从第一纠错块至最后一个纠错块中按照码字的排列顺序将排列序号相同的码字逐批提取出来形成新的码字流;\n[0024] S62、将新的码字流中的码字按顺序分别添加到各编码区块的剩余单元模块中。\n[0025] 优选地,位于所述编码区块四个顶角的单元模块用于编码格式信息。\n[0026] 提供一种二维码的解码方法,用于上述任一项所述的编码方法生成的二维码进行解码,所述解码方法包括以下步骤:\n[0027] S1、扫描二维码,以获取二维码的灰度图像,并将所述灰度图像转化为二值图像;\n[0028] S2、根据所述二值图像生成边界图像,所述边界图像由所述二值图像中自身为黑色、并且周围四个像素点至少有一个为白色的像素点组成;\n[0029] S3、根据所述边界图像生成边框图像,所述边框图像由二维码的外边框、水平分割线和竖直分割线组成;\n[0030] S4、分别计算由水平分割线和竖直分割线将二维码外边框围成的区域分割成的多个编码区块的顶点坐标;\n[0031] S5、根据各编码区块的顶点坐标计算各编码区块中每个单元模块的坐标,并读取所述二值图像中对应坐标下像素点的颜色,根据黑色像素点对应二进制1,白色像素点对应二进制0的规则获得数据码字流;\n[0032] S6、对获得的数据码字流进行纠错解码;\n[0033] S7、将纠错后的数据码字流中的码字组装成二进制位流,根据编码规则将所述二进制位流还原为原始数据。\n[0034] 优选地,步骤S3包括以下子步骤:\n[0035] S31、去除所述边界图像中的曲线,留下直线,从而生成所述边框图像。\n[0036] 优选地,步骤S5中,通过插值计算法,根据各编码区块的顶点坐标计算各编码区块中每个单元模块的坐标。\n[0037] 提供一种二维码的印刷物,所述印刷物上印刷的二维码由上述任一项所述的编码方法生成。\n[0038] 本发明的二维码的编码和解码方法及其印刷物具有以下有益效果:在实现高编码密度的同时,还可以通过调整二维码的行数和列数来调整二维码的长宽比,从而适应不同的实际应用的需求。\n附图说明\n[0039] 图1为本发明的二维码的编码方法第一实施例的流程图;\n[0040] 图2为本发明的二维码的框架结构示意图;\n[0041] 图3为纠错码生成电路的电路图;\n[0042] 图4为各编码区块添加码字的顺序示意图;\n[0043] 图5为编码区块中码字的添加顺序示意图;\n[0044] 图6为本发明的二维码的解码方法第一实施例的流程图;\n[0045] 图7为本发明的二维码的灰度图;\n[0046] 图8为本发明的二维码的二值化图像;\n[0047] 图9为本发明的二维码的边界图像;\n[0048] 图10为本发明的二维码的边框图。\n具体实施方式\n[0049] 以下结合附图和实施例对本发明做进一步的解释说明。\n[0050] 图1为本发明的二维码的编码方法第一实施例的流程图,参见图1和图2,在本实施例中,二维码的编码方法包括以下步骤:\n[0051] S1、分析输入数据的类型,确定输入数据的编码模式;\n[0052] S2、将输入数据按照确定的编码模式对应的编码规则转换为位流,并将编码产生的位流转换为数据码字流;\n[0053] S3、确定二维码的纠错等级、行数M和列数N,所述纠错等级为纠错码字占总码字的比例,M和N均为正整数;\n[0054] S4、生成纠错码字,并将生成的纠错码字添加到数据码字流之后;\n[0055] S5、根据二维码的行数M和列数N分别生成二维码的水平分割线210和竖直分割线\n220,通过水平分割线210和竖直分割线220将二维码的外边框230分割为M行、N列的编码区块240,每个编码区块240包括多个单元模块,将格式信息编码于编码区块240的部分单元模块中,所述格式信息包括纠错等级以及该编码区块在二维码网格图形中的位置信息;\n[0056] S6、将添加了纠错码字的数据码字流中的码字按顺序分别添加到各编码区块的剩余单元模块中。\n[0057] 在本实施例中,输入数据的类型包括数字字符、字母字符、汉字字符和任意二进制数据,编码模式包括数字模式、数字字母混合模式、小写字母模式、大写字母模式、汉字模式和字节模式。在步骤S1中,对输入数据进行分析,确定输入数据的类型,并确定各类输入数据的编码模式。例如,输入数据为“123”,其类型为数字字符,数字字符采用数字模式进行编码。例如,输入数据为“密码123”,其类型包括汉字字符和数字字符,汉字字符采用汉字模式编码,数字字符采用数字模式编码。例如,输入数据为“123A”,其类型包括数字字符和字母字符,可以选择数字字符用数字模式编码,字母字符具体为大写字母字符则采用大写字母模式编码,另外,也可以将“123A”的类型看作是数字字母混合的类型,整体采用数字字母混合模式编码。当出现根据输入数据的类型确定的编码模式不唯一时,分别计算采用各编码模式编码该(段)输入数据所获得的位流的位数,选择产生位流的位数少的编码模式。即混合模式编码时,模式切换需要一定开销,不同的混合情况容量不同,选择开销少的编码模式。另外,编码时应尽量将相同类型字段放在一起编码,可减少开销。混合数据可全部按字节模式编码,即混合数据可以按字节模式计算容量。\n[0058] 本实施例的步骤S2包括以下子步骤:S21、将输入数据按照类型分段;S22、分别将各段输入数据按照该类型的编码模式对应的编码规则转换为位流,每段位流包括编码模式指示符、数据长度指示符和数据位流;S23、将编码产生的位流按照每X位对应一个码字的方式转换为数据码字流,X为正整数,当最后就一个码字不足X位时用0填充,例如可以取X为7、\n8、9等,由于二进制第一码字对应有8位,因此优选X为8。\n[0059] 其中,编码模式与模式指示符的对应关系如表1所示,该对应关系仅用于示例,不用于限制本发明。\n[0060] 表1 模式指示符\n[0061]\n[0062] 编码数据由3位的终止符(000)BIN结束,当数据位流后所剩余的容量不足3位时,终止符可被截短。每种编码模式可定义若干切换符,以编码夹杂在该类型数据中的少量其他类型数据,详见各数据模式的编码规则。模式切换符必须以(111)BIN开头,以避免与其他模式指示符冲突。\n[0063] 输入数据通常由多种数据类型组成,将输入数据按类型进行分段,对各段数据按照该类型的编码模式对应的编码规则进行编码,生成的每段数据的编码结构如表2所示,每段数据的位流由以下3部分组成:3位的模式指示符;8位的数据长度指示符,用于指示该段数据的长度;以及数据位流。\n[0064] 表2 数据编码结构\n[0065]\n[0066] 当一段数据长度超过255时,数据长度指示符无法指示,需将该段数据拆分为多段,每段长度不超过255。各编码模式中通过模式切换符进行编码的数据,不记入数据长度,详见各数据模式的编码规则。\n[0067] 以下将详细介绍各数据模式的编码规则:\n[0068] 1、数字模式\n[0069] 以连续的3个数字为一组将数据分组,每3个数字采用10位二进制进行编码,遇到非数字字符则将该字符包含到分组中。\n[0070] 编码只有数字字符的组时,按公式(1)计算该组的10位编码:\n[0071] N1=100D1+10D2+D3 ………………………………(1)\n[0072] 式中:N1为数字组的10位编码;D1为数字组的第一个数字;D2为数字组的第二个数字;D3为数字组的第三个数字。\n[0073] 当最后一组只有2个数字时,按公式(2)计算该组的7位编码:\n[0074] N2=10D1+D2 ………………………………(2)[0075] 式中:N2为数字组的7位编码;D1为数字组的第一个数字;D2为数字组的第二个数字;当最后一组只有1个数字时,直接输出该数字的4位编码。\n[0076] 当分组中包含非数字字符时,非数字字符出现在分组中的位置有三种情况:第1位置——在第1个数字之前;第2位置——在第1个数字和第2个数字之间;第3位置——在第2个数字和第3个数字之间。\n[0077] 在第3个数字之后的非数字字符,应划分为下一分组的第1位置。在最后一组数字之后的非数字字符,也可按下一分组的第1位置编码,即该分组没有数字字符,只有非数字字符。\n[0078] 同一个非数字字符处在不同的位置有不同的编码,非数字字符在不同位置时的赋码见表3:\n[0079] 表3 非数字字符赋码表\n[0080]\n[0081] 编码含有非数字字符的分组时,先输出非数字字符的二进制编码,然后再计算并输出数字组的二进制编码。所有非数字字符不记入数据长度。\n[0082] 示例:\n[0083] 输入数据:“1^^2*3.4A567a”\n[0084] 模式指示符:001\n[0085] 数据长度指示符:00000111\n[0086] 数据位流:\n[0087]\n[0088] 编码结果:001 00000111 1111101100 1111101100 1111111100 \n1010100001111011 1111101110 1111110101 00001 0111001000 1111111000 000010111。\n[0089] 2、小写字母模式\n[0090] 小写字母模式采用5位二进制进行编码,按顺序从a到z递增编码,字母“a”的编码为(00000)BIN,字母z的编码为(11001)BIN。空格编码为(11010)BIN,”^”编码为(11011)BIN。(11100)BIN至(11111)BIN用于编码夹杂在小写字母中的少量其他类型数据,见表4。\n[0091] 表4 小写字母模式赋码表\n[0092]\n字符 编码十进制值及二进制位数\n[0093]\n字母a~z(ASCII97~122) 0~25(5位)\n空格(ASCII32) 26(5位)\n^(ASCII94) 27(5位)\n点号(ASCII46) 28(5位)+0(2位)\n逗号(ASCII44) 28(5位)+1(2位)\n单引号(ASCII39) 28(5位)+2(2位)\n双引号(ASCII34) 28(5位)+3(2位)\nASCII64 29(5位)+0(5位)\n字母A~Z(ASCII65~90) 29(5位)+(1~26)(5位)\nASCII91~93 29(5位)+(27~29)(5位)\nASCII126 29(5位)+30(5位)\nASCII95 29(5位)+31(5位)\nASCII0~31 30(5位)+0~31(6位)\nASCII96 30(5位)+32(6位)\nASCII33 30(5位)+33(6位)\nASCII123 30(5位)+34(6位)\nASCII35~38 30(5位)+35~38(6位)\nASCII124 30(5位)+39(6位)\nASCII40~43 30(5位)+40~43(6位)\nASCII125 30(5位)+44(6位)\nASCII45 30(5位)+45(6位)\nASCII127 30(5位)+46(6位)\nASCII47~63 30(5位)+47~63(6位)\nASCII128~255 31(5位)+0~127(7位)\n[0094] 编码值在0~27之间的字符,即小写字母a~z,空格(ASCII32),^(ASCII94)记入数据长度,其他字符不记入数据长度。\n[0095] 示例:\n[0096] 输入数据:ab^cd,ef\n[0097] 模式指示符:010\n[0098] 数据长度指示符:00000111\n[0099] 数据位流:\n[0100]\n[0101]\n[0102] 3、大写字母模式\n[0103] 大写字母模式采用5位二进制进行编码,按顺序从A到Z递增编码,字母“A”的编码为(00000)BIN,字母Z的编码为(11001)BIN。空格编码为(11010)BIN,”^”编码为(11011)BIN。(11100)BIN至(11111)BIN用于编码夹杂在大写字母中的少量其他类型数据,见表5。\n[0104] 表5大写字母模式赋码表\n[0105]\n字符 编码十进制值及二进制位数\n字母A~Z(ASCII65~90) 0~25(5位)\n空格(ASCII32) 26(5位)\n^(ASCII94) 27(5位)\n点号(ASCII46) 28(5位)+0(2位)\n逗号(ASCII44) 28(5位)+1(2位)\n单引号(ASCII39) 28(5位)+2(2位)\n双引号(ASCII34) 28(5位)+3(2位)\nASCII64 29(5位)+0(5位)\n字母a~z(ASCII97~122) 29(5位)+(1~26)(5位)\nASCII91~93 29(5位)+(27~29)(5位)\nASCII126 29(5位)+30(5位)\nASCII95 29(5位)+31(5位)\nASCII0~31 30(5位)+0~31(6位)\nASCII96 30(5位)+32(6位)\nASCII33 30(5位)+33(6位)\nASCII123 30(5位)+34(6位)\nASCII35~38 30(5位)+35~38(6位)\nASCII124 30(5位)+39(6位)\nASCII40~43 30(5位)+40~43(6位)\nASCII125 30(5位)+44(6位)\nASCII45 30(5位)+45(6位)\nASCII127 30(5位)+46(6位)\nASCII47~63 30(5位)+47~63(6位)\nASCII128~255 31(5位)+0~127(7位)\n[0106] 编码值在0~27之间的字符,即大写字母A~Z,空格(ASCII32),^(ASCII94)记入数据长度,其他字符不记入数据长度。\n[0107] 示例:\n[0108] 输入数据:AB^CD,EF\n[0109] 模式指示符:011\n[0110] 数据长度指示符:00000111\n[0111] 数据位流:\n[0112]\n[0113] 4、数字字母混合模式\n[0114] 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,共62个字符。每个字符用6位二进制编码,按顺序从数字、小写英文字母、大写英文字母递增编码,数字0的编码为(000000)BIN。(111110)BIN和(111111)BIN用于编码夹杂在数字字母混合中的少量其他类型数据,见表6。\n[0115] 表6 数字字母混合模式赋码表\n[0116]\n[0117] 编码值在0~61之间的字符,即数字0~9,小写字母a~z,大写字母A~Z记入数据长度,其他字符不记入数据长度。\n[0118] 示例:\n[0119] 输入数据:0^A#b\n[0120] 模式指示符:100\n[0121] 数据长度指示符:00000011\n[0122] 数据位流:\n[0123]\n[0124] 5、汉字模式\n[0125] GB18030双字节1区及双字节2区的字符(即第一字节值在(A1)HEX至(A9)HEX或(B0)HEX至(F7)HEX之间、且第二字节值在(A0)HEX至(FF)HEX之间的部分)可用汉字模式进行编码。当一个双字节汉字第一字节值在(A1)HEX至(A9)HEX之间、且第二字节值在(A0)HEX至(FF)HEX之间时,按公式(3)计算该汉字的13位编码:\n[0126] N=(C1-(A1)HEX)×(60)HEX+(C2-(A0)HEX)………………………………(3)[0127] 式中:N为汉字的13位编码;C1为GB18030编码的第一字节值;C2为GB18030编码的第二字节值。\n[0128] 当一个双字节汉字第一字节值在(B0)HEX至(F7)HEX之间、且第二字节值在(A0)HEX至(FF)HEX之间时,按公式(4)计算该汉字的13位编码:\n[0129] N=(C1-(B0)HEX+9)×(60)HEX+(C2-(A0)HEX)……………………………(4)[0130] 式中:N为字符的13位编码;C1为GB18030编码的第一字节值;C2为GB18030编码的第二字节值。\n[0131] 公式(3)及公式(4)定义了0至7775之间的编码值,以下方式用于定义7776至8191的编码值:7776至8031赋给8位字节数据(0至255),用于编码混在汉字信息中的非汉字数据;8032至8131赋给数字对“00”到“99”;8132至8191预留。\n[0132] 编码值在0~7775之间的字符记入数据长度,1个汉字(两个字节)按长度为1计算,其他字符不记入数据长度。\n[0133] 示例:\n[0134] 输入数据:联码A12\n[0135] 模式指示符:101\n[0136] 数据长度指示符:00000010\n[0137] 数据位流:\n[0138]\n[0139] 6、字节模式\n[0140] 字节模式采用8位二进制数编码字节数据,直接将字节值转为8位二进制数据即可得到编码位流。所有数据均记入数据长度。\n[0141] 示例:\n[0142] 输入数据:!@#$%^&*\n[0143] 模式指示符:110\n[0144] 数据长度指示符:00001000\n[0145] 数据位流:\n[0146]\n[0147] 在本实施例的步骤S3中提供8个纠错等级,对应的纠错码字容量如表7所示。在编码容量允许的情况下,应自动提高纠错等级。另外,由于纠错等级是以纠错码字占总码字百分比给出,另外数据编码得到的码字数,通常不是恰好等于条码的容量,而是小于条码的容量(若大于条码容量,则需要增加编码的行数/列数,或降低条码的纠错等级,因此可能需要在数据码字流的后面添加一定数量的填充码字,填充码字可以随机生成。\n[0148] 表7纠错码字容量\n[0149]\n[0150]\n[0151] 纠错码字可以纠正两种类型的错误,拒读错误(错误码字的位置已知)和替代错误(错误码字的位置未知)。可纠正的替代错误数和拒读错误数与纠错码字数和错误检测码字数之间的关系由公式(5)给出。\n[0152] e+2t=d-p ………………………………(5)\n[0153] 式中:e为拒读错误数;t为替代错误数;d为纠错码字数;p为错误检测码字数。\n[0154] 在一般情况下,p=0。当大部分纠错容量用于纠正拒读错误时,则检不出替代错误的概率增加;当拒读错误的总数大于纠错码字总数的一半时,p=3。\n[0155] 用户应确定合适的纠错等级来满足应用需求。从1级到8级的纠错码字占符号容量的百分比逐渐增加,相应的纠错性能也逐步提高,其代价是对表示给定长度数据的符号的尺寸逐步增加。\n[0156] 纠错等级的选择与下列因素相关:a)预计的符号质量水平:预计的符号质量等级越低,应用的纠错等级就应越高;b)潜在的符号损毁可能性:潜在的符号损毁可能性越高,应用的纠错等级就应越高;c)印刷符号的空间限制了使用较高的纠错等级。\n[0157] 纠错等级1、2适用于具有高质量的符号以及/或者要求使符号的尺寸尽可能小的情况。等级3、4的符号具有适中的尺寸和较好的可靠性。等级5至8适用于一些重要的或符号印制质量差的场合。需要注意的是当符号的质量降低到一定程度后,即使提高纠错等级也无法提高符号的识读可靠性。建议符号印制后测试符号的剩余纠错能力,根据测试结果调整纠错等级以使剩余纠错能力处于一个适中的水平,这样可以在保证可靠性的前提下提符号的高数据密度。\n[0158] 通过本发明的编码方法第一实施例生成的二维码是由M行、N列编码区块组成,呈现网格状的矩阵型二维码(参见图2),M和N均为正整数。在步骤S3中,可以对二维码的行数M和列数N进行设置,因此可调节二维码的长宽比,生成的二维码能够很好地适应实际应用的需要。\n[0159] 本实施例的步骤S4中有两种情况:第一种,纠错码字的个数(在生成前可以根据确定的纠错等级和数据码字流中码字的个数来确定)与数据码字流中的码字(包括数据码字和填充码字)的个数之和不大于255,则将生成的纠错码字添加到数据码字流之后;第二种,纠错码字的个数与数据码字流中的码字的个数之和大于255,此时需要将数据码字分割成多个纠错块,并确定每个纠错块添加纠错码字的数量(S41),生成纠错码字后,按照各纠错块添加纠错码字的数量将生成的纠错码字分别添加到对应的纠错块的数据码字之后(S42)。\n[0160] 设二维码的总码字容量为C。将C个码字分成B1个长度为N1的块,以及B2个长度为N2的块,满足公式(6):\n[0161] C=B1×N1+B2×N2 ………………………………(6)\n[0162] 总分块数B见公式(7):\n[0163] B=(C+254)DIV255 ………………………………(7)\n[0164] 其中,DIV表示整除(向下取整),当C是B的整数倍时,码字分块参数为:B1=B,N1=C DIV B,B2=0,N2=0。当C不是B的整数倍时,码字分块参数为:N1=(CDIV B)+1,N2=N1-1,B1=C-B×N2,B2=B-B1。\n[0165] 设选定的纠错等级为R(1≤R≤8),需要生成的纠错码字总数E见公式(8):\n[0166] E=(C×(R+1)×8)DIV100 ………………………………(8)\n[0167] B个纠错块中,前B3块中每块分配E1个纠错码字,后B4块每块分配E2个纠错码字,分配结果满足公式(9):\n[0168] E=E1×B3+E2×B4\n[0169] B=B1+B2=B3+B4 ………………………………(9)\n[0170] 当E是B的整数倍时,纠错码字分配参数为:B3=B,E1=E DIV B,B4=0,E2=0。当E不是B的整数倍时,纠错码字分配参数为:E1=(E DIV B)+1,E2=E1-1,B3=E-B×E2,B4=B-B3。\n[0171] 根据上述公式确定了纠错块的分块数B,以及各分块添加纠错码字的数量,上述确定为各纠错块分配纠错码字数量的方法,能够最大程度保证纠错码字在各纠错块之间被均匀分配。\n[0172] 另外,在生成纠错码字前,需要对码字进行异或,异或后的第n个码字,等于原第n+\n1个到最后一个码字进行异或的结果。以下将例举一种生成纠错码的方法,该方法采用伽罗瓦有限域GF(28)的Reed-Solomon纠错算法生成纠错码字,且码字的位长为8位,该示例不用于限制本发明,纠错码还可以通过其他的方法生成。\n[0173] 有限域的本原多项式为x8+x4+x3+x2+1,码字的位长为8位,构造数据码字多项式,多项式系数是数据码字,第一个数据码字为最高次项的系数,依次排列,最后一个数据码字是最低次项(常数项)的系数。设k是纠错码字的个数,则纠错码字多项式是数据码字多项式乘以xk再除以纠错生成多项式得到的余式。其中余式的最高次项的系数为第一个纠错码字,最低次项的系数为最后一个纠错码字。\n[0174] 联码生成k个纠错码字的生成多项式G(x)见公式(10):\n[0175] G(x)=(x-α1)(x-α2)…(x-αk)………………………………(10)\n[0176] 式中:G(x)为纠错生成多项式,α为有限域GF(28)的生成元,k为要生成的纠错码字个数。\n[0177] 纠错码字的生成可用图3的电路实现,其中,310表示GF(28)乘法,320表示GF(28)加法,330为两个开关,340处表示省略。寄存器a0到ak-1的初始值为0,g0到gk-1为生成多项式由低次到高次的系数。编码分两个阶段完成:第一阶段两个开关330的位置都向下(实线连接),n个时钟脉冲后结束,输入的数据码字被直接导向输出,同时寄存器a0到ak-1的值都被更新。这里n是数据码字的个数;第二阶段两个开关330的位置都向上(虚线连接),输入保持为零,k个脉冲后寄存器的值被顺序移位输出,从而生成k个纠错码字。\n[0178] 在本实施例的步骤S5中,参见图2,根据步骤S3中确定的二维码的行数M和列数N分别生成二维码的水平分割线210和竖直分割线220,通过水平分割线210和竖直分割线220将二维码的外边框230围成的区域分割为M行、N列的编码区块140,每个编码区块240包括多个单元模块,条码的条和空由若干个标准宽度的条空单元组成,这个标准宽度的单元就叫做单元模块(或模块)。并且将格式信息编码于编码区块240的部分单元模块中,格式信息包括纠错等级以及该编码区块在二维码网格图形中的位置信息,优选地,将格式信息编码于编码区块240四个顶角的单元模块中。\n[0179] 本实施例的步骤S6中,若数据码字流在未被分割的情况下添加纠错码字,则将该码字流按顺序分别添加到各编码区块240的剩余单元模块中;若数据码字流被分割为多个纠错块后分别添加相应的纠错码,则从第一纠错块至最后一个纠错块中按照码字的排列顺序将排列序号相同的码字逐批提取出来形成新的码字流(S61);将新的码字流中的码字按顺序分别添加到各编码区块240的剩余单元模块中(S62)。\n[0180] 具体地,在步骤S6中,当二维码包括不止一个纠错块时,应对纠错块进行交错排列,规则如下:从码字流的第一个块的第一个码字开始提取,然后是第二块的第一个码字,……,直到最后一个块的第一个码字;继续提取第一个块的第二个码字,然后是第二块的第二个码字,……,直到最后一个块的第二个码字;继续提取直到码字流中所有码字被提取完。从而得到了一个单一的码字流,然后将新生成的码字流中的码字添加到各编码区块\n240的剩余单元模块(添加了格式信息外的单元模块)中。编码区块240的添加顺序为从左到右、从上到下,如图4所示,即从标号为1的编码区块240开始添加,按顺序添加到标号为32的区块。\n[0181] 以下将举例说明新生成的码字流中码字在每个编码区块240中的填充顺序,该示例不用于限制本发明。在该示例中每个编码区块240由10*10个单元模块组成,每个编码区块240中位于四个顶角的四个单元模块用于编码格式信息,每个码字为8位,也就是说此时,每个模块能够添加12个码字,编码为A-L,下标0表示码字的最低位,下标7表示码字的最高位,对应码字的对应为为0时,该模块填充为浅色(如白色),对应码字的对应位为1时,该模块填充为深色(如黑色),另外,水平分割线210和竖直分割线220可以为两个单元模块宽度,外边框230可以是一个单元模块宽度,如图5所示,从新生成的单一码字流中按照顺序提取\n12个码字,分别填充到编码区块240中剩余的单元模块中,每个码字从低位到高位在该码字的添加区域内的添加顺序为从左到右、从上到下。\n[0182] 将码字流添加到编码区块240中后,完成了二维码的编码,生成的二维码如图8所示。\n[0183] 图6为本发明的二维码的解码方法第一实施例的流程图,该解码方法用于对本发明的二维码的编码方法第一实施例生成的二维码进行解码,该解码方法包括以下步骤:\n[0184] S1、扫描二维码,以获取二维码的灰度图像,并将所述灰度图像转化为二值图像;\n[0185] S2、根据所述二值图像生成边界图像,所述边界图像由所述二值图像中自身为黑色、并且周围四个像素点至少有一个为白色的像素点组成;\n[0186] S3、根据所述边界图像生成边框图像,所述边框图像由二维码的外边框、水平分割线和竖直分割线组成;\n[0187] S4、分别计算由水平分割线和竖直分割线将二维码外边框围成的区域分割成的多个编码区块的顶点坐标;\n[0188] S5、根据各编码区块的顶点坐标计算各编码区块中每个单元模块的坐标,并读取所述二值图像中对应坐标下像素点的颜色,根据黑色像素点对应二进制1,白色像素点对应二进制0的规则获得数据码字流;\n[0189] S6、对获得的数据码字流进行纠错解码;\n[0190] S7、将纠错后的数据码字流中的码字组装成二进制位流,根据编码规则将所述二进制位流还原为原始数据。\n[0191] 在本实施例的步骤S1中,扫描二维码后得到二维码的灰度图像如图7所示,计算每个编码区块的直方图,根据直方图计算阈值,所有灰度低于阈值的像素点二值化为黑色,灰度高于阈值的像素点二值化为白色,从而将灰度图像转化为如图8所示的二值图像。\n[0192] 在本实施例的步骤S2中,标记出二值图像中的边界点,所有边界点组成了如图9所示的边界图像,其中边界点为自身为黑色且周围四个像素点中至少有一个为白色的像素点。\n[0193] 在本实施例的步骤S3中,去除边界图像中复杂弯曲的线条,留下长直线条从而得到如图10所示的边框图像,检测边框图像中的直线,可得到水平分割线210和竖直分割线\n220。\n[0194] 在本实施例的步骤S4中,计算水平分割线210和竖直分割线220的交点,从而得到了编码区块240的顶点坐标。\n[0195] 在本实施例的步骤S5中,根据编码区块240顶点的坐标,采用插值计算法计算编码区块240内部每个单元模块的坐标,从二值图像中读取对应坐标的像素点的颜色,黑色点像素点对应二进制1,白色像素点对应二进制2,从而完成了数据的采集。\n[0196] 在本实施例的步骤S6中,将采集到的数据按照与编码时每个码字的位数相同的方式组装成码字序列,然后运用RS纠错算法纠正错误的码字。例如,在编码时按照每8位一个码字的方式将位流转换为数据码字流,在解码时将采集到的数据按照每8位一个码字组装成码字序列。\n[0197] 在本实施例的步骤S7中,将纠错后的码字组装成二进制位流,根据其编码规则(参见表2,数据的编码结构中包括编码的模式指示符,因此在解码时可以相应地解码),将二进制位流还原为原始数据,从而完成对二维码的解码。\n[0198] 根据本发明的编码方法生成的二维码可以印刷在印刷物上,例如物品的包装,书本页面、支票等,也可以加载在网页上等。由于二维码编码密度高,且长宽比可调,能够适应各种实际应用的需求。\n[0199] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
法律信息
- 2017-04-05
- 2014-12-10
实质审查的生效
IPC(主分类): G06K 19/06
专利申请号: 201410042801.4
申请日: 2014.01.28
- 2014-11-12
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-06-11
|
2007-12-25
| | |
2
| |
2012-12-05
|
2011-06-02
| | |
3
| |
2011-04-27
|
2009-09-28
| | |
4
| |
2012-07-18
|
2012-01-17
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |