一种分层结构二维码的编码及译码方法
技术领域
本发明涉及二维码领域,更确切地说是一种分层结构二维码的编码及译码方法。
背景技术
二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,黑色图案对应逻辑“1”比特,白色图案对应逻辑“0”比特,二维条码能够在横向和纵向两个方向同时表达信息,因此这样的二维码具有在很小的面积内存储大量信息的能力,并且自身具有一定的校验功能。现有的二维条码被大规模污染或被磨损或被褶皱导致不够清晰时,扫描设备(手机)将无法扫描出二维条码所携带的信息,在扫描设备(手机)无法识别二维条码,则被污染、磨损、褶皱的二维条码没有任何办法进行补救,从而使得二维条码无法满足现在日益所需的可靠性,且对于现有的二维条码一般使用的是Reed-Solomon译码算法,该Reed-Solomon译码算法基于求解线性方程组来对输入编码进行纠错,计算复杂程度高,如果二维码图形形状越大,译码速度越慢,同时其二维条码的译码纠错还原效率低,从而使得二维条码的译码无法适应现在快速发展的需求。
二维码一般是大致正方形或长方形的形状,转换为原形状后,基于各单元的像素值,进行分析(解码)处理。为了对被拍摄的图像的位置关系进行检测,二维码具有规定形状的位置检测图形。分析时,对于拍摄的二维码的图像,检测位置检测图形,基于位置检测图形的位置关系来进行转换。位置检测图形的检测是成为分析的基础的处理,对识别精度、分析时间的影响大,因此位置检测图形的检测处理是分析处理的重要的要素。
二维码与一维码相比,能够以狭小的面积承载较多的信息,被广泛使用于物品管理、使用便携式电话的网络引导等各种各样的用途。由于要以各种角度拍摄二维码,二维码的图像在画面中的大小和方向并非一定,也会发生图像畸变和图像模糊等情况。二维码自身被污染的情况下,也会发生部分图像不能够判别的情况。
发明内容
针对现有技术中的缺陷,本发明提供了一种分层结构二维码的编码方法,其具有避免被大规模污染或者被磨损或者被褶皱的二维码不能够使用的现象,提高了其可靠性和安全性。
为了实现上述目的,本发明所采取的技术方案是:
一种分层结构二维码的编码方法,包括如下步骤:
S1,判断源数据信息流是否满足ECC200表格规则,判断源数据信息流是否满足ECC200表格规则具体为:将源数据信息流转换成二进制码,二进制码通过卷积码编码器得到二进制码的个数,二进制码的个数与ECC200表格规则中预设规定的二进制码个数相比较;
S2,如果是,则将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为源数据二进制比特流,源数据二进制比特流通过卷积码编码器进行编码,得到数据码字,所述将源数据码字进行二进制转换,得到一组只有0和1的二进制流;如果否,根据源数据信息流计算满足ECC200表格规则所需要补充的二进制流,同时将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为源数据二进制比特流,在源数据二进制比特流后面添加所需要补充的二进制流,源数据二进制比特流以及源数据二进制比特流后所补充的二进制流通过卷积码编码器进行编码,得到数据码字,所述将源数据码字进行二进制转换,得到一组只有0和1的二进制流;所述源数据信息流根据编码规则是经过查询ASCⅡ码表生成(0,255)范围内的源数据码字,如果源数据码字的码长过长,可以混合其他编码方式如C40、Text、X12、EDIFACT、Base256等方式将码长进行压缩,根据不同编码方式的要求与ASCⅡ码进行切换字符,所述根据ECC200表格所容纳数据大小计算所需要补充的二进制流,同时将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为(0,255)范围内的源数据二进制比特流,判断源数据二进制比特流根据计算能否填满对应源数据信息流的ECC200表格,如果是则不需要补充二进制流,如果否则需要在源数据二进制比特流后面添加所需要补充的二进制流使其满足ECC200表格规则,源数据二进制比特流和后面添加所需要补充的二进制流组成一个新源数据二进制比特流,其具体根据ECC200表格所对应可容纳的比特数计算出原本需要输入的源数据二进制比特流,计算出原本需要输入的源数据二进制比特流与源数据信息流转换成的源数据二进制比特流的差值个数,将源数据信息流转换成的源数据二进制比特流的末端提取差值个数相同二进制流按照源数据二进制比特流末端的顺序排列添加到源数据信息流转换成的源数据二进制比特流之后,得到满足ECC200表格规则的新源数据二进制比特流,所述运用编码速率为1/2的(2,1,9)的卷积码编码器对源数据二进制码字进行编码,(2,1,9)的卷积码编码器对输入的源数据二进制码字进行计算:将g(1,1)(x)得到的二进制数先输出放置在十位上,g(1,2)(x)得到的二进制数后输出放置在个位上,十位上和个位上的二进制数组合得到一个两位二进制数组,将每一个二进制数组按顺序排列得到一组二进制流,(2,1,9)卷积码编码器会在上述得到的一组二进制流后面添加8位“0”二进制数,从而得到数据码字;
S3,将上述步骤2中的数据码字输入到交织器中进行交织,并将交织后的数据码字读取,最终得到最终码字,其交织器首先对数据码字进行分组交织,将列数C预设为30,然后设数据码字的码字个数为U,找出满足不等式U≤RC的最小整数R,得到行数R,确定行数R后,得到矩阵A,接下来将数据码字逐行写入矩阵A中,若数据码字无法将R行写入完整,则用数据二进制比特流的0或1将R行其它空缺位置填补,将矩阵A进行矩阵变换得到新矩阵B,最终将新矩阵B逐列读出数据,并将之前不存在数据码字中的数据二进制比特流中的0或1去掉,得到最终码字;
S4,将最终码字按照输出的排列顺序每三个一分组,从而转化成二维码,二维码是按照对应的ECC200表格规则进行逐行填充,所以能够得到可供识别的二维码图片。
本发明由于二维码是由多个最终码字构成的,在二维码生成之后,即使发生了被大规模污染或者出现被磨损或者被褶皱的情况,通过扫描器依然能够识别和读取最终得到源数据二进制比特流信息,大大增加了二维码的识别可靠性和安全性。
针对现有技术中的缺陷,本发明提供了一种分层结构二维码的译码方法,其具有计算复杂程度低和纠错还原效率高的优点,从而更加适应现在快速发展的需求。
为了实现上述目的,本发明所采取的技术方案是:
一种分层结构二维码的译码方法,包括如下步骤:
S5,用扫描二维码的扫描器扫描二维码获取二维码信息;
S6,将获取的二维码信息通过译码器译码得到源数据信息流,所述译码器由解调器、解交织译码器和维特比译码器构成,具体的步骤是:a、二维码信息通过解调器解调得到二进制码字流;b、将解调获取的二进制码字流进入解交织译码器进行解交织得到一组码字流,其解交织译码器具体算法是构造一个解交织矩阵,其中规定解交织矩阵列数C为30,根据接收到的码字,设码字个数为U',找出满足不等式U'≤R'C中的最小整数R',得到行数R',确定行数R'后,得到矩阵D,将接收到的码字逐列写入矩阵D中,若输入码字无法将行数R'写入完整,则用数据二进制比特流的0或1将行数R'其它空缺位置填补,然后将矩阵D经过矩阵变换,从而得到新矩阵E,接下来将矩阵E逐行读取,并将之前不存在数据码字中的数据二进制比特流0或1去掉,得到解交织后码字流,然后对码字流进行软判决,从而得到判决后码字流;c、判决后码字流进入到维特比译码器,经过维特比译码器进行译码纠错,获得源数据二进制比特流,具体的是计算出相应的分支量度值,将进入某一状态的两条分支度量与之前状态路径量度累加求和,运用“回迹”法,比较到达当前状态的两支路径量度的大小,选择最大者作为新的状态路径量度存储起来,如果当前状态的两支路径量度大小相同,则可以任选一条作为新的状态路径量度存储起来,对译码器中的256个状态都实施“加、比、选”运算,在处理完所有的支路数后,依照网格图的支路连接关系,根据存储的判决结果按照存储相反的顺序进行反向找回,从而找出最大似然译码序列,得到的最大似然译码序列就是对信道传输中可能传输错误的码字流进行纠错后得到的输出码字,将最大似然译码序列运用网格图的支路关系得到编码时得到的源数据二进制比特流,将源数据二进制比特流进行去二进制化得到源数据码字;d、利用译码规则将源数据码字解析出源数据信息流。
本发明将通过扫描得到的数据输送到译码器,由于所述译码器由解调器、解交织译码器和维特比译码器构成,译码器中的解调器对二维码信息进行解调,得到二进制码字流,接下来将获取的二进制码字流进入解交织译码器进行解交织得到一组码字流,码字流进行软判决,从而得到判决后码字流,然后判决后码字流进入到维特比译码器,经过维特比译码器进行译码纠错,获得源数据二进制比特流,最终利用译码规则将源数据二进制比特流解析出源数据信息流,实现了完成译码,其大大提高了译码的效率,使得二维码识别读取更加快速和便捷。
本发明的有益效果:本发明的编码方法能够避免被大规模污染或者被磨损或被褶皱的二维码不能扫描现象的发生,其有利于能够继续被识别和读取,提高了其可靠性和安全性;另一方面本发明的译码方法,具有计算复杂程度低和纠错还原效率高的优点,也大大提高了译码的效率,使得二维码识别读取更加快速和便捷,从而更加适应现在快速发展的需求。
附图说明
下面结合实施例和附图对本发明进行详细说明,其中:
图1为本发明的分层结构二维码的编码方法流程示意图;
图2为本发明的分层结构二维码的译码方法流程示意图;
图3是本发明中的图形编码方法的结构示意图。
具体实施方式
下面结合附图进一步阐述本发明的具体实施方式:
如图1所示,一种分层结构二维码的编码方法,包括如下步骤:
S1,判断源数据信息流是否满足ECC200表格规则;
具体判断的方法为:将源数据信息流转换成二进制码,二进制码通过卷积码编码器得到二进制码的个数,二进制码的个数与ECC200表格规则中预设规定的二进制码个数相比较,例如输入二个源数据信息流,源数据信息流转换成八位二进制码,从而得到16个二进制码,卷积码编码器会根据要求会在得到16个二进制码信息序列后添加8个“0”,则二进制码总共得到24个二进制码,每个二进制码通过卷积码编码器得到二进制码的个数,即每个二进制码通过卷积码编码器输出两个二进制码,总共得到24×2=48个二进制码,根据选择ECC200数据区域为8×8的表格,根据图3的图形编码方法每行每列为2×2的方块,因此该表格能容纳4×4×3=48个二进制码,即源数据信息流满足ECC200表格规则,因此不需要补充二进制码,需要进行下述步骤S2;输入五个源数据信息流,源数据信息流转换成八位二进制码,从而得到40个二进制码,通过卷积码编码器对信息序列的要求添加8个“0”二进制码总共得到48个二进制码,每个二进制码通过卷积码编码器得到二进制码的个数,即每个八位二进制码通过卷积码编码器输出两个二进制码,总共得到96个二进制码,根据ECC200表格选择数据区域为12×12的表格,根据图3的图形编码方法每行每列为2×2的方块,因此该表格能容纳6×6×3=108个二进制码,因此需要补充108-96=12个二进制码,即源数据信息流不满足ECC200表格规则,需要进行下述步骤S2;
S2,如果是,则将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为源数据二进制比特流,源数据二进制比特流通过卷积码编码器进行编码,得到数据码字,所述将源数据码字进行二进制转换,得到一组只有0和1的二进制流;如果否,根据源数据信息流计算满足ECC200表格规则所需要补充的二进制流,同时将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为源数据二进制比特流,在源数据二进制比特流后面添加所需要补充的二进制流,源数据二进制比特流以及源数据二进制比特流后所补充的二进制流通过卷积码编码器进行编码,得到数据码字,所述将源数据码字进行二进制转换,得到一组只有0和1的二进制流;所述源数据信息流根据编码规则是经过查询ASCⅡ码表生成(0,255)范围内的源数据码字,如果源数据码字的码长过长,可以混合其他编码方式如C40、Text、X12、EDIFACT、Base256等方式将码长进行压缩,根据不同编码方式的要求与ASCⅡ码进行切换字符,所述根据ECC200表格所容纳数据大小计算所需要补充的二进制流,同时将源数据信息流根据编码规则得到源数据码字,对源数据码字进行二进制转换为(0,255)范围内的源数据二进制比特流,判断源数据二进制比特流根据计算能否填满对应源数据信息流的ECC200表格,如果是则不需要补充二进制流,如果否则需要在源数据二进制比特流{xi}后面添加所需要补充的二进制流{yi}使其满足ECC200表格规则,源数据二进制比特流和后面添加所需要补充的二进制流组成一个新源数据二进制比特流,其具体根据ECC200表格所对应可容纳的比特数计算出原本需要输入的源数据二进制比特流,计算出原本需要输入的源数据二进制比特流与源数据信息流转换成的源数据二进制比特流的差值个数a,将源数据信息流转换成的源数据二进制比特流的末端提取和差值个数相同二进制流添加到源数据信息流转换成的源数据二进制比特流之后,得到满足ECC200表格规则的新源数据二进制比特流如表一,所述运用编码速率为1/2的(2,1,9)的卷积码编码器对源数据二进制码字进行编码,(2,1,9)的卷积码编码器对输入的源数据二进制码字进行计算将g(1,1)(x)得到的二进制数先输出放置在十位上,g(1,2)(x)得到的二进制数后输出放置在个位上,十位上和个位上的二进制数组合得到一个两位二进制数组,将每一个二进制数组按顺序排列得到一组二进制流,(2,1,9)卷积码编码器会在上述得到的一组二进制流后面添加8位“0”二进制数,从而得到数据码字;
表一
S3,将上述步骤2中的数据码字输入到交织器中进行交织,并将交织后的数据码字读取,最终得到最终码字,其交织器首先对数据码字进行分组交织,将列数C预设为30,然后设数据码字的码字个数为U,找出满足不等式U≤RC的最小整数R,得到行数R,确定行数R后,得到矩阵A,接下来将数据码字逐行写入矩阵A中,若数据码字无法将R行写入完整,则用数据二进制比特流的0或1将R行其它空缺位置填补,将矩阵A进行矩阵变换得到新矩阵B,如矩阵A按照表二进行变换,最终将新矩阵B逐列读出数据,并将之前不存在数据码字中的数据二进制比特流的0或1去掉,得到最终码字;
表二
S4,将最终码字按照输出的排列顺序每三个一分组,从而转化成二维码,由最终码字根据图3得到的二维码是按照对应的ECC200表格规则进行逐行填充和分组,从而能够得到可供识别的二维码。
如图2所示,一种分层结构二维码的译码方法,包括如下步骤:
S5,用扫描二维码的扫描器扫描二维码获取二维码信息;
S6,将获取的二维码信息通过译码器译码得到源数据信息流,所述译码器由解调器、解交织译码器和维特比译码器构成,具体的步骤是:a、二维码信息通过解调器解调得到二进制码字流;b、将获取的二进制码字流进入解交织译码器进行解交织得到一组码字流,其解交织译码器具体算法是会构造一个解交织矩阵,其中规定解交织矩阵列数C为30,根据接收到的码字,设码字个数为U',找出满足不等式U'≤R'C中的最小整数R',得到行数R',确定行数R'后,得到矩阵D,将接收到的码字逐列写入矩阵D中,若输入码字无法将行数R'写入完整,则用数据二进制比特流的0或1将行数R'其它空缺位置填补,然后将矩阵D经过矩阵变换,如矩阵D按照表三进行变换,从而得到新矩阵E,接下来将矩阵E逐行读取,并将之前不存在数据码字中的数据二进制比特流0或1去掉,得到解交织后码字流,然后码字流进行软判决,从而得到判决后码字流;c、判决后码字流进入到维特比译码器,经过维特比译码器进行译码纠错,获得源数据二进制比特流,具体的是计算出相应的分支量度值,将进入某一状态的两条分支度量与之前状态路径量度累加求和,运用“回迹”法,比较到达当前状态的两支路径量度的大小,选择最大者作为新的状态路径量度存储起来,如果当前状态的两支路径量度大小相同,则可以任选一条作为新的状态路径量度存储起来,对译码器中的256个状态都实施“加、比、选”运算,在处理完所有的支路数后,依照网格图的支路连接关系,根据存储的判决结果按照存储相反的顺序进行反向找回,从而找出最大似然译码序列,得到的最大似然译码序列就是对信道传输中可能传输错误的码字流进行纠错后得到的输出码字,将最大似然译码序列运用网格图的支路关系得到编码时得到的源数据二进制比特流将源数据二进制比特流进行去二进制化得到源数据码字;d、利用译码规则将源数据码字解析出源数据信息流。
解交织前列间排序 |
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29} |
解交织后列间排序 |
{0,12,25,6,18,3,15,26,9,22,2,13,24,7,19,4,16,29,10,21,1,14,27,8,20,5,17,28,11,23} |
表三
本发明提供了一种分层结构二维码的编码方法,其具有避免被大规模污染或者被磨损或者被褶皱的二维码不能够使用的现象,提高了其可靠性和安全性。本发明由于二维码是由多个最终码字构成的,在二维码生成之后,即使发生了被大规模污染或者出现被磨损或者被褶皱的情况,通过扫描器依然能够识别和读取最终得到源数据二进制比特流信息,大大增加了二维码的识别可靠性和安全性。
本发明提供了一种分层结构二维码的译码方法,其具有计算复杂程度低和纠错还原效率高的优点,从而更加适应现在快速发展的需求。本发明将通过扫描得到的数据输送到译码器,由于所述译码器由解调器、解交织译码器和维特比译码器构成,译码器中的解调器对二维码信息进行解调,得到二进制码字流,接下来将获取的二进制码字流进入解交织译码器进行解交织得到一组码字流,码字流进行软判决,从而得到判决后码字流,然后判决后码字流进入到维特比译码器,经过维特比译码器进行译码纠错,获得源数据二进制比特流,最终利用译码规则将源数据二进制比特流解析出源数据信息流,实现了完成译码,其大大提高了译码的效率,使得二维码识别读取更加快速和便捷。
与现有技术相比,一方面本发明的编码方法能够避免被大规模污染或者被磨损或被褶皱的二维码不能扫描现象的发生,其有利于能够继续被识别和读取,提高了其可靠性和安全性;另一方面本发明的译码方法,具有计算复杂程度低和纠错还原效率高的优点,也大大提高了译码的效率,使得二维码识别读取更加快速和便捷,从而更加适应现在快速发展的需求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。