QR二维码编解码原理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
=(x-α0)(x-α1)……(x-α16)
其中n为生成多项式的次数, 也就是纠错码字数。本例中, 纠错码字数为17,生成多项式 如图所示。
12
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
数据码字的多项式形式为:d(x)=d0+d1x+d2x2+……+d8x8 (有9个数据码字)
(共9个码字)
8
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
编码码字多项式:c(x ) c0 c1x 1 c2x 2 c25x 25
前9位为数据码字 后17位为纠错码字
c(α 0) 1 1 1 1 co So 0
二维码基础 --QR(Quick Response)码
2
纲要
I.
QR码的编码
II.
QR码的解码
3 编码:QR码符号的结构
编码
每个QR码符号由名义上的正方形模块构成,组成一个正方形阵列,它由编码区域 和能包用括于寻数象据图编形码、。分符隔号符的、四定周位由图空形白和区校包正围图。形下迅在图速内为地的QR识码功别版能可本图能7形符的组号Q成的R码。结功构能图图。形不
8)填充位和填充码字:本例中,数据位流长度为72位,满足数据容量要求,无 需添加填充位和填充码字。
9)位流到码字的转换:所得的数据位流将被分为一个个码字,所有的码字长度 都是8位。 综上,所得到的数据码字序列为:
00010000 01000000 00001100 01010110 01101010 01101110 00010100 11101010 01010000
16
7.格式和版本信息:生成版本信息(如果需要)和格式信息,构成符号 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
格式信息为15位,其中有5个数据位,10个是用BCH(15,5)编码计算得到的纠错位。其 中,数据位的第1,2位是符号的纠错等级,第3到第5位是掩模图形参考。
其中,纠错码字是数据码字被纠错码多项式g(x)除得的余数。
=g(x)q(x)
纠错码多项式求出后,将系数αi按对照表转换为位流,加到数据位流后面,即可求出整个
编码数据故位c流(x。) x2td(x ) j(x)
q(x)g(x) j(x) j(x)
q(x )g(x )
13
4.构造最终信息 :按规则将每一块中置入数据和纠错码字,必要时加剩余位 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
同时, α为P(X)=0的根。其中, P(X)是以GF(28)上8次首一既约多项式,以P(X)为模 的多项式剩余类环构成28阶伽罗华域。
本例中,本原多项式为P(X)=X8+X4+X3+X2+1。
用αi模P(α)可以得到域元素和二进制比特串的对照表(如图)。
10
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
按如下步骤构造最终的码字序列(数据码字加上纠错码字,必要时加上剩余码字)。
1)根据版本和纠错等级将数据码字序列分为n块。 2)对每一块,计算相应块的纠错码字。 3)依次将每一块的数据和纠错码字装配成最终的序列:数据块1的码字1;数据块2 的码字1;数据块3的码字1;以此类推至数据块n-1的最后的码字;数据块n的最后的 码字;随后,纠错块1的码字1,纠错块2的码字1,…以此类推至纠错块n-1的最后的 码字;纠错块n的最后的码字。
格式信息掩模是与101010000010010进行XOR异或运算。
本例中纠错等级为H,查表知,二进制指示符为10。掩模图形参考根据上页结果确定。
纠错等级
L M Q H
二进制指示符
01 00 11 10
版本信息为18位,其中,6位数据位,12位通过BCH(18,6)编码计算出的纠错位。只 有版本7到版本40的符号包含版本信息,没有任何版本信息的结果全为0。
110
((i j) mod 2 + (i j) mod 3) mod 2 = 0
功能模块 掩模不用于功能模块
111
((i j) mod 3 + (i+j) mod 2) mod 2 = 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
17 解码:QR码的解码流程
开始 识别深/浅模块 格式信息译码
确定版本 消除掩模 恢复数据和纠错码字
没有错误
用纠错码字进 行错误检查 错误 纠错
数据码字译码
输ቤተ መጻሕፍቲ ባይዱ 结束
解码
图像处理方法
1.计算伴随多项式的值。 2.求错误位置多项式。 3.求错误位置多项式的根。 4.求错误值并对码字进行错误 纠正。
18
查表可知,本例中1-H版本的数据码字序列为1块,不需要分开,故无需构造最终信息。
编码 14
5.在矩阵中布置模块:将寻像图形、分隔符、校正图形与码字,按规则排列,放入二维码矩阵 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
图形表示:00010000
排列规则
数据码字9个,纠错码字17个,共26个码字,就是26块码字区。 将码字,寻像图形,分隔符,校正图形按规则排列,放入二维码中即可
15
6.掩模:依次对符号的编码区域的位图进行掩模处理,评价所得结果,选择最优一种。
编码
例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
为了QR码阅读的可靠性,最好均衡地安排深色与浅色模块。应尽可能避免位置探测图形
的位图1011101出现在符号的其他区域。为了满足上述条件,应按以下步骤进行掩模。
i
j
版本1符号的所有的掩模图形,用掩模图形参 考000到111的掩模结果。
掩模图形参考
条件
000 (i + j) mod 2 = 0
001 i mod 2 = 0
010 j mod 3 = 0
000
(i + j) mod 2 = 0
001
i mod 2 = 0
010
j mod 3 = 0
011
(i + j) mod 3 = 0
生成多x项2t式d(x为):g(xd)=8x25 d7x24 d1x1 d0 (数据码字多项式)
编码后x的2t表d(x达)式m为od:g(C(x)X) j(x) (纠错码字多项式)
q(x ) g(x ) x2td(x ) C(αi) = 0
纠错码字多项式 (i=0,1,2,…,16)
数据和纠错码字
4 编码:QR码的编码流程
1.数据分析
编码
确定要进行编码的字符类型,选择所需的版本信息和纠错等级。
2.数据编码
采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字。
3.纠错编码
生成纠错码字加到数据码字后。
4.构造最终信息 按规则将每一块中置入数据和纠错码字,必要时加剩余位。
1)掩模不用于功能图形
2)用多个矩阵图形连续地对已知的编码区域的模块图形(格式信息和版本信息除外)进行
XOR操作。XOR操作将模块图形依次放在每个掩模图形上,并将对应于掩模图形的深色模块
的模块取反(浅色变成深色,或相反)。
3)对每个结果图形的不合要求的部分记分,以评估这些结果。
4)选择得分最低的图形。
1) 分为3位一组:012 345 678 901 234 5
2) 将每组转换为二进制: 012→0000001100 345→0101011001 678→1010100110 901→1110000101 234→0011101010 5→0101
3) 将二进制数连接为一个序列: 0000001100 0101011001 1010100110 1110000101 0011101010 0101
编码
定义:在任何q阶伽罗华域GF(q)中都能找到一个α,能用它的幂次表示q-1个非零元素。
QR码的纠错码生成是通过GF(28)来进行的,GF(28)中的元素组成一个循环群: ( 1, α1 ,……,α254 ), 其中α255 = α0=1 ,则称α是GF(28)的本原域元素。
α0 α254 可用0000 0001 1111 1111 来表示
符号,明确地确定视场 中空符白区号的位置和方向
位置探测图形
作用是确定符号的密度和
版本,提供决定模块坐标
的位基置探准测位图形置。 功能
分 隔符
图形
补定位正图Q形R码的歪斜。
符号
包校含正图符形号所使用的纠错 包等含级版和本掩信模息图,形只信有息版。本 7~40的符号有版本信息,其 余格版式本信息全为0
版数纠本据错信信码息 息及数据信编 格码 式息区的
6)数字模式中位流的长度计算公式:B=4+C+10(D DIV 3)+R=4+10+50+4=68
编码
7
2.数据编码:采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
7)添加终止符:查表可知版本1-H的数据位数应为72,故需添加终止符序列0000, 此时数据位流为72位,满足版本要求。
4) 将字符计数指示符转换为二进制(查表知版本1-H为10位): 字符数为:16→0000010000
5) 加入模式指示符0001(查表)以及字符计数指示符的二进制数据: 0001 0000010000 0000001100 0101011001 1010100110 1110000101 0011101010 0101
c(α
1
)
1
α
α2
α
25
c1
S1
0
c(α 16)
1
α 16
α 32
α
400
c25
S16
0
校验矩阵
编码码字矩阵
9
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
5.在矩阵中布置模块 将寻像图形、分隔符、矫正图形与码字,按规则排列,放入二维码矩阵。
6.掩模
用八种掩模图形依次对符号的编码区域的位图进行掩模处理,评价所得到 的8种结果,选择最优的一种。
7.格式和版本信息
生成版本信息(如果需要)和格式信息,构成符号。
5
1.数据分析:确定要进行编码的字符类型,选择所需的版本信息和纠错等级 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
11
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
(c, k, r): c =码字总数 k =数据码字数 r =纠错容量
† 纠错容量小于纠错码字数的 一半,以减少错误译码的可能 性
生成多项式: g(x)=(x-α0)(x-α1)……(x-αn-1)
1.计算伴随多项式的值
解码
例:以版本1-M为例,GF(28)上有码字26个,其中纠错码字10个,可纠正4个码字。
编码后的表达式为: C(X) 若Si=0 (i=0,1,2,3,4,5,6,7), 则接受到的码=C字25X无25 +错C2误4X24。+……+ C1X1 + C0 =q(x)g(x)
若Si≠0 (i=0,1,2,3,4,5,6,7),则接收到的码字有误,需先找出错误码字位置,再算出错误值,最后 进行纠错,得到正确码字。
编码
1.扩充解释(ECI)模式,数字模式,字母数字模式,8位字节模式,中国汉字模式,日本汉字 模式,混合模式,结构链接模式,FNCI模式
2.
6
2.数据编码:采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
011 (i + j) mod 3 = 0
100 ((i div 2) + (j div 3)) mod 2 = 0
101 (i j) mod 2 + (i j) mod 3 = 0
100
((i div 2) + (j div 3)) mod 2 = 0
101
(i j) mod 2 + (i j) mod 3 = 0
其中n为生成多项式的次数, 也就是纠错码字数。本例中, 纠错码字数为17,生成多项式 如图所示。
12
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
数据码字的多项式形式为:d(x)=d0+d1x+d2x2+……+d8x8 (有9个数据码字)
(共9个码字)
8
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
编码码字多项式:c(x ) c0 c1x 1 c2x 2 c25x 25
前9位为数据码字 后17位为纠错码字
c(α 0) 1 1 1 1 co So 0
二维码基础 --QR(Quick Response)码
2
纲要
I.
QR码的编码
II.
QR码的解码
3 编码:QR码符号的结构
编码
每个QR码符号由名义上的正方形模块构成,组成一个正方形阵列,它由编码区域 和能包用括于寻数象据图编形码、。分符隔号符的、四定周位由图空形白和区校包正围图。形下迅在图速内为地的QR识码功别版能可本图能7形符的组号Q成的R码。结功构能图图。形不
8)填充位和填充码字:本例中,数据位流长度为72位,满足数据容量要求,无 需添加填充位和填充码字。
9)位流到码字的转换:所得的数据位流将被分为一个个码字,所有的码字长度 都是8位。 综上,所得到的数据码字序列为:
00010000 01000000 00001100 01010110 01101010 01101110 00010100 11101010 01010000
16
7.格式和版本信息:生成版本信息(如果需要)和格式信息,构成符号 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
格式信息为15位,其中有5个数据位,10个是用BCH(15,5)编码计算得到的纠错位。其 中,数据位的第1,2位是符号的纠错等级,第3到第5位是掩模图形参考。
其中,纠错码字是数据码字被纠错码多项式g(x)除得的余数。
=g(x)q(x)
纠错码多项式求出后,将系数αi按对照表转换为位流,加到数据位流后面,即可求出整个
编码数据故位c流(x。) x2td(x ) j(x)
q(x)g(x) j(x) j(x)
q(x )g(x )
13
4.构造最终信息 :按规则将每一块中置入数据和纠错码字,必要时加剩余位 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
同时, α为P(X)=0的根。其中, P(X)是以GF(28)上8次首一既约多项式,以P(X)为模 的多项式剩余类环构成28阶伽罗华域。
本例中,本原多项式为P(X)=X8+X4+X3+X2+1。
用αi模P(α)可以得到域元素和二进制比特串的对照表(如图)。
10
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
按如下步骤构造最终的码字序列(数据码字加上纠错码字,必要时加上剩余码字)。
1)根据版本和纠错等级将数据码字序列分为n块。 2)对每一块,计算相应块的纠错码字。 3)依次将每一块的数据和纠错码字装配成最终的序列:数据块1的码字1;数据块2 的码字1;数据块3的码字1;以此类推至数据块n-1的最后的码字;数据块n的最后的 码字;随后,纠错块1的码字1,纠错块2的码字1,…以此类推至纠错块n-1的最后的 码字;纠错块n的最后的码字。
格式信息掩模是与101010000010010进行XOR异或运算。
本例中纠错等级为H,查表知,二进制指示符为10。掩模图形参考根据上页结果确定。
纠错等级
L M Q H
二进制指示符
01 00 11 10
版本信息为18位,其中,6位数据位,12位通过BCH(18,6)编码计算出的纠错位。只 有版本7到版本40的符号包含版本信息,没有任何版本信息的结果全为0。
110
((i j) mod 2 + (i j) mod 3) mod 2 = 0
功能模块 掩模不用于功能模块
111
((i j) mod 3 + (i+j) mod 2) mod 2 = 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
17 解码:QR码的解码流程
开始 识别深/浅模块 格式信息译码
确定版本 消除掩模 恢复数据和纠错码字
没有错误
用纠错码字进 行错误检查 错误 纠错
数据码字译码
输ቤተ መጻሕፍቲ ባይዱ 结束
解码
图像处理方法
1.计算伴随多项式的值。 2.求错误位置多项式。 3.求错误位置多项式的根。 4.求错误值并对码字进行错误 纠正。
18
查表可知,本例中1-H版本的数据码字序列为1块,不需要分开,故无需构造最终信息。
编码 14
5.在矩阵中布置模块:将寻像图形、分隔符、校正图形与码字,按规则排列,放入二维码矩阵 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
图形表示:00010000
排列规则
数据码字9个,纠错码字17个,共26个码字,就是26块码字区。 将码字,寻像图形,分隔符,校正图形按规则排列,放入二维码中即可
15
6.掩模:依次对符号的编码区域的位图进行掩模处理,评价所得结果,选择最优一种。
编码
例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
为了QR码阅读的可靠性,最好均衡地安排深色与浅色模块。应尽可能避免位置探测图形
的位图1011101出现在符号的其他区域。为了满足上述条件,应按以下步骤进行掩模。
i
j
版本1符号的所有的掩模图形,用掩模图形参 考000到111的掩模结果。
掩模图形参考
条件
000 (i + j) mod 2 = 0
001 i mod 2 = 0
010 j mod 3 = 0
000
(i + j) mod 2 = 0
001
i mod 2 = 0
010
j mod 3 = 0
011
(i + j) mod 3 = 0
生成多x项2t式d(x为):g(xd)=8x25 d7x24 d1x1 d0 (数据码字多项式)
编码后x的2t表d(x达)式m为od:g(C(x)X) j(x) (纠错码字多项式)
q(x ) g(x ) x2td(x ) C(αi) = 0
纠错码字多项式 (i=0,1,2,…,16)
数据和纠错码字
4 编码:QR码的编码流程
1.数据分析
编码
确定要进行编码的字符类型,选择所需的版本信息和纠错等级。
2.数据编码
采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字。
3.纠错编码
生成纠错码字加到数据码字后。
4.构造最终信息 按规则将每一块中置入数据和纠错码字,必要时加剩余位。
1)掩模不用于功能图形
2)用多个矩阵图形连续地对已知的编码区域的模块图形(格式信息和版本信息除外)进行
XOR操作。XOR操作将模块图形依次放在每个掩模图形上,并将对应于掩模图形的深色模块
的模块取反(浅色变成深色,或相反)。
3)对每个结果图形的不合要求的部分记分,以评估这些结果。
4)选择得分最低的图形。
1) 分为3位一组:012 345 678 901 234 5
2) 将每组转换为二进制: 012→0000001100 345→0101011001 678→1010100110 901→1110000101 234→0011101010 5→0101
3) 将二进制数连接为一个序列: 0000001100 0101011001 1010100110 1110000101 0011101010 0101
编码
定义:在任何q阶伽罗华域GF(q)中都能找到一个α,能用它的幂次表示q-1个非零元素。
QR码的纠错码生成是通过GF(28)来进行的,GF(28)中的元素组成一个循环群: ( 1, α1 ,……,α254 ), 其中α255 = α0=1 ,则称α是GF(28)的本原域元素。
α0 α254 可用0000 0001 1111 1111 来表示
符号,明确地确定视场 中空符白区号的位置和方向
位置探测图形
作用是确定符号的密度和
版本,提供决定模块坐标
的位基置探准测位图形置。 功能
分 隔符
图形
补定位正图Q形R码的歪斜。
符号
包校含正图符形号所使用的纠错 包等含级版和本掩信模息图,形只信有息版。本 7~40的符号有版本信息,其 余格版式本信息全为0
版数纠本据错信信码息 息及数据信编 格码 式息区的
6)数字模式中位流的长度计算公式:B=4+C+10(D DIV 3)+R=4+10+50+4=68
编码
7
2.数据编码:采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
7)添加终止符:查表可知版本1-H的数据位数应为72,故需添加终止符序列0000, 此时数据位流为72位,满足版本要求。
4) 将字符计数指示符转换为二进制(查表知版本1-H为10位): 字符数为:16→0000010000
5) 加入模式指示符0001(查表)以及字符计数指示符的二进制数据: 0001 0000010000 0000001100 0101011001 1010100110 1110000101 0011101010 0101
c(α
1
)
1
α
α2
α
25
c1
S1
0
c(α 16)
1
α 16
α 32
α
400
c25
S16
0
校验矩阵
编码码字矩阵
9
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
5.在矩阵中布置模块 将寻像图形、分隔符、矫正图形与码字,按规则排列,放入二维码矩阵。
6.掩模
用八种掩模图形依次对符号的编码区域的位图进行掩模处理,评价所得到 的8种结果,选择最优的一种。
7.格式和版本信息
生成版本信息(如果需要)和格式信息,构成符号。
5
1.数据分析:确定要进行编码的字符类型,选择所需的版本信息和纠错等级 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
11
3.纠错编码:生成纠错码字加到数据码字后 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
编码
(c, k, r): c =码字总数 k =数据码字数 r =纠错容量
† 纠错容量小于纠错码字数的 一半,以减少错误译码的可能 性
生成多项式: g(x)=(x-α0)(x-α1)……(x-αn-1)
1.计算伴随多项式的值
解码
例:以版本1-M为例,GF(28)上有码字26个,其中纠错码字10个,可纠正4个码字。
编码后的表达式为: C(X) 若Si=0 (i=0,1,2,3,4,5,6,7), 则接受到的码=C字25X无25 +错C2误4X24。+……+ C1X1 + C0 =q(x)g(x)
若Si≠0 (i=0,1,2,3,4,5,6,7),则接收到的码字有误,需先找出错误码字位置,再算出错误值,最后 进行纠错,得到正确码字。
编码
1.扩充解释(ECI)模式,数字模式,字母数字模式,8位字节模式,中国汉字模式,日本汉字 模式,混合模式,结构链接模式,FNCI模式
2.
6
2.数据编码:采用既定规则,数据字符转换为位流,加必要符号,后将位流转换为码字 例:对数字0123456789012345(16个数字字符)进行编码,生成QR码。
011 (i + j) mod 3 = 0
100 ((i div 2) + (j div 3)) mod 2 = 0
101 (i j) mod 2 + (i j) mod 3 = 0
100
((i div 2) + (j div 3)) mod 2 = 0
101
(i j) mod 2 + (i j) mod 3 = 0