專利名稱:二維條碼的編碼和解碼方法
技術領域:
本發(fā)明涉及一種二維條碼的編碼方法和使用線性、接觸型或非接觸型圖像傳感器掃描解碼的方法。
背景技術:
條碼是一組規(guī)則排列的條、空、及其對應字符組成的標記,用以表達一定信息。一維條碼作為一種廉價、簡單、快捷、準確的數(shù)字信息傳遞方式,最早由Kermod于上世紀20年代提出。而二維條碼則是由Iterface Mechanisms公司于1970年開發(fā)。一維條碼通過在水平方向上排列的條、空表達信息,在垂直方向不表達信息。相比之下,二維條碼在垂直方向也能表達信息,其存儲的信息量相對予一維條碼大大增加了。早期一維條碼數(shù)據(jù)量較小,只能存儲字母和數(shù)字,尺寸比較大,損壞后便不能讀取。二維條碼除了保持了一維條碼所具有的印刷簡便,制造成本低,具有優(yōu)秀的抗磁場、抗輻射能力等優(yōu)點以外,在采用了Reed-Solomon糾錯算法之后,抗磨損和擦傷的能力大大提高。
常見的二維條碼主要有PDF 417、QR、DataStrip和Data matrix等。他們可以分成兩類層排式二維條碼和矩陣式二維條碼。層排式二維條碼是由許多截短的一維條碼層排而成,如PDF 417(美國專利5304786),它是由多個一維條碼外加部分控制圖案組成。它的缺點在于采用了一個基于929個碼字(4個黑白間隔)的編碼方式,每個條碼字符只能代表9.2位數(shù)據(jù),大大降低了單個PDF417條碼的數(shù)據(jù)量。
QR編碼(AIM International Symboloby Specification-QR Code),是由日本公司Denso Corp開發(fā)的用于工業(yè)自動化的矩陣式二維條碼,該條碼只能是方形,而且不能掃描同步解碼,而且存儲量有限。其最大數(shù)據(jù)容量,在其最大面積177個Z尺寸和糾錯能力最低的時候750個糾錯字節(jié)時,為2956個字節(jié)。
另一種是PCT專利WO 0051072中所描述的高密度二維矩陣式條碼,主要用于儲存生物統(tǒng)計信息。
技術方案本發(fā)明的目的在于提供一種便于線性接觸型或非接觸型光學掃描器譯解的大信息量、高冗余度、多抗損等級、條碼長寬和印刷解析度可變的二維條碼編碼方法。本發(fā)明的另一個目的在于提供一種利用線性、接觸型或非接觸型圖像傳感器掃描后解碼、或者掃描并行解碼該二維條碼的方法。
本發(fā)明公開的一種二維條碼編碼方法,輸入二進制數(shù)據(jù)信息,輸出可附著在載體上的二維條碼,包括下述步驟A.根據(jù)糾錯算法和糾錯等級計算所述二進制數(shù)據(jù)信息的糾錯碼,將糾錯碼加入所述二進制數(shù)據(jù)信息中形成新的比特流;B.根據(jù)比特流大小確定條碼段數(shù),將比特流分成大小相等的數(shù)據(jù)段,最后的數(shù)據(jù)不足一段時用條碼填充符補足;C.在各段中分別加入段控制信息;根據(jù)載體的形狀和尺寸決定條碼的印刷解析度、長和寬;在條碼中加入開始、結(jié)束模式,加入左、右側(cè)定位模式;輸出條碼。
上述步驟A中將糾錯碼加入所述比特流中后,再將所述比特流分成大小相等的數(shù)據(jù)塊,將各個數(shù)據(jù)塊中的數(shù)據(jù)交叉排列。
上述步驟B中將所述比特流分成所述數(shù)據(jù)段后,再選擇掩膜種類,對各段中的數(shù)據(jù)對掩膜進行異或運算,獲得新的比特流。
上述步驟A中先對欲編條碼的所述二進制數(shù)據(jù)信息進行二次編碼,獲得新的二進制數(shù)據(jù)信息比特流。
上述步驟C中的所述開始控制模式包括開始控制符和結(jié)尾條;結(jié)束模式包括結(jié)束控制符和結(jié)尾條,所述開始控制符的結(jié)構(gòu)為條、空交替沿條碼寬度方向排列,條、空的寬度分別為[3∶1∶1∶2∶2∶2],以單元寬度尺寸為單位;結(jié)束控制符的結(jié)構(gòu)為條、空交替沿條碼寬度方向排列,條、空的寬度分別為[3∶2∶2∶1∶1∶2],以單元寬度尺寸為單位;結(jié)尾條的寬度為3倍單元寬度。
上述步驟C中所述段控制信息包括總段數(shù)、交錯標識、糾錯算法等級,掩碼類型和本段序列號;所述段控制信息中包括糾錯碼。
本發(fā)明公開的一種二維條碼解碼方法,使用一維線陣接觸型或非接觸型圖像傳感器獲取條碼圖像數(shù)據(jù),輸出編碼前的二進制數(shù)據(jù)信息,包括下述步驟A.在圖像數(shù)據(jù)中探測條碼開始模式和結(jié)束模式,記錄開始模式和結(jié)束模式的位置坐標;B.根據(jù)開始和結(jié)束模式的位置和形狀計算掃描方向與條碼的角度、判斷條碼是否頭尾反向、是否左右鏡像;根據(jù)開始或結(jié)束模式判斷條碼印刷解析度;C.根據(jù)掃描方向與條碼的角度計算條碼在垂直方向的投影,判斷獲得所有段分隔符的位置;D.從第一個段分隔符開始,根據(jù)印刷分辨率探測左側(cè)行定位模式和右側(cè)行定位模式,計算各行所有單元的坐標;E.根據(jù)段分隔符的位置讀取所有段控制信息;F.對各段控制信息進行糾錯,獲得并存儲段控制信息;G.根據(jù)段分隔符的位置和各行單元的坐標讀取條碼數(shù)據(jù)符區(qū)的全部數(shù)據(jù)信息,恢復比特流;H.根據(jù)段控制信息對于比特流進行可選擇的反掩膜計算和反交錯排列,然后再用相應的糾錯算法和糾錯等級進行糾錯計算;恢復條碼編碼前的比特流信息。
上述步驟A中可以先將掃描獲得的圖像數(shù)據(jù)進行圖像增強預處理,再進行二值化處理。
本發(fā)明公開的一種二維條碼解碼方法,使用一維線陣接觸型或非接觸型圖像傳感器獲取條碼圖像數(shù)據(jù),輸出編碼前的二進制數(shù)據(jù)信息,包括下述步驟A.掃描輸出圖像數(shù)據(jù)至緩沖存儲器,并在圖像數(shù)據(jù)中探測開始模式或者結(jié)束模式;B.如果探測到結(jié)束模式,則為條碼頭尾反向,轉(zhuǎn)為掃描后解碼模式;C.如果探測到開始模式,判斷是否左右鏡像,是則轉(zhuǎn)為掃描后解碼模式;D.根據(jù)開始模式判斷條碼印刷解析度;E.根據(jù)條碼印刷解析度獲得新一行的掃描數(shù)據(jù);F.判斷是否為段分隔符,否則回到步驟E;G.探測左右側(cè)行定位模式;H.根據(jù)左右側(cè)行定位模式定位并讀取段控制信息;I.對段控制信息進行糾錯,獲得并存儲段控制信息;J.根據(jù)段序號判斷掃描是否正確地順序進行;否則轉(zhuǎn)掃描后解碼程序;是則根據(jù)段控制信息判斷數(shù)據(jù)是否交錯,如果有數(shù)據(jù)交錯,則轉(zhuǎn)掃描后解碼程序;
K.根據(jù)左右側(cè)行定位模式定位讀取比特流信息;L.根據(jù)段控制信息中的糾錯算法和糾錯等級進行校驗解碼,恢復并輸出比特流信息;M.根據(jù)段控制信息判斷下一行是否段分隔符,否則回到步驟K;N.判斷下一行掃描數(shù)據(jù)是否結(jié)束模式,否則回到步驟G;是則條碼掃描結(jié)束。
上述步驟F中判斷一行掃描數(shù)據(jù)是否為段分隔符的方法是,將該行掃描數(shù)據(jù)的值之和與開始模式的一行掃描數(shù)據(jù)的值之和相比較,大于開始模式的一行掃描數(shù)據(jù)的值之和的1.5倍時判斷為段分隔符。
本發(fā)明公開的二維條碼編碼方法,設置了寬度可調(diào)的開始和結(jié)束模式,可以適應條碼載體的形狀和大小,也可以適應不同的條碼印刷解析度,在解碼方法中能夠辨別是否頭尾反向。由于開始和結(jié)束控制符的特殊結(jié)構(gòu),在解碼方法中可以辨認條碼是否左右鏡像。本編碼方法設置了數(shù)據(jù)分段模式,加入段控制信息,加強了對于不同長度信息的編、解碼支持;左、右定位模式與數(shù)據(jù)分段的定位方式,特別適應一維線陣接觸型或非接觸型圖像傳感器手動掃描獲取條碼圖像數(shù)據(jù),增強了掃描定位準確率,在解碼方法中如果有行定位模式被破壞,可以通過段分隔符的位置估算定位,避免了行定位模式的累積誤差??蛇x的數(shù)據(jù)交叉排列方式加強了編碼抗損程度。本發(fā)明的二維條碼編碼方法具有編碼尺寸可調(diào),長寬比可調(diào),糾錯等級可調(diào),支持多種信息格式的優(yōu)點。本發(fā)明的二維條碼解碼方法在掃描的同時進行解碼,識別速度快、識別算法簡單。
本發(fā)明包括以下附圖圖1是本發(fā)明的一種二維條碼;圖2是本發(fā)明的二維條碼的分解圖;圖3是本發(fā)明的二維條碼的一種有兩個開始控制符的開始模式;圖4是本發(fā)明的二維條碼的一種有三個開始控制符的開始模式;圖5是本發(fā)明的二維條碼的一種有兩個結(jié)束控制符的結(jié)束模式;圖6是本發(fā)明二維條碼的數(shù)據(jù)段交叉排列編碼的示意圖;圖7是本發(fā)明二維條碼的一種段控制信息的實施例;圖8是本發(fā)明采用的三種數(shù)據(jù)掩膜;圖9是本發(fā)明的二維條碼的編碼流程圖;
圖10是本發(fā)明的二維條碼的掃描后解碼流程圖;圖11是本發(fā)明的二維條碼的掃描并行解碼流程圖。
實施例在條碼識讀設備中接觸式掃描器的光照均勻,獲取的圖像與原圖像相比非線性失真小,圖像質(zhì)量好,因此可以設計一種結(jié)構(gòu)最大限度簡潔化的矩陣式二維條碼,從而能提高相同面積印刷載體的信息存儲容量。
如圖1所示本發(fā)明的二維條碼由矩形單元組成、外部輪廓也為矩形。圖2是本發(fā)明的二維條碼的分解圖,本發(fā)明的二維條碼包括開始模式10、結(jié)束模式20、左側(cè)定位模式30、右側(cè)定位模式40、條碼數(shù)據(jù)符區(qū)50和位于條碼數(shù)據(jù)符區(qū)的段分隔符60。
本發(fā)明的開始模式10由開始控制符101和結(jié)尾條105組成。開始控制符101由不同條寬的3個條和不同空寬的3個空間隔組成,沿條碼數(shù)據(jù)符區(qū)50的寬度方向排列。在一個二維條碼中開始控制符101可以是一個也可以是多個,由載體的形狀大小決定。如圖3所示是由2個開始控制符101和一個結(jié)尾條105組成的開始模式10;圖4是是由3個開始控制符101和一個結(jié)尾條105組成的開始模式10。
本發(fā)明的結(jié)束模式20是由結(jié)束控制符201和結(jié)尾條105組成。結(jié)束控制符201由不同條寬的3個條和不同空寬的3個空間隔組成,沿條碼數(shù)據(jù)符區(qū)50的寬度方向排列。在一個二維條碼中結(jié)束控制符201可以是一個也可以是多個,由載體的形狀大小決定。如圖5所示是由2個結(jié)束控制符201和一個結(jié)尾條105組成的結(jié)束模式20。
開始模式10和結(jié)束模式20中的開始控制符101和結(jié)束控制符201的數(shù)量一般相等、結(jié)尾條105也都是寬度為3個單元寬度尺寸。
因為開始模式10與結(jié)束模式20的結(jié)構(gòu)不同,因此通過掃描讀取其不同點,可以判斷條碼是否被上下顛倒或者左右鏡像。
本發(fā)明二維條碼的頭部通過開始模式10中開始控制符101的的重復次數(shù)確定寬度,如圖3、圖4中的開始控制符101的條、空的寬度分別為[3∶1∶1∶2∶2∶2],以單元寬度尺寸為單位。在同一個條碼中結(jié)束控制符201的寬度與開始控制符101相等,重復次數(shù)也相等。如圖5中的結(jié)束控制符201的條、空的寬度分別為[3∶2∶2∶1∶1∶2],以單元寬度尺寸為單位。所以條碼的寬度為C個單元寬度;其中C=11*N+3,N=1,2,…,N是整數(shù),為開始控制符重復的次數(shù),N的上限由載體的形狀大小決定。
當采用手持式掃描器識讀二維條碼時,掃描方向與條碼會存在角度,掃描速度不可能均勻,掃描器掃過條碼的軌跡有一定的不確定性,因此在條碼中加入與條碼儲存的信息無關的控制信息,可以提高掃描識讀成功率,本發(fā)明二位條碼的左側(cè)定位模式30和右側(cè)定位模式40正是為此目的而設計的。
左側(cè)定位模式30和右側(cè)定位模式40分別是由2列寬度為一個單元寬度尺寸的條、以及位于該兩列之間的一列寬度為一個單元寬度尺寸、由條和空交錯排列的單元組成;左側(cè)定位模式30和右側(cè)定位模式40中的條和空與條碼數(shù)據(jù)符區(qū)50中的單元大小相同。左、右側(cè)定位模式的中間列可以由如圖1、圖2所示的由一個條和一個空間隔排列,也可以由多個條和一個空間隔排列,還可以由條和空以其它組合間隔排列,都屬于本發(fā)明公開和保護的內(nèi)容。
如前面所述,由CIS獲取的圖像非線性失真較小,也就是說圖形內(nèi)部結(jié)構(gòu)的相對位置基本固定,因此可以從掃描獲得的圖像中準確定位矩陣圖形,而位于條碼兩側(cè)的左、右側(cè)定位模式中處于一條水平線上的條空分布完全一樣,正可以達到此目的。當左右一對空或者條被識別出來后,該行所有其它單元的中心位置也就能被準確計算出來并保存,從而其位流信息即可直接獲得;根據(jù)上一對左、右側(cè)定位模式中條空得位置就可以估計并計算出、保存其下面一行單元的位置。因此用左、右側(cè)定位模式作為圖形識別的定位標志,識別速度快、識別算法簡單、掃描和識別可以并行處理。
如圖2所示,條碼數(shù)據(jù)符區(qū)50分成大小相等的數(shù)據(jù)段,數(shù)據(jù)段之間用段分隔符60分隔。段分隔符60由一行橫向的連續(xù)條組成。條碼數(shù)據(jù)符區(qū)50為信息的存儲區(qū),每個單元存放一個比特(bit)的信息,例如條代表“0”,空代表“1”。條碼數(shù)據(jù)符區(qū)50中信息的排放方式可以是以行為主從上至下排列,也可以是以列為主從左至右或者從右至左排列,不同的選擇可以在段控制信息中存儲。
本發(fā)明的可以是在行的方向和列的方向上具有相同數(shù)量單元,也可以是在行的方向和列的方向上具有不相同數(shù)量單元,可根據(jù)其附著載體的大小決定。
在條碼數(shù)據(jù)符區(qū)50中,可以用里德-所羅門算法來實現(xiàn)錯誤的校驗和糾正。里德-所羅門算法,于1960年由Reed-Solomon共同提出的,它是已知的代數(shù)編碼糾錯方式中糾錯能力最強的數(shù)編碼方式,是一種本領域技術人員熟知的標準算法。在本編碼中我們對與定長的數(shù)據(jù)塊進行代數(shù)運算從而生成糾錯碼。數(shù)據(jù)字節(jié)與糾錯字節(jié)組合成長度大小為127個字節(jié)數(shù)據(jù)塊。
相對四個不同等級而言,相應的糾錯能力列表如下
由上表可見糾錯算法雖然可以糾正識讀錯誤,但糾錯等級越高就會產(chǎn)生越多的糾錯碼,降低了條碼的信息密度。
如果條碼被損壞就會使識讀成功率降低,一般對條碼的人為破壞主要包括污垢、皺褶、殘損、穿孔,通常對條碼的破壞在載體上是連續(xù)的,因此往往造成數(shù)據(jù)的連續(xù)錯誤。把數(shù)據(jù)交叉排列可以提高條碼有人為破壞時的識讀率。見圖6,經(jīng)過校驗的數(shù)據(jù)塊首先被分成多個固定長度,在圖6中每個數(shù)據(jù)塊的長度是127字節(jié),有A1,A2,...A127;B1,B2,...B127和C1,C2,...C127三塊,在條碼數(shù)據(jù)符區(qū)50中多個數(shù)據(jù)塊交錯排列,如A1,B1,C1,A2,B2,C2,...。圖6是對三塊長度為127個字節(jié)的數(shù)據(jù)的交錯排列示意圖,實際編碼中可是4個、5個、或更多個數(shù)據(jù)塊交錯排列。數(shù)據(jù)塊交錯排列法大大加強了條碼被人為破壞后的識讀率,而且并沒有加大實際的數(shù)據(jù)量。
如果數(shù)據(jù)量很大,單個條碼過長,在粗糙的環(huán)境下左、右側(cè)定位模式有損壞時掃描識讀的行信息定位就會不準。為此,本發(fā)明的編碼方法除了對數(shù)據(jù)分塊之外,還對條碼進行物理上分段,使用段分隔符60將條碼分成長度固定的數(shù)據(jù)段。在掃描過程中通過對于段分隔符的定位,可以在左右定位模式被污染或缺失的情況下估算行定位信息。
本發(fā)明的編碼方法在每一段內(nèi)的開始部分設置段控制信息,進一步提高條碼識讀率。如圖7所示是本發(fā)明二維條碼的一種段控制信息的實施例,該段控制信息包括3個各15個比特信息,記錄著總段數(shù),交錯標識、所羅門糾錯等級,掩碼類型(4種狀態(tài)之一)和本段序列號。圖中e0,e1,...e9代表糾錯位;a0,a1,...a4代表條碼總段數(shù);b1,b2代表糾錯等級,b3,b4代表掩碼模式;c1,c2,...c4代表本段序列號。這些信息有助于成功解讀段內(nèi)信息??偠螖?shù)信息、交錯標識、所羅門糾錯等級和掩碼類型在每一段的開始進行重復,減少了由于段控制信息不能復原、被破壞而造成的數(shù)據(jù)信息丟失、或者掃描解碼的失敗。
當條碼中出現(xiàn)大面積的深色或淺色區(qū)域時印刷和識讀時會產(chǎn)生漏斗效應,大面積同色區(qū)域中的小塊異色區(qū)被同色區(qū)掩蓋。用固定的掩膜方式對于寫入的編碼進行異或,可以減少條碼中大面積同色區(qū)域出現(xiàn),使數(shù)據(jù)區(qū)域中條和空成均勻的分布狀態(tài)。這樣也進一步避免了數(shù)據(jù)編碼與功能模塊的混淆。如圖8展示3種掩膜模式。
本發(fā)明的編碼方法對相應的字符集(數(shù)字、ASCII、漢字)分別運用特定的二次編碼方式,所以大大增加了本條碼的容量,可以用13BIT表示一個漢字、10Bit表示一個三位的十進制數(shù)字字符,7Bit表示一個ASC127編碼。
本編碼中可進行二次編碼的字符集列表如下■GB2312GB3212共有6763編碼,每個編碼占用兩個字節(jié),存在大量的剩余編碼,用13bit編碼就可以完全編碼6763個GB2312碼(還剩余1429個編碼),因此每個漢字可以節(jié)省3個bit。
■ASC127ASCII編碼中前128個編碼的最高位為零,將其丟棄采用7bit編碼,因此每個英文字符可以節(jié)省1個bit。
■數(shù)字字符0-9將每三個連續(xù)數(shù)字劃分成一組,如果最后一組不足三個數(shù)字用零填充。將每組數(shù)字轉(zhuǎn)換成3位十進制數(shù),再用10bit二進制數(shù)編碼,因此平均每個數(shù)字僅占用3.3個比特。
■8bit字節(jié)非以上三種類型的數(shù)據(jù)都可以當成8bit字節(jié)數(shù)據(jù)處理,其二次編碼分為非壓縮編碼與壓縮編碼。非壓縮編碼首先輸出bit0,隨后就是8bit字節(jié)數(shù)據(jù)本身;壓縮編碼首先輸出bit1,隨后是數(shù)據(jù)的壓縮編碼,壓縮與解壓縮算法待定。
■用戶自定義數(shù)據(jù)標記編碼規(guī)則4bit類型編碼與8bit數(shù)據(jù)長度編碼與數(shù)據(jù)字節(jié)的和,數(shù)據(jù)字節(jié)最多256字節(jié),每個字節(jié)8bits。
圖9是本發(fā)明的二維條碼的編碼方法,包括如下步驟1、對欲編條碼的信息進行二次編碼,獲得數(shù)據(jù)流(比特流);2、根據(jù)糾錯等級計算糾錯碼,將糾錯字節(jié)加入比特流中,再將比特流進行分塊;例如圖6所示127字節(jié)為一塊,如果采用4級所羅門算法,則每塊有數(shù)據(jù)位63字節(jié),糾錯位64字節(jié);3、將各個數(shù)據(jù)塊中的數(shù)據(jù)交叉排列,獲得新的比特流;4、根據(jù)比特流大小確定段數(shù),將比特流分成大小相等的數(shù)據(jù)段,可以用條碼填充符補足最后的數(shù)據(jù)段;5、選擇掩膜種類,對各段中的數(shù)據(jù)進行掩膜計算,獲得新的數(shù)據(jù)流;6、在各段中分別加入段控制信息;根據(jù)載體的形狀和尺寸決定條碼的印刷解析度、長和寬;在條碼中加入開始、結(jié)束模式,加入左、右側(cè)定位模式;輸出條碼。
本發(fā)明的二維條碼的特性便于一維線陣接觸型(CIS)或非接觸型圖像傳感器讀取與解碼。一維線陣接觸型圖像傳感器的主要特點在于11的接觸式掃描。圖10是本發(fā)明的二維條碼的掃描后解碼流程圖,所包括的步驟按時間順序為1、通過一維線陣接觸型或非接觸型圖像傳感器獲取條碼圖像,對于獲得的圖像數(shù)據(jù)進行預處理,例如圖像增強(image enhance增加對比度)等,然后對圖像數(shù)據(jù)進行二值化處理;2、在圖像數(shù)據(jù)中探測條碼開始模式和結(jié)束模式,記錄開始模式和結(jié)束模式的位置坐標;3、根據(jù)開始和結(jié)束模式的位置和形狀計算掃描方向與條碼的角度、判斷條碼是否頭尾反向、是否左右鏡像;根據(jù)開始或結(jié)束模式判斷條碼印刷解析度;4、根據(jù)掃描方向與條碼的角度計算條碼在垂直方向的投影(將條碼上各行圖像數(shù)據(jù)相加,不同的單元排列將會獲得不同的值),判斷所有段分隔符(60)的位置;5、從第一個段分隔符開始,根據(jù)印刷分辨率探測左側(cè)行定位模式(30)和右側(cè)行定位模式(40),計算各行所有單元的中心坐標;6、根據(jù)段分隔符(60)的位置讀取所有段控制信息;7、對各段控制信息進行糾錯,獲得并存儲總段數(shù)、糾錯等級、交錯標識、掩膜模式、各段編號等段控制信息;8、根據(jù)段分隔符(60)的位置讀取條碼數(shù)據(jù)符區(qū)(50)的全部數(shù)據(jù)信息,恢復比特流;9、對于比特流進行反掩膜,反交錯,然后用里德索羅門算法進行糾錯;10、恢復條碼編碼前的比特流信息,再對二次編碼進行解碼。
圖11是本發(fā)明的二維條碼的掃描并行解碼流程圖,掃描同步解碼包括如下步驟1、掃描輸出圖像數(shù)據(jù)至緩沖存儲器,并在圖像數(shù)據(jù)中探測開始模式(10)或者結(jié)束模式(20);2、如果探測到結(jié)束模式(20),則為條碼頭尾反向,轉(zhuǎn)為掃描后解碼模式;3、如果探測到開始模式(10),判斷是否左右鏡像,是則轉(zhuǎn)為掃描后解碼模式;4、根據(jù)開始模式判斷條碼印刷解析度;5、根據(jù)條碼印刷解析度獲得新一行的掃描數(shù)據(jù);6、計算該掃描數(shù)據(jù)在垂直方向的投影,投影值為開始模式投影值的1.5倍以上時認為是段分隔符(60);判斷是否為段分隔符,否則回到第5步;7、探測左右側(cè)行定位模式(30),(40);8、根據(jù)左右側(cè)行定位模式(30),(40)定位并讀取段控制信息;9、對段控制信息進行糾錯,獲得并存儲總段數(shù)、糾錯等級、交錯標識、掩膜模式、本段序號等控制信息;
10、根據(jù)段序號判斷掃描是否正確地順序進行;否則轉(zhuǎn)掃描后解碼程序;是則根據(jù)段控制信息判斷數(shù)據(jù)是否交錯,如果有數(shù)據(jù)交錯,則轉(zhuǎn)掃描后解碼程序;11、根據(jù)左右側(cè)行定位模式(30)、(40)定位讀取比特流信息;12、根據(jù)段控制信息中的糾錯算法和糾錯等級進行校驗解碼,恢復并輸出比特流信息;13、根據(jù)段控制信息判斷下一行是否段分隔符(60),否則回到第11步;14、判斷再下一行掃描數(shù)據(jù)是否結(jié)束模式(20),否則回到第7步;是則條碼掃描結(jié)束。
權(quán)利要求
1.一種二維條碼編碼方法,包括輸入二進制數(shù)據(jù)信息,輸出可附著在載體上的二維條碼,其特征在于包括下述步驟A.根據(jù)糾錯算法和糾錯等級計算所述二進制數(shù)據(jù)信息的糾錯碼,將所述糾錯碼加入所述二進制數(shù)據(jù)信息中形成新的比特流;B.根據(jù)所述比特流大小確定條碼段數(shù),將比特流分成大小相等的數(shù)據(jù)段,最后的數(shù)據(jù)不足一段時用條碼填充符補足;C.在所述各段中分別加入段控制信息;根據(jù)載體的形狀和尺寸決定條碼的印刷解析度、長和寬;在條碼中加入開始模式(10)、結(jié)束模式(20),加入左側(cè)定位模式(30)、右側(cè)定位模式(40);輸出條碼。
2.根據(jù)權(quán)利要求1所述的二維條碼編碼方法,其特征在于,所述步驟A中將所述糾錯碼加入所述比特流中后,再將所述比特流分成大小相等的數(shù)據(jù)塊,將各個數(shù)據(jù)塊中的數(shù)據(jù)交叉排列,形成新的比特流。
3.根據(jù)權(quán)利要求1所述的二維條碼編碼方法,其特征在于,所述步驟B中將所述比特流分成所述數(shù)據(jù)段后,再選擇掩膜種類,將各段中的數(shù)據(jù)對掩膜進行異或運算,獲得新的比特流。
4.根據(jù)權(quán)利要求1所述的二維條碼編碼方法,其特征在于,所述步驟A中先對欲編條碼的所述二進制數(shù)據(jù)信息進行二次編碼,獲得新的二進制數(shù)據(jù)信息比特流。
5.根據(jù)權(quán)利要求1所述的二維條碼編碼方法,其特征在于,所述步驟C中的所述開始模式(10)包括開始控制符(101)和結(jié)尾條(105);所述結(jié)束模式(20)包括結(jié)束控制符(201)和結(jié)尾條(105),所述開始控制符(101)的結(jié)構(gòu)為條、空交替沿條碼寬度方向排列,條、空的寬度分別為[3∶1∶1∶2∶2∶2],以單元寬度尺寸為單位;所述結(jié)束控制符(201)的結(jié)構(gòu)為條、空交替沿條碼寬度方向排列,條、空的寬度分別為[3∶2∶2∶1∶1∶2],以單元寬度尺寸為單位;所述結(jié)尾條(105)的寬度為3倍單元寬度。
6.根據(jù)權(quán)利要求1所述的二維條碼編碼方法,其特征在于,所述步驟C中所述段控制信息包括總段數(shù)、交錯標識、糾錯算法等級,掩碼類型和本段序列號;所述段控制信息中包括糾錯碼。
7.一種二維條碼解碼方法,使用一維線陣接觸型或非接觸型圖像傳感器獲取條碼圖像數(shù)據(jù),恢復輸出編碼前的二進制數(shù)據(jù)信息,其特征在于包括下述步驟A.在圖像數(shù)據(jù)中探測條碼開始模式(10)和結(jié)束模式(20),記錄所述開始模式和結(jié)束模式的位置坐標;B.根據(jù)所述開始和結(jié)束模式的位置和形狀計算掃描方向與條碼的角度、判斷條碼是否頭尾反向、是否左右鏡像;根據(jù)所述開始或結(jié)束模式判斷條碼印刷解析度;C.根據(jù)所述掃描方向與條碼的角度計算條碼在垂直方向的投影,判斷獲得所有段分隔符(60)的位置;D.從第一個段分隔符開始,根據(jù)印刷分辨率探測左側(cè)行定位模式(30)和右側(cè)行定位模式(40),計算各行所有單元的坐標;E.根據(jù)所述段分隔符(60)的位置讀取所有段控制信息;F.對各段控制信息進行糾錯,獲得并存儲段控制信息;G.根據(jù)所述段分隔符(60)的位置和各行單元的坐標讀取條碼數(shù)據(jù)符區(qū)(50)的全部數(shù)據(jù)信息,恢復比特流;H.根據(jù)段控制信息對于比特流進行可選擇的反掩膜計算和反交錯排列,然后再用相應的糾錯算法和糾錯等級進行糾錯計算;I.恢復條碼編碼前的比特流信息。
8.根據(jù)權(quán)利要求7所述的二維條碼解碼方法,其特征在于,所述步驟A中先將掃描獲得的圖像數(shù)據(jù)進行圖像增強預處理,再進行二值化處理。
9.一種二維條碼解碼方法,使用一維線陣接觸型或非接觸型圖像傳感器獲取條碼圖像數(shù)據(jù),輸出編碼前的二進制數(shù)據(jù)信息,其特征在于包括下述步驟A.掃描輸出圖像數(shù)據(jù)至緩沖存儲器,并在圖像數(shù)據(jù)中探測開始模式(10)或者結(jié)束模式(20);B.如果探測到結(jié)束模式(20),則為條碼頭尾反向,轉(zhuǎn)為掃描后解碼模式;C.如果探測到開始模式(10),判斷是否左右鏡像,是則轉(zhuǎn)為掃描后解碼模式;D.根據(jù)開始模式判斷條碼印刷解析度;E.根據(jù)條碼印刷解析度獲得新一行的掃描數(shù)據(jù);F.判斷是否為段分隔符,否則回到步驟E;G.探測左右側(cè)行定位模式(30),(40);H.根據(jù)左右側(cè)行定位模式(30),(40)定位并讀取段控制信息;I.對段控制信息進行糾錯,獲得并存儲段控制信息;J.根據(jù)段序號判斷掃描是否正確地順序進行;否則轉(zhuǎn)掃描后解碼程序;是則根據(jù)段控制信息判斷數(shù)據(jù)是否交錯,如果有數(shù)據(jù)交錯,則轉(zhuǎn)掃描后解碼程序;K.根據(jù)左右側(cè)行定位模式(30)、(40)定位讀取比特流信息;L.根據(jù)段控制信息中的糾錯算法和糾錯等級進行校驗解碼,恢復并輸出比特流信息;M.根據(jù)段控制信息判斷下一行是否段分隔符(60),否則回到步驟K;N.判斷下一行掃描數(shù)據(jù)是否結(jié)束模式(20),否則回到步驟G;是則條碼掃描結(jié)束。
10.根據(jù)權(quán)利要求9所述的二維條碼解碼方法,其特征在于,所述步驟F中判斷一行掃描數(shù)據(jù)是否為段分隔符的方法是,將該行掃描數(shù)據(jù)的值之和與所述開始模式(10)的一行掃描數(shù)據(jù)的值之和相比較,大于所述開始模式(10)的一行掃描數(shù)據(jù)的值之和的1.5倍時判斷為段分隔符。
全文摘要
本發(fā)明涉及二維條碼的編碼方法和對應的解碼方法。編碼方法將輸入的二進制數(shù)據(jù)信息編碼,輸出可附著在載體上的二維條碼,包括步驟A.根據(jù)糾錯算法和糾錯等級計算二進制數(shù)據(jù)信息的糾錯碼,將糾錯碼加入數(shù)據(jù)信息中形成新的比特流;比特流還可以分塊交錯排列;B.根據(jù)比特流大小確定條碼段數(shù),將比特流分成大小相等的數(shù)據(jù)段;掩模運算;C.在各段中分別加入段控制信息;根據(jù)載體的形狀和尺寸決定條碼的印刷解析度、長和寬;在條碼中加入開始、結(jié)束模式,加入左、右側(cè)定位模式;輸出條碼。本發(fā)明獲得的二位條碼便于線性接觸型或非接觸型光學掃描器譯解,大信息量、高冗余度、多抗損等級、條碼長寬和印刷解析度可變。
文檔編號G06K19/06GK1452117SQ0311795
公開日2003年10月29日 申請日期2003年5月22日 優(yōu)先權(quán)日2003年5月22日
發(fā)明者常治國, 呂迎豐, 丁曉云 申請人:深圳矽感科技有限公司