发明内容
本发明的目的是提供一种二维码的编码方法、解码方法及系统,可以携带的信息容量更大,从而可以使得二维码在有限的几何空间内表示更多的信息。
为实现上述目的,本发明提供了如下方案:
一种二维码的编码方法,所述方法包括:
获取数据信息;
对所述数据信息进行处理,得到byte类型的待编码信息;
对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;
根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;
根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;
根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;
按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
可选的,对所述待编码信息进行第一压缩,包括:
计算对所述待编码信息进行定长压缩后的第一数据长度;
计算对所述待编码信息进行变长压缩后的第二数据长度;
判断所述第一数据长度是否小于所述第二数据长度;
如果是,则对所述待编码信息进行定长压缩;
否则,对所述待编码信息进行变长压缩。
可选的,确定进行第二压缩时的待压缩数据信息,包括:
根据所述第一压缩数据的长度以及第一压缩类型信息,确定所述待压缩数据长度信息;所述第一压缩类型信息表示所述第一压缩采用的是定长压缩还是变长压缩;
根据所述数据信息的编码类型以及第一压缩类型信息,确定所述头部信息。
可选的,所述对所述第一压缩数据采用LDPC编码进行第二压缩之前,还包括:
判断待压缩数据长度是否小于根据LDPC编码标准计算出的第三数据长度,得到第一判断结果;
当所述第一判断结果为是时,在待压缩数据的末尾添加占位字节,得到与所述第三数据长度相同的待压缩数据;
其中,所述占位字节为随机添加的二进制码。
可选的,计算需要生成的二维码的尺寸,包括:
获取预先设置的二维码的长宽比;
根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算所述二维码的总长度;
用所述总长度除以所述长宽比,再开方,得到所述二维码的最小宽度;
用所述最小宽度乘以所述长宽比,得到所述二维码的最小长度。
一种二维码的解码方法,所述二维码的生成方式包括:
获取数据信息;对所述数据信息进行处理,得到byte类型的待编码信息;对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像;
所述解码方法包括:
获取二维码图像;
采用均值灰化法对所述二维码图像进行灰化,得到每个码元对应的灰度值;
根据所述灰度值,采用二项分布算法,确定所述二维码图像的有效码元信息;
对所述有效码元信息采用LDPC解码方式进行第一解码,得到第一解压缩数据;
获取所述第一解压缩数据的头部信息;
根据所述头部信息对所述第一解压缩数据进行第二解码,得到第二解压缩数据;
根据所述第二解压缩数据生成原始数据。
一种二维码的编码系统,所述系统包括:
数据信息获取单元,用于获取数据信息;
数据信息处理单元,用于对所述数据信息进行处理,得到byte类型的待编码信息;
第一压缩单元,用于对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;
待压缩数据信息确定单元,用于根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;
第二压缩单元,用于根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;
尺寸计算单元,用于根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;
二维码图像生成单元,用于按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
可选的,所述系统还包括:
第一判断单元,用于判断待压缩数据长度是否小于根据LDPC编码标准计算出的第三数据长度,得到第一判断结果;
占位字节添加单元,用于当所述第一判断结果为是时,在待压缩数据的末尾添加占位字节,得到与所述第三数据长度相同的待压缩数据;
其中,所述占位字节为随机添加的二进制码。
可选的,所述尺寸计算单元,包括:
长宽比获取子单元,用于获取预先设置的二维码的长宽比;
总长度计算子单元,用于根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算所述二维码的总长度;
最小宽度计算子单元,用于用所述总长度除以所述长宽比,再开方,得到所述二维码的最小宽度;
最小长度计算子单元,用所述最小宽度乘以所述长宽比,得到所述二维码的最小长度。
一种二维码的解码系统,所述二维码的生成方式包括:
获取数据信息;对所述数据信息进行处理,得到byte类型的待编码信息;对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像;
所述解码系统包括:
二维码图像获取单元,用于获取二维码图像;
灰化单元,用于采用均值灰化法对所述二维码图像进行灰化,得到每个码元对应的灰度值;
有效码元信息确定单元,用于根据所述灰度值,采用二项分布算法,确定所述二维码图像的有效码元信息;
第一解码单元,用于对所述有效码元信息采用LDPC解码方式进行第一解码,得到第一解压缩数据;
头部信息获取单元,用于获取所述第一解压缩数据的头部信息;
第二解码单元,用于根据所述头部信息对所述第一解压缩数据进行第二解码,得到第二解压缩数据;
原始数据生成单元,用于根据所述第二解压缩数据生成原始数据。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明实施例中的二维码的编码方法或系统,通过对数据信息进行两次压缩,可以减小原始数据信息在二维码图像上占据的空间,并且,生成的二维码的尺寸,可以根据第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,进行计算,从而可以根据需要编码的信息量,自动调整二维码图像的尺寸,进而使二维码可以携带的信息容量更大,能够在有限的几何空间内表示更多的信息。
本发明实施例的二维码的解码方法或系统,一方面通过两次解码可以对信息容量较大的二维码进行解压缩,另一方面通过采用二项分布算法,确定所述二维码图像的有效码元信息,可以提高对于二维码解码的准确率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明的二维码的编码方法实施例的流程图。如图1所示,所述方法可以包括:
步骤101:获取数据信息;
所述数据信息可以是需要生成二维码图像的信息。
步骤102:对所述数据信息进行处理,得到byte类型的待编码信息;
所述数据信息的编码类型可以有很多种。本步骤中对不同种类的编码类型的数据信息进行处理,统一为byte类型的待编码信息。
其中,byte是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数。
步骤103:对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;
其中,变长压缩可以采用霍夫曼编码算法实现。
具体的,进行第一压缩时,可以采用以下方式:
计算对所述待编码信息进行定长压缩后的第一数据长度;
计算对所述待编码信息进行变长压缩后的第二数据长度;
判断所述第一数据长度是否小于所述第二数据长度;
如果是,则对所述待编码信息进行定长压缩;
否则,对所述待编码信息进行变长压缩。
其中,第一数据长度可以根据公式n*block计算,其中,block表示每个字符需要的bit数,n表示输入的byte数组长度。
第二数据长度可以根据公式cp+p计算,其中,cp表示采用霍夫曼算法压缩后的霍夫曼树的长度,p表示霍夫曼树对应的变长信息的长度。
步骤104:根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;
其中,所述头部信息可以包括所述数据信息的编码类型信息,以便后续解码时,可以根据所述头部信息对所述第一压缩数据进行解码。
具体的,确定进行第二压缩时的待压缩数据信息,可以包括:
根据所述第一压缩数据的长度以及第一压缩类型信息,确定所述待压缩数据长度信息;所述第一压缩类型信息表示所述第一压缩采用的是定长压缩还是变长压缩;
根据所述数据信息的编码类型以及第一压缩类型信息,确定所述头部信息。
步骤105:根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;
LDPC码即低密度奇偶校验码(Low Density Parity Check Code,LDPC),它由Robert G.Gallager博士于1963年提出的一类具有稀疏校验矩阵的线性分组码,通过校验矩阵定义的一类线性码,为使译码可行,在码长较长时需要校验矩阵满足“稀疏性”,即校验矩阵中1的密度比较低,也就是要求校验矩阵中1的个数远小于0的个数,并且码长越长,密度就要越低。LDPC不仅有逼近Shannon极限的良好性能,而且译码复杂度较低,结构灵活。
本实施例中采用的LDPC编码标准为IEEE802.16e中的QC-LDPC码的标准。该标准中要求码长必须为24的整数倍。因此,当待压缩数据长度不是24的整数倍时,本实施例还可以包括:
对所述第一压缩数据采用LDPC编码进行第二压缩之前,判断待压缩数据长度是否小于根据LDPC编码标准计算出的第三数据长度,得到第一判断结果;
当所述第一判断结果为是时,在待压缩数据的末尾添加占位字节,得到与所述第三数据长度相同的待压缩数据;
其中,所述占位字节为随机添加的二进制码。
当然,占位字节对应有一个标识,该标识可以表示上述随机添加的二进制码是用于占位的,不表示任何实际含义。
之所以要添加占位字节,是为了避免在生成的二维码图像中产生大段的空白或黑块。因为大段的空白或黑块在二维码识别时容易出错。
步骤106:根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;
其中,标志位用于在对二维码解码时对二维码进行定位。本发明中,所述标志位可以设置在二维码的四角。具体的,可以在二维码的左上角,右上角,左下角分别设置一个实心黑色矩形。该黑色矩形占据多个单位面积,所述黑色矩形的靠近二维码中心的两条边的附近(间隔预设距离处)设置有两条虚线。该两条虚线与黑色矩形的两条边平行。在二维码的右下角,设置有一个单位面积的黑色方块。
在解码时,获取到二维码图像后,可以根据标志位信息,将二维码图像旋转到正确的位置后,再进行解码。
版本信息是指生成二维码的系统的版本号。因为实际使用中,对于二维码的生成方式可能发生改变,不同的版本号与不同的编辑码规则对应。生成版本信息可以在后续解码时,支持对不同版本的系统生成的二维码进行解码。
本实施例中,二维码的尺寸是可以根据待编码的数据长度自动设置的。用户只需要设定二维码的长宽比,本实施例的方法就可以根据待编码的数据长度自动计算生成的二维码的尺寸,进而也可以使本实施例的方法生成的二维码携带的信息量具有可扩展性。
具体的,计算需要生成的二维码的尺寸,可以采用下述方式:
获取预先设置的二维码的长宽比;
根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算所述二维码的总长度;
用所述总长度除以所述长宽比,再开方,得到所述二维码的最小宽度;
用所述最小宽度乘以所述长宽比,得到所述二维码的最小长度。
步骤107:按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
具体的,可以首先再二维码图像的四角生成标志位,然后将第二压缩数据信息和版本信息添加在所述二维码图像中除去标志位以外的空间。由于在生成图像阶段只需要在4个角添加标志位即可,所以更易生成图像,不再需要复杂的寻路算法。
生成标志位后,可以按从左到右的顺序逐行向二维的图像数组中添加第二压缩数据的信息。每个信息都可以用一个小方格表示。该小方格的长宽均为scale个像素,像素大小scale可以由初始输入来限定。1与0采用不同的两种颜色以示区分。
还可以先在二维的图像数组的1/2处添加48位的版本信息,然后从头部开始添加经过LDPC编码后的第二压缩数据,填满前半部分之后从48位的版本信息后开始依次填充二维的图像数组的后半部分。采用这种方式填充二维图像数组,生成的二维码更易解析,解析图像后,很容易从1/2处获得版本信息,不再像现有技术中的其他编码方式那样——还需要单独识别版本信息的位置;此外,因为最终生成的二维码图像的尺寸是随待编码数据的长度变化的,版本信息在位置上具有一定的随机性,所以也不易遭到恶意破坏。
综上所述,本实施例中,通过对数据信息进行两次压缩,可以减小原始数据信息在二维码图像上占据的空间,并且,生成的二维码的尺寸,可以根据第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,进行计算,从而可以根据需要编码的信息量,自动调整二维码图像的尺寸,进而使二维码可以携带的信息容量更大,能够在有限的几何空间内表示更多的信息。
图2为本发明的二维码的解码方法实施例的流程图。如图2所示,所述方法可以包括:
步骤201:获取二维码图像;
所述二维码的生成方式包括:
获取数据信息;对所述数据信息进行处理,得到byte类型的待编码信息;对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
步骤202:采用均值灰化法对所述二维码图像进行灰化,得到每个码元对应的灰度值;
获取到二维码图像后,可以利用图像的灰度值,将每个像素的本应只有0、1两个值的数据转化为0-255个灰度值的形式,充分利用图像信息。更易识别模糊图像,使二维码具有更强的纠错性。
步骤203:根据所述灰度值,采用二项分布算法,确定所述二维码图像的有效码元信息;
因为每个码元对应表示的信息非0即1,所以其取“0或1”的概率符合二项分布。设最大概率为0.98,最小概率为0.02。则该二项分布的公式为f(x)=0.98e^(-(x-255)^2/(2*91^2)),x为信息位的灰度值。设对数似然比率L(x)=ln(p(x=0)/p(x=1)),p(x=0)表示x为0的概率,即为LLR。LLR值为二项分布的对数似然比率,与LDPC解码相关,采用置信传播解码时传播的就是这个比率值。因为只有256个灰度值,所以可通过查表求得LLR值。求得LLR后,用计算得到的每个码元的灰度值对应的LLR值来覆盖原值。这样就可以确定所述二维码图像的有效码元信息(即确定码元表示的是0还是1)。
采用上述方法确定所述二维码图像的有效码元信息,可以使提高对于二维码的解码的准确率
步骤204:对所述有效码元信息采用LDPC解码方式进行第一解码,得到第一解压缩数据;
步骤205:获取所述第一解压缩数据的头部信息;
步骤206:根据所述头部信息对所述第一解压缩数据进行第二解码,得到第二解压缩数据;
步骤207:根据所述第二解压缩数据生成原始数据。
步骤204到步骤207与图1所示实施例中的步骤101至步骤105相对应,可以认为是步骤101至步骤105的逆过程,由于步骤101至步骤105已经进行了详细说明,因此不再赘述。
综上所述,采用本实施例的二维码的解码方法,一方面通过两次解码可以对信息容量较大的二维码进行解压缩,另一方面通过采用二项分布算法,确定所述二维码图像的有效码元信息,可以提高对于二维码解码的准确率。
本发明还提供了一种二维码的编码系统。图3为本发明的二维码的编码系统实施例的结构图。如图3所示,该系统可以包括:
数据信息获取单元301,用于获取数据信息;
数据信息处理单元302,用于对所述数据信息进行处理,得到byte类型的待编码信息;
第一压缩单元303,用于对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;
待压缩数据信息确定单元304,用于根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;
第二压缩单元305,用于根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;
尺寸计算单元306,用于根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;
二维码图像生成单元307,用于按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
实际应用中,所述系统还可以包括:
第一判断单元,用于判断待压缩数据长度是否小于根据LDPC编码标准计算出的第三数据长度,得到第一判断结果;
占位字节添加单元,用于当所述第一判断结果为是时,在待压缩数据的末尾添加占位字节,得到与所述第三数据长度相同的待压缩数据;
其中,所述占位字节为随机添加的二进制码。
所述尺寸计算单元306,可以包括:
长宽比获取子单元,用于获取预先设置的二维码的长宽比;
总长度计算子单元,用于根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算所述二维码的总长度;
最小宽度计算子单元,用于用所述总长度除以所述长宽比,再开方,得到所述二维码的最小宽度;
最小长度计算子单元,用所述最小宽度乘以所述长宽比,得到所述二维码的最小长度。
本发明还提供了一种二维码的解码系统。所述二维码的生成方式包括:
获取数据信息;对所述数据信息进行处理,得到byte类型的待编码信息;对所述待编码信息进行第一压缩,得到第一压缩数据;所述第一压缩包括定长压缩或变长压缩;根据所述第一压缩数据,确定进行第二压缩时的待压缩数据信息;所述待压缩数据信息包括待压缩数据长度信息以及头部信息;根据所述待压缩数据信息,对所述第一压缩数据采用LDPC编码进行第二压缩,得到第二压缩数据;根据所述第二压缩数据的长度,标志位信息的长度以及当前的版本信息的长度,计算需要生成的二维码的尺寸;按照所述尺寸,根据所述第二压缩数据、标志位信息以及当前的版本信息生成二维码图像。
图4为本发明的二维码的解码系统实施例的结构图。如图4所示,该系统可以包括:
二维码图像获取单元401,用于获取二维码图像;
灰化单元402,用于采用均值灰化法对所述二维码图像进行灰化,得到每个码元对应的灰度值;
有效码元信息确定单元403,用于根据所述灰度值,采用二项分布算法,确定所述二维码图像的有效码元信息;
第一解码单元404,用于对所述有效码元信息采用LDPC解码方式进行第一解码,得到第一解压缩数据;
头部信息获取单元405,用于获取所述第一解压缩数据的头部信息;
第二解码单元406,用于根据所述头部信息对所述第一解压缩数据进行第二解码,得到第二解压缩数据;
原始数据生成单元407,用于根据所述第二解压缩数据生成原始数据。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。