二维条形码码图印刷方法及解码方法
技术领域
本发明涉及一种用于存储各种经过编码的信息、特别是可以附着在各种载体上的二维条形码码图印刷方法和解读该二维条形码码图的方法。
背景技术
二维条形码是一种能被扫描识读的图形符号,该图形符号可用于存储各种经过编码的二进制信息,可以被附着在纸张等载体上。与其它信息存储方式相比较,二维条形码具有载体成本低廉,容易识读等优点。
常用二维条形码编码方式有PDF417编码方式和QR编码方式。
QR编码方式生成的二维条形码为矩阵码,利用成矩阵排列的黑白矩阵单元格存储信息。其识别特征为分布在图形角上的三个“回”型符号,如图1所示。QR矩阵码误识别几率小,图形中用于存储有效信息的面积大,适合于采用数码相机获取图像的应用场合;但是这种编码方式生成的二维条形码识别算法复杂,不适合于以扫描方式获取图像的应用场合,必须在整体条码图像扫描完之后才能开始进行识别。
PDF417编码方式与QR编码方式的类型不同,PDF417编码方式利用相邻的黑条和白条宽度的比例值来存储信息,称为条空(bar-space)比码,它的识别特征为图形两侧具有固定条空比的黑白间隔线条,如图2所示。PDF417编码方式生成的二维条形码具有最小的误识别几率,特征识别算法简单,具有最大的容错能力(理论上最大能够容许50%的图像破损),对图形的线性和非线性几何失真具有最大的容忍度,可以适用于各种图像获取方式的应用场合,可以在扫描图像的同时进行解码;但其对图像的质量(印刷分辨率)要求高,存储容量相对较小(最大能够存储929个929进制编码的数字),识别设备成本高。
技术方案
本发明的目的在于提供一种在印刷载体上印制二维条形码码图的方法,这种二维条形码码图存储容量大、识别运算量小、而且可以在扫描的同时进行解码。
本发明的另一个目的在于提供一种解读上述二维条形码码图中信息的方法。
本发明公开了一种在印刷载体上印制可机读的二维条形码码图的方法,该二维条形码码图利用矩阵格存储信息,其特征在于,包括以下步骤:在沿印刷载体走纸方向最前方印刷由矩阵行组成的码图上边界;在印刷载体两侧最外沿分别印刷由带定位孔的矩阵列组成的码图左边界和右边界,在左右边界之间、上边界之下印刷位流(bit stream)区,
所述矩阵格的边长可以根据以下公式选取:
R2/R1*L>=4
其中R1为在所述载体上印刷所述码图时的分辨率,R2为图像传感器读取所述码图时的分辨率,L为矩阵格的设计边长。
本发明的二维条形码码图印刷方法,还可以包括如下特征:
本发明可以采用一个白矩阵格做定位孔;采用一行黑矩阵格作为上边界;分别用三列矩阵格作为左边界和右边界,三列矩阵格的两侧各是一列黑矩阵格,中间一列是黑矩阵格和白矩阵格组合排列。
本发明的位流区可以包括多个信息块,每个信息块包括多个矩阵行;信息块中可以包含纠错码。
位流区中信息的排放方式可以是以行为主从上至下排列;也可以是以列为主从左至右或从右至左排列。
在载体上码图的左边界之左边和右边界之右边有空白区。
本发明还公开了一种二维条形码解码方法,将附着在载体上的、利用矩阵格存储信息的二维条形码码图恢复成二进制信息,其特征在于包括如下步骤:
A.探测码图的上边界,计算并保存上边界的倾斜度;
B.探测码图的左边界和右边界,并根据上边界的倾斜度估算出第一对定位孔的区域;
C.在估算的区域中统计白像素的数量,计算出第一对定位孔的中心坐标;
D.计算出第一对定位孔之间、在一条直线上间距为一个矩阵格边长的矩阵格的中心坐标;并根据该中心坐标从图像中读取每个矩阵格1比特的位流信息;
E.根据前一对定位孔的中心坐标以及矩阵格的边长估计其下一对定位孔的区域,并且从中探测计算出定位孔的中心坐标;如果定位孔的中心坐标探测不成功则结束码图解读,否则进入下一步;
F.根据该对定位孔的中心坐标计算并保存其之间的矩阵格的中心坐标;并根据所述中心坐标读取相应位置的位流信息;
G.根据保存的两行矩阵格的中心坐标计算两行之间的所有矩阵格的坐标,并读取相应矩阵格的位流信息;
回到步骤E。
本发明的二维条形码解码方法还可以包括以下特征:
在步骤C中,当白像素的个数大于(N-1)*(M-1)、小于(N+1)*(M+1)时则认为该区域内有一个有效的定位孔,其中N、M为矩阵格的两边之长。
在步骤D中读出码图中的总行数信息,并根据所述总行数结束解码。
每读取(S+E)个字节信息后进行纠错运算,输出纠错成功的S个字节的正确信息。
按照本发明方法在载体上印刷的二维条形码码图,采用简易矩阵码存储各种二进制信息,与QR编码方式生成的二维条形码相比,识别算法简单;可以在扫描的同时进行解码。简易矩阵码采用定位孔作为识别标志,与PDF417相比同样面积下存储信息的面积大,提高了相同面积印刷载体的存储容量。
本发明的简易矩阵码的解码算法,可以在扫描的同时进行解码,用定位孔作为图形识别的定位标志,识别速度快、识别算法简单。
附图说明
本发明包括以下附图:
图1是QR编码方式生成的一种二维条形码码图;
图2是PDF417编码方式生成的一种二维条形码码图;
图3是本发明方法印制的简易矩阵码编码方式生成的一种二维条形码码图;
图4是应用本发明方法印制的二维条形码卡的一个实施例的矩阵行像素排列格式;
图5是本发明的简易矩阵码的解码方法。
实施例
采用CIS(接触式图像传感器)的扫描仪光照均匀,获取的图像与原图像相比非线性失真小,获取的图像质量好,因此可以在二位条形码卡上设计一种结构最大限度简洁化的简易矩阵码,从而能提高相同面积印刷载体的存储容量。本发明的二维条形码卡包括载体和附着于载体之上的由简易矩阵码编码方式生成的码图,一种实施例见图3,码图的边界轮廓是矩形,图中的箭头表示扫描阅读二维条形码卡时的走纸方向,设与走纸方向平行的矩阵单元组成码图的列,与走纸方向垂直的矩阵单元组成码图的行。
整个码图由大小相等的矩阵格组成,包括上边界10、左边界12、右边界14、定位孔20以及位流(bit stream)区16。上边界10是一行黑矩阵格。左边界12和右边界14都由三列矩阵格组成,这三列矩阵格的两侧分别是一列黑矩阵格,中间一列由黑白矩阵格间隔排列,其中白矩阵格即为定位孔20。在上边界10之下、左边界12和右边界14之间是位流区16,位流区16用于存放有效信息,边界行和列用于图像识读时起定位作用。
带有定位孔20的矩阵列可以由如图3所示由一个黑矩阵格和一个白矩阵格间隔排列,也可以由多个黑矩阵格和一个白矩阵格间隔排列,还可以由黑矩阵格和白矩阵格以其它组合间隔排列,都属于本发明公开和保护的内容。
位流区16的矩阵格为信息的存储单元,每个矩阵格存放一个比特(bit)的信息,例如黑矩阵格存储“0”,白矩阵格存储“1”。位流区16中信息的排放方式可以是以行为主从上至下排列,也可以是以列为主从左至右或者从右至左排列。
码图的长度方向和宽度方向上都包括整数个矩阵格,矩阵格可以是在行的方向和列的方向上具有相同数量像素的方格,也可以是在行的方向和列的方向上具有不相同数量像素的矩形格,其矩阵格数可根据其附着载体的大小决定,位流区的长度和宽度位也因而确定。可以根据需要在位流区加入纠错码,纠错码可以按照现有技术设计。
如前面所述,由CIS获取的图像非线性失真较小,也就是说图形内部结构的相对位置基本固定,因此从扫描获得的图像中准确定位矩阵图形成为识读矩阵的唯一重要任务,而位于码图两侧、处于一条水平线上的左右定位孔20正是为了达到此目的而设计的。当一对定位孔(左右各一个)被识别出来后,该行所有其它矩阵格的中心位置也就能被准确计算出来并保存,从而其位流信息即可直接获得;根据上一对定位孔的位置就可以估计并计算出、保存其下面一对定位孔的位置,该行所有矩阵格的中心位置也就能被准确计算出来,从而上述两行之间的矩阵格的位置及其位流信息即可根据矩阵格的边长通过简单的计算获得。因此用定位孔作为图形识别的定位标志,识别速度快、识别算法简单、扫描和识别可以并行处理。
图像传感器获取的图像有可能存在失真,例如N*N个像素的矩阵格失真成(N+1)*(N+1)个像素、或者失真成(N-1)*(N-1)个像素的矩阵格,可见N越小相对误差越大,当N<=3时相对误差将很容易达到30%乃至40%。经验表明,当矩阵格的边长为大于等于4个扫描像素时具有可靠的识别效果。设印刷的分辨率为R1,矩阵格的设计边长为L个像素,图像传感器的分辨率为R2,则应满足R2/R1*L>=4(平均每个矩阵格有4*4=16个像素)才能可靠的识别图形。
每个定位孔是一个白矩阵格,其周围有一圈同样大小的黑矩阵格,因此在一个足够大的区域内包括且仅仅包括一个白的小孔。统计该区域内的白像素的个数,同时将它们的横坐标与纵坐标分别累加,如果白像素的个数在(N-1)*(M-1)和(N+1)*(M+1)之间则认为该区域内有一个有效的定位孔,N、M为矩阵格的两边之长,单位是像素。定位孔的中心坐标通过上述坐标累加值分别除以白像素的个数获得。根据上述原理,我们结合矽感科技有限公司的接触式图像传感器(Contact ImageSensor)SV252A8设计了一个具有实际应用价值的方案,该方案用于将一个二进制的计算机文件存于图形中,便通过扫描读取再识别恢复出原二进制文件。
SV252A8的分辨率为200DPI,共有448个图像传感单元,它们按200DPI的点间距排成一线。为了适应硬件特性,以及最有效的提高相同载体面积上的存储容量,我们采用的码图排列方式见图4。
每个矩阵格的边长为4个像素,传感器两端分别留出8个像素作为冗余像素,这样当图形出现一定偏斜时也能被图像传感器感应到。两边的定位孔以及定位孔两侧的黑矩阵格共占用12个像素,剩下的408个像素构成位流区16用于存储二进制信息,每行有408/4=102个矩阵格,可存放二进制信息102比特。
为了简化图形识读算法,可以将存放于位流区16的信息按一定格式组织。例如位流区按每二十行分为一个块,每个块的信息存储容量为102bits*20/8=255 bytes。为了纠正可能出现的错误,在每255个字节中用32个字节存放由reed-solom纠错算法(一种高性能的纠错算法)生成的纠错码,因此每块位流区的实际容量为223字节,这些纠错码最多可以纠正255字节中的任何16字节的错误,纠错比率为6.27%。位流区是整数块(大于等于1),信息字节数不够填满最后一块位流区时,可用预先定义的字节填充,在完成reed-solom纠错运算之后将填充字节丢弃即可。
可以在位流区16的起始处占用一定的字节存放二维条形码卡本身的特定信息例如版本号、信息的字节长度等。版本号的作用是使软件区别不同类型的信息结构,信息的字节长度的作用是使软件识读了第一块信息之后就能知道图形的总长度,以便决定何时停止扫描图像。
本发明的二维条形码卡可以通过图文扫描方式以行为单位识读,结合简易矩阵码的解码软件即可恢复出二进制信息,简易矩阵码的解码方法见图5,包括如下步骤:
1.探测码图的上边界10,计算并保存上边界10的倾斜度;
2.探测左边界12和右边界14;
3.根据上边界的位置和倾斜度、左边界12和右边界14的位置估算出第一对定位孔20的区域;
4.在估算的定位孔20的区域中统计白像素的数量,当白像素的个数大于(N-1)*(N-1)、小于(N+1)*(N+1)时则认为该区域内有一个有效的定位孔,其中N为矩阵格的边长;分别计算出左定位孔和右定位孔的中心坐标;
5.因为同一行矩阵格的中心坐标在一条直线上并且间距相等,根据左定位孔和右定位孔的中心坐标和上边界的倾斜度,计算并且保存第一行所有矩阵格的中心坐标;
6.根据第一行所有矩阵格的中心坐标从图像中读取相应位置的位流信息(例如像素为“黑”表示二进制信息“0”,像素为“白”表示二进制信息“1”);
7.根据前一对定位孔的中心坐标以及矩阵格的边长估计下一对定位孔的区域,并且从中探测计算出定位孔的中心坐标;如果定位孔的中心坐标探测成功则进行下面的计算,否则结束本次图形识别;
8.计算并且保存该行所有矩阵格的中心坐标(与第5步的计算方法相同);
9.根据每一个矩阵格的中心坐标从图像中读取相应位置的位流信息;
10.根据保存的两行矩阵格的中心坐标计算两行之间的所有矩阵格的坐标(求上下两个矩阵格中心坐标的平均值),同时读取相应的位流信息;
11.回到第7步。
由于扫描获得的图像不可能与原图像完全一致,图像中亮度变化剧烈的地方失真会很严重,原图像中方形的定位孔可能变成不规则的形状,如果搜索方形的或类似方形的小孔算法将会比较复杂,由于采用了直接获得矩阵格的中心坐标的做法,简化了简易矩阵码的识别算法。
如果位流区16中含有纠错码,设每S个字节附加E个字节纠错码,则在每次读取了(S+E)个字节信息后进行纠错运算,如果纠错成功输出S个字节的正确信息,否则退出识别流程,也可以继续进行识别。