專利名稱:二維碼及其編解碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種二維碼、將數(shù)據(jù)編碼生成該二維碼的編碼方法、和從該二維碼碼圖符號(hào)解碼還原為數(shù)據(jù)的解碼方法。
背景技術(shù):
二維碼一般由三部分組成特征模式區(qū)域、格式信息區(qū)域、數(shù)據(jù)區(qū)域。其中特征模式區(qū)域指導(dǎo)圖像識(shí)別算法識(shí)別定位碼圖符號(hào),格式信息區(qū)域存放描述碼圖符號(hào)格式與數(shù)據(jù)糾錯(cuò)相關(guān)的參數(shù),數(shù)據(jù)區(qū)域存放經(jīng)過(guò)糾錯(cuò)編碼算法編碼后的數(shù)據(jù)。
二維碼最有前途的應(yīng)用方式是利用手機(jī)操作平臺(tái)上的二維碼譯碼程序,通過(guò)手機(jī)攝像頭捕捉解析二維碼,獲得各種增值服務(wù)。因?yàn)榇蠖鄶?shù)拍照手機(jī)不具備微距成像功能與自動(dòng)聚焦功能,即便具有自動(dòng)聚焦功能也會(huì)因?yàn)榫劢惯^(guò)程耗時(shí)長(zhǎng)而加大整個(gè)解碼的時(shí)長(zhǎng),此外一般拍照手機(jī)不具備照明功能,僅依賴環(huán)境光獲得的圖像的亮度、對(duì)比度,信噪比等參數(shù)均較低,因此對(duì)于傳統(tǒng)的由矩形模塊組成的矩陣式條碼,拍照手機(jī)識(shí)讀效果不佳,不利于二維碼的大規(guī)模商業(yè)化應(yīng)用。
發(fā)明內(nèi)容本發(fā)明的目的就是為了克服以上現(xiàn)有技術(shù)的不足,提供一種二維碼、將數(shù)據(jù)編碼生成該二維碼的編碼方法、從該二維碼解碼還原為數(shù)據(jù)的解碼方法,其易識(shí)讀,糾錯(cuò)能力強(qiáng),對(duì)設(shè)備要求低,可廣泛應(yīng)用。
為實(shí)現(xiàn)上述目的,本發(fā)明提出一種二維碼,其碼圖符號(hào)由具有不同光學(xué)反射率的單元模塊在平面上排列而成;所述單元模塊為圓形單元模塊,且模塊與模塊之間保留間隙。
上述的二維碼,所述圓形單元模塊為大小相同、等間距排列的實(shí)心圓形單元模塊。所述相鄰兩個(gè)圓形單元模塊的圓心距離大于圓形單元模塊的直徑。
上述的二維碼,所述碼圖符號(hào)具有12×9個(gè)圓形單元模塊。所述碼圖符號(hào)選用4∶3的外形比例。所述碼圖符號(hào)外圍有一個(gè)封閉的邊框。所述碼圖符號(hào)外圍有4個(gè)單元模塊尺寸寬度的靜區(qū)。
上述的二維碼,所述碼圖符號(hào)四角坐標(biāo)分別為(0,0)、(11,0)、(0,8)以及(11,8)圓形單元模塊是定位單元模塊;其余單元模塊分為13組,所述坐標(biāo)為(0,1)、(0,2)、(1,0)、(1,1)(1,2)、(2,0)、(2,1)以及(2,2)為第一組;所述坐標(biāo)為(0,3)、(0,4)、(0,5)、(1,3)、(1,4)、(1,5)、(2,4)以及(2,5)為第二組;所述坐標(biāo)為(0,6)、(0,7)、(0,8)、(1,6)(1,7)、(1,8)、(2,6)以及(2,7)為第三組;所述坐標(biāo)為(0,9)、(0,10)、(1,9)、(1,10)、(1,11)、(2,9)、(2,10)以及(2,11)為第四組;所述坐標(biāo)為(3,0)、(3,1)、(4,0)、(4,1)、(4,2)、(5,0)、(5,1)以及(5,2)為第五組;所述坐標(biāo)為(2,3)、(3,2)、(3,3)、(3,4)、(3,5)、(4,3)、(4,4)以及(4,5)為第六組;所述坐標(biāo)為(2,8)、(3,6)、(3,7)、(3,8)、(3,9)、(4,6)、(4,7)以及(4,8)為第七組;所述坐標(biāo)為(3,10)、(3,11)、(4,9)、(4,10)、(4,11)、(5,9)、(5,10)以及(5,11)為第八組;所述坐標(biāo)為(6,0)、(6,1)、(6,2)、(7,0)、(7,1)、(7,2)、(8,1)以及(8,2)為第九組;所述坐標(biāo)為(6,3)、(6,4)、(7,3)、(7,4)、(7,5)、(8,3)、(8,4)以及(8,5)為第十組;所述坐標(biāo)為(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(6,5)以及(6,6)為第十一組;所述坐標(biāo)為(6,7)、(6,8)、(7,6)、(7,7)、(7,8)、(8,6)、(8,7)以及(8,8)為第十二組;所述坐標(biāo)為(6,9)、(6,10)、(6,11)、(7,9)、(7,10)、(7,11)、(8,9)以及(8,10)為第十三組。
同時(shí)本發(fā)明提出了一種上述二維碼的編碼方法,將二進(jìn)制數(shù)據(jù)流編碼輸出碼圖符號(hào);包括如下步驟A、將二進(jìn)制數(shù)據(jù)流分割成具有特定比特長(zhǎng)度的信息數(shù)據(jù)碼詞;B、對(duì)所述信息數(shù)據(jù)碼詞應(yīng)用糾錯(cuò)算法進(jìn)行運(yùn)算,生成糾錯(cuò)碼詞;C、將所述信息數(shù)據(jù)碼詞、糾錯(cuò)碼詞生成單元模塊為圓形單元模塊、且模塊與模塊之間保留間隙的碼圖符號(hào)。
上述的編碼方法,所述碼圖具有12×9圓形單元模塊,其中四角的四個(gè)單元為定位單元,在余下的104個(gè)圓形單元模塊中,前80個(gè)用于存儲(chǔ)信息數(shù)據(jù),剩下的24個(gè)用于存儲(chǔ)糾錯(cuò)數(shù)據(jù)。所述糾錯(cuò)數(shù)據(jù)碼詞按如下方式生成80個(gè)比特的信息數(shù)據(jù)按每8個(gè)比特一組分成10組,即共計(jì)10個(gè)8比特信息數(shù)據(jù)碼詞(codeword),對(duì)該10個(gè)碼詞運(yùn)用糾錯(cuò)算法生成3個(gè)8比特的糾錯(cuò)碼詞。所述糾錯(cuò)算法選用Reed-Solomon糾錯(cuò)算法。所述糾錯(cuò)碼詞選用BCH糾錯(cuò)碼。
本發(fā)明還提出了一種二維碼解碼方法,包括如下步驟1)獲取碼圖符號(hào)圖像,2)對(duì)獲取的碼圖符號(hào)圖像進(jìn)行二值化處理,3)對(duì)圓形單元模塊進(jìn)行邊緣檢測(cè)得到邊界圖像,4)對(duì)邊界圖像進(jìn)行閉合邊界跟蹤,5)圓形單元模塊識(shí)別,6)區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊,7)方向定位,8)碼詞還原并糾錯(cuò)。
上述的方法,在所述步驟1)和步驟2)之間,還包括步驟1`)對(duì)獲取的碼圖符號(hào)進(jìn)行圖像增強(qiáng)處理。
上述的方法,所述步驟3)中,所述邊緣檢測(cè)獲得的邊界象素定義為像素值為0且相鄰8個(gè)像素中有非0像素的象素;所述邊緣檢測(cè)的方法是對(duì)二值圖像中所有像素作邊界判定得到邊界圖像,將邊界像素標(biāo)記為最大亮度255,其余則標(biāo)記為0。
上述的方法,所述步驟4)對(duì)邊界圖像進(jìn)行閉合邊界跟蹤的過(guò)程包括41)對(duì)邊界圖像按行主的方向掃描,以掃描到的第一個(gè)邊界像素為邊界跟蹤的起點(diǎn)像素,如果沒(méi)有邊界像素則表明本次流程結(jié)束;42)將起點(diǎn)像素的象素坐標(biāo)放入隊(duì)列Q,并將該起點(diǎn)像素標(biāo)記為0,表示已跟蹤過(guò)了;43)判斷起點(diǎn)像素的相鄰8個(gè)像素中是否有邊界像素,如果有則任選一個(gè)像素作為下次跟蹤的起點(diǎn),跳轉(zhuǎn)到42);否則本次跟蹤結(jié)束,隊(duì)列Q中的象素坐標(biāo)列表即是一個(gè)閉合邊界,存儲(chǔ)隊(duì)列Q中的象素坐標(biāo)列表并將其清空,跳轉(zhuǎn)到41)。
上述的方法,所述步驟5)圓形單元模塊識(shí)別的過(guò)程包括51)將閉合邊界所有邊界點(diǎn)的象素橫坐標(biāo)累加,將累加和除以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)象素橫坐標(biāo)u;將所有邊界點(diǎn)象素縱坐標(biāo)累加,將累加和除以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)象素縱坐標(biāo)v;52)以閉合邊界中心點(diǎn)象素坐標(biāo)(u,v)按四個(gè)方向掃描閉合邊界的直徑,分別得到四個(gè)長(zhǎng)度值d1,d2,d3,d4;53)取平均直徑為d=(d1+d2+d3+d4)/4,定義圓的規(guī)范度為N=|d-d1|/d+|d-d2|/d+|d-d3|/d+|d-d4|/d;54)對(duì)每一個(gè)閉合邊界計(jì)算其N值,根據(jù)實(shí)測(cè)統(tǒng)計(jì)結(jié)果將N值大于設(shè)定閾值TN的閉合邊界丟棄,剩下的閉合邊界認(rèn)為是條碼圓形單元模塊的邊界。
上述的方法,所述步驟6)區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊的過(guò)程包括61)取得兩個(gè)圓的尺寸差異度設(shè)一個(gè)圓的直徑長(zhǎng)度為D1,另一個(gè)圓的直徑長(zhǎng)度為D2,則這兩個(gè)圓的尺寸差異度為L(zhǎng)dif=|D1-D2|/max(D1,D2),設(shè)定條碼的靜區(qū)寬度為M個(gè)圓形單元模塊直徑,并且圓的尺寸差異度為L(zhǎng)dif;62)選擇離圖像中心點(diǎn)最近的圓形單元模塊為種子圓形單元模塊,然后將距離該圓形單元模塊距離小于M且尺寸差異度Ldif小于預(yù)設(shè)值的圓形單元模塊加入到分組中;63)一輪增長(zhǎng)結(jié)束后,以新加入組的圓形單元模塊為種子圓形單元模塊重復(fù)增長(zhǎng)過(guò)程,直到?jīng)]有新的圓形單元模塊加入組為止。
上述的方法,所述步驟7)方向定位的過(guò)程包括71)找出碼圖符號(hào)的四角定位圓形單元模塊;72)設(shè)定四角定位圓形單元模塊的坐標(biāo);73)按照坐標(biāo)校正公式,計(jì)算各圓形單元模塊的坐標(biāo)。
其中,所述步驟71)的具體過(guò)程包括根據(jù)各圓形單元模塊的閉合邊界坐標(biāo),計(jì)算出圓形單元模塊組的最小外接矩形,經(jīng)過(guò)該最小外接矩形的中心坐標(biāo)劃一條水平線與垂直線,將圓形單元模塊分成左上、右上、左下以及右下四個(gè)區(qū),確定每一個(gè)區(qū)中離最小外接矩形的中心最遠(yuǎn)的點(diǎn)為該區(qū)的定位圓形單元模塊。
所述步驟72)的具體過(guò)程包括設(shè)定四角定位圓形單元模塊在條碼中的坐標(biāo)分別為(0,0)、(11,0)、(0,8)以及(11、8);所述步驟73)的具體過(guò)程包括根據(jù)坐標(biāo)校正公式x’=K0*x+K1*x*y+K2*y+K3;y’=K4*x+K5*x*y+K6*y+K7;(x’,y’)為各圓形單元模塊的坐標(biāo),(x,y)為圖像中原點(diǎn)的坐標(biāo),將四角定位圓形單元模塊在條碼中的坐標(biāo)以及它們?cè)趫D像中的坐標(biāo)代入上述公式得到8個(gè)8元一次方程,解方程組得出K0~K78個(gè)系數(shù),將K0~K7代入方程就得到了坐標(biāo)轉(zhuǎn)換方程,將每個(gè)圓形單元模塊的中心坐標(biāo)填入該方程組,計(jì)算出該圓形單元模塊在條碼中的坐標(biāo)。
上述的方法,所述步驟8)的過(guò)程包括根據(jù)與編碼時(shí)的碼詞比特到條碼圓形單元模塊的布局,及碼圖符號(hào)中的各圓形單元模塊坐標(biāo),設(shè)置碼詞各比特位的值,有圓形單元模塊對(duì)應(yīng)的碼詞的比特位為比特1,否則為比特0;運(yùn)用Reed-solomon糾錯(cuò)算法對(duì)碼詞糾錯(cuò);糾錯(cuò)成功后,輸出數(shù)據(jù)字。
由于本發(fā)明的二維碼選用圓形單元模塊,且模塊與模塊之間保留間隙;圓形單元模塊在深度離焦條件下成像后還是圓形單元模塊,經(jīng)過(guò)unsharpmask濾波后能很好的還原圓形單元模塊的形狀。這種設(shè)計(jì)使得圖像處理算法對(duì)二值化閾值的選擇不敏感,這是因?yàn)殡m然閾值會(huì)影響到二值化后圓形單元模塊的大小,但圓形單元模塊的中心坐標(biāo)不會(huì)因閾值的變化而漂移,又因模塊間有間隙,減小了二值化后相鄰模塊粘連在一起可能性,使得每個(gè)模塊可以被單獨(dú)定位。因此,本發(fā)明即便在深度離焦、低照度成像條件下仍可以可靠地識(shí)讀、解碼;易識(shí)讀,糾錯(cuò)能力強(qiáng),對(duì)設(shè)備的要求低,利于廣泛推廣應(yīng)用。
二維碼的圓形單元模塊可以取兩種顏色,其一為背景色,其二為前景色,為前景色的亮度值與背景色的亮度值保持足夠的差別,保證條碼易識(shí)讀性。選用4∶3的外形比例,與手機(jī)拍照?qǐng)D像尺寸的寬、高比相適應(yīng),最有效的利用所有圖像像素,同時(shí)與方形條碼相比,只需判斷是否旋轉(zhuǎn)了180度,減少了一半條碼方向判斷計(jì)算量,利于解碼速度的提高。
圖1是本發(fā)明的一種二維碼碼圖符號(hào)。
圖2是本發(fā)明的解碼流程示意圖。
圖3是解碼過(guò)程中采集的二維碼原始圖像。
圖4是圖3二維碼原始圖像的增強(qiáng)圖像。
圖5是對(duì)圖4增強(qiáng)圖像的二值化后的圖像。
圖6是對(duì)圖5進(jìn)行邊界檢測(cè)得到的邊界圖像。
圖7是對(duì)邊界圖像進(jìn)行閉合邊界跟蹤的結(jié)果圖像。
圖8是對(duì)閉合邊界跟蹤的結(jié)果圖像進(jìn)行圓形單元模塊識(shí)別的示意圖。
圖9是重構(gòu)出的二維碼碼圖符號(hào)。
圖10是邊界檢測(cè)時(shí)某個(gè)像素相鄰像素的定義示意圖。
具體實(shí)施方式下面通過(guò)具體的實(shí)施例并結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述。
本設(shè)計(jì)選用圓形單元模塊,且模塊與模塊之間保留間隙。圓形單元模塊在深度離焦條件下成像后還是圓形單元模塊,經(jīng)過(guò)unsharp mask濾波后能很好的還原圓形單元模塊的形狀。這種設(shè)計(jì)使得圖像處理算法對(duì)二值化閾值的選擇不敏感,這是因?yàn)殡m然閾值會(huì)影響到二值化后圓形單元模塊的大小,但圓形單元模塊的中心坐標(biāo)不會(huì)因閾值的變化而漂移,又因模塊間有間隙,減小了二值化后相鄰模塊粘連在一起可能性,使得每個(gè)模塊可以被單獨(dú)定位。
請(qǐng)參考圖1所示,目標(biāo)條碼由12乘9行相同大小等間距排列的實(shí)心圓形單元模塊組成。相鄰兩個(gè)圓形單元模塊的圓心距離大于圓形單元模塊的半徑。圓形單元模塊取兩種顏色,其一為背景色,其二為前景色,為保證條碼易識(shí)讀性,前景色的亮度值與背景色的亮度值保持足夠的差別。圓形單元模塊也可以取多種顏色。選用4∶3的外形比例,與手機(jī)拍照?qǐng)D像尺寸的寬、高比相適應(yīng),最有效的利用所有圖像像素,同時(shí)與方形條碼相比,只需判斷是否旋轉(zhuǎn)了180度,減少了一半條碼方向判斷計(jì)算量。
條碼四角的四個(gè)圓形單元模塊固定為前景色,剩下的104個(gè)圓形單元模塊用于存儲(chǔ)數(shù)據(jù),前景色圓形單元模塊存儲(chǔ)比特“1”,背景色圓形單元模塊存儲(chǔ)比特“0”。104個(gè)圓形單元模塊總共可存儲(chǔ)104比特?cái)?shù)據(jù),其中前80個(gè)比特用于存儲(chǔ)有效數(shù)據(jù),剩下的24比特存儲(chǔ)糾錯(cuò)數(shù)據(jù)。糾錯(cuò)數(shù)據(jù)按如下方式生成80個(gè)比特的有效數(shù)據(jù)按每8個(gè)比特一組分成10組,即10個(gè)8比特碼詞(codeword),對(duì)這10個(gè)碼詞運(yùn)用GF(256)的Reed-Solomon糾錯(cuò)算法生成3個(gè)糾錯(cuò)碼詞(共24比特)。13個(gè)碼詞按如圖1所示的方式排列,相鄰的同種顏色8個(gè)模塊存儲(chǔ)一個(gè)碼詞。顏色只是標(biāo)識(shí)出分組的碼詞組,顏色和識(shí)讀無(wú)關(guān),3個(gè)糾錯(cuò)碼詞可以并且最多能糾正一個(gè)碼詞的錯(cuò)誤,即最多可以糾正屬于同一個(gè)碼詞的8個(gè)模塊的錯(cuò)誤。不考慮條碼的污損,這樣的糾錯(cuò)能力是足夠的(一維條碼僅有校驗(yàn)功能也能有效的使用)。為了充分利用24個(gè)冗余比特的糾錯(cuò)能力,可以選用BCH糾錯(cuò)碼,24個(gè)比特的BCH校驗(yàn)位可以最多糾正任意位置11個(gè)比特的數(shù)據(jù),這樣條碼就能容忍10%以上面積的污損。
靜區(qū)(quite zone)的要求靜區(qū)是指臨近碼圖符號(hào)的周圍區(qū)域,解碼要用二維識(shí)讀設(shè)備,為了保證解碼成功,對(duì)靜區(qū)有一定的要求。本發(fā)明碼圖符號(hào)中沒(méi)有設(shè)置特殊的識(shí)別和定位模式,為此必須保持4個(gè)單元模塊尺寸寬度的靜區(qū)。也可以給碼圖符號(hào)增加一個(gè)封閉的邊框作為識(shí)別特征,從而減小對(duì)靜區(qū)尺寸的要求。
請(qǐng)參考圖2所示,解碼過(guò)程定義為從手機(jī)拍攝到的圖像中識(shí)別出條碼,并將條碼所編碼的數(shù)據(jù)還原出來(lái)。圖像由二維像素矩陣組成,為了表達(dá)的統(tǒng)一,本例規(guī)定手機(jī)拍攝到的圖像為8bit灰階圖像,即每一個(gè)像素的亮度由8比特?cái)?shù)定義,取值范圍為0至255,對(duì)應(yīng)圖像亮度為最黑至最白。
一、圖像增強(qiáng)手機(jī)對(duì)條碼近距離拍照,如圖3所示,獲得的圖像模糊且對(duì)比度低,圖像中的圓形單元模塊目標(biāo)特征不明顯,直接識(shí)別難度大,為此需要先進(jìn)行圖像增強(qiáng)。圖像增強(qiáng)算法采用USM(Unsharp Mask)算法,該算法是數(shù)字圖像處理領(lǐng)域常用的圖像增強(qiáng)算法,其原理是先對(duì)原圖像用二維高斯低通濾波獲得模糊的圖像,然后從原圖像中減去該模糊的圖像得到對(duì)比度增強(qiáng)的圖像,如圖4所示。設(shè)原圖像為F(x,y),經(jīng)過(guò)二維高斯低通濾波后得到圖像U(x,y),則增強(qiáng)的圖像為V(x,y)=F(x,y)+K×(F(x,y)-U(x,y)),其中K為增強(qiáng)系數(shù),經(jīng)驗(yàn)值為1~4,K越大增強(qiáng)效果越明顯,但圖像中的噪聲也會(huì)被放大。
二、二值化獲得增強(qiáng)的圖像后需要對(duì)其進(jìn)行二值化處理,設(shè)定一個(gè)閾值T(0<T<255),亮度大于T的像素歸為白,其它像素歸為黑,因?yàn)閳D像增強(qiáng)后像素亮度值的動(dòng)態(tài)范圍擴(kuò)大了,背景亮度趨近于最大值255,組成圓形單元模塊的像素的亮度趨近于最小值0,因此很容易選擇一個(gè)固定的或動(dòng)態(tài)的閾值T。二值化后的圖像請(qǐng)參考圖5所示。
三、邊緣檢測(cè)對(duì)二值化后的圖像進(jìn)行邊緣檢測(cè),邊緣定義為像素值為0且相鄰8個(gè)像素中有非0像素。某個(gè)像素相鄰像素的定義如圖10所示編號(hào)為0的像素其相鄰8個(gè)像素分別為編號(hào)為1至8的像素。如果一個(gè)像素是邊界像素將標(biāo)記為最大亮度255,否則標(biāo)記為0,對(duì)二值圖像中所有像素作邊界判定得到邊界圖像。對(duì)每個(gè)單元模塊進(jìn)行邊緣檢測(cè)后得到的圖像請(qǐng)參考圖6所不。
四、閉合邊界跟蹤閉合邊界跟蹤的操作對(duì)象為上述步驟三中邊緣檢測(cè)得到的邊緣圖像,步驟如下a對(duì)邊緣圖像按行主的方向掃描(即從左至右,從上至下),以掃描到的第一個(gè)邊界像素為邊界跟蹤的起點(diǎn)像素,如果沒(méi)有邊界像素則表明本次流程結(jié)束;b將起點(diǎn)像素的坐標(biāo)放入隊(duì)列Q,并將該起點(diǎn)像素標(biāo)記為0,表示已跟蹤過(guò)了;c判斷起點(diǎn)像素的相鄰8個(gè)像素中是否有邊界像素,如果有則任選一個(gè)邊界像素作為下次跟蹤的起點(diǎn),跳轉(zhuǎn)到b;否則本次跟蹤結(jié)束,隊(duì)列Q中的坐標(biāo)列表即是一個(gè)閉合邊界,也是候選目標(biāo)圓形單元模塊的邊界,存儲(chǔ)隊(duì)列Q中的坐標(biāo)列表并將其清空,跳轉(zhuǎn)到a。
請(qǐng)參考圖7所示,此流程結(jié)束后圓形單元模塊圖像的邊界都被檢測(cè)出來(lái)了,同時(shí)部分噪聲黑點(diǎn)混入了檢測(cè)結(jié)果。
五、圓形單元模塊識(shí)別本步驟目的在于從步驟四的檢測(cè)結(jié)果中剔除部分噪聲數(shù)據(jù),即將非圓形閉合邊界丟棄。噪聲數(shù)據(jù)的判斷依據(jù)是圓的幾何特征。對(duì)于一個(gè)閉合邊界,首先將所有邊界點(diǎn)橫坐標(biāo)累加,將累加和除以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)橫坐標(biāo)u,然后再將所有邊界點(diǎn)縱坐標(biāo)累加,將累加和初以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)縱坐標(biāo)v,以閉合邊界中心點(diǎn)坐標(biāo)(u,v)按四個(gè)方向掃描閉合邊界的直徑,如圖8所示,分別得到四個(gè)長(zhǎng)度值d1,d2,d3,d4,設(shè)平均直徑為d=(d1+d2+d3+d4)/4,定義圓的規(guī)范度為N=|d-d1|/d+|d-d2|/d+|d-d3|/d+|d-d4|/d,N的值越小則閉合邊界是圓的可信度越高。對(duì)每一個(gè)閉合邊界計(jì)算其N值,根據(jù)實(shí)測(cè)統(tǒng)計(jì)結(jié)果將N值大于某個(gè)閾值TN的閉合邊界丟棄,剩下的閉合邊界認(rèn)為是條碼圓形單元模塊的邊界。
六、區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊圖像中的所有圓形單元模塊不一定都屬于同一個(gè)二維碼,為此還需要從步驟5中檢測(cè)出的圓中提取一組屬于同一個(gè)二維碼的圓形單元模塊。首先定義兩個(gè)圓的尺寸差異度,設(shè)一個(gè)圓的直徑長(zhǎng)度為D1,另一個(gè)圓的直徑長(zhǎng)度為D2,則這兩個(gè)圓的尺寸差異度為L(zhǎng)dif=|D1-D2|/max(D1,D2),另外規(guī)定條碼的靜區(qū)寬度為M個(gè)圓形單元模塊直徑,即條碼四周必須留有M個(gè)圓形單元模塊直徑的空白區(qū)域,對(duì)于靜區(qū)大小不同的碼制有不同的要求的M。此處采用所謂的水晶增長(zhǎng)的方法區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊。
首先選擇離圖像中心點(diǎn)最近的圓形單元模塊為種子圓形單元模塊,然后將距離該圓形單元模塊距離小于M且它們的尺寸差異度Ldif小于某個(gè)預(yù)設(shè)值的圓形單元模塊加入到分組中,一輪增長(zhǎng)結(jié)束后,以新加入組的圓形單元模塊為種子圓形單元模塊重復(fù)增長(zhǎng)過(guò)程,直到?jīng)]有新的圓形單元模塊加入組為止。
至此,條碼已經(jīng)從圖像中分割出來(lái),并且組成條碼的圓形單元模塊也都被定位了,下面的步驟確定各圓形單元模塊在條碼中的坐標(biāo)位置。
七、方向定位根據(jù)各圓形單元模塊的閉合邊界坐標(biāo),計(jì)算出步驟六得到的圓形單元模塊組的最小外接矩形,經(jīng)過(guò)該最小外接矩形的中心坐標(biāo)劃一條水平線與垂直線,其交點(diǎn)為圖像原點(diǎn),將圓形單元模塊分成左上、右上、左下以及右下四個(gè)區(qū),每一個(gè)區(qū)中離最小外接矩形的中心最遠(yuǎn)的點(diǎn)就是該區(qū)的定位圓形單元模塊,這樣就找出了條碼的上、下、左、右四個(gè)定位圓形單元模塊。
設(shè)四角定位圓形單元模塊在條碼中的坐標(biāo)分別為(0,0)、(11,0)、(0,8)以及(11、8);根據(jù)這四個(gè)定位圓形單元模塊的坐標(biāo),按照下面的坐標(biāo)校正公式即計(jì)算出其它圓形單元模塊在條碼中的坐標(biāo)x’=K0*x+K1*x*y+K2*y+K3;y’=K4*x+K5*x*y+K6*y+K7;(x’,y’)為各圓形單元模塊的坐標(biāo),(x,y)為圖像中原點(diǎn)的坐標(biāo),將四角定位圓形單元模塊在條碼中的坐標(biāo)以及它們?cè)趫D像中的坐標(biāo)代入上面的公式得到8個(gè)8元一次方程,解方程組得出K0~K78個(gè)系數(shù),將K0~K7代入方程就得到了坐標(biāo)轉(zhuǎn)換方程,將每個(gè)圓形單元模塊的中心坐標(biāo)填入該方程組,即可計(jì)算出該圓形單元模塊在條碼中的坐標(biāo),一般情況下計(jì)算出的x’和y’的值不是整數(shù),對(duì)其四舍五入即可。
八、碼詞還原并糾錯(cuò)請(qǐng)參考圖9所示,根據(jù)與編碼時(shí)的碼詞比特到條碼圓形單元模塊的布局,以及步驟7中計(jì)算出的條碼中的各圓形單元模塊坐標(biāo),設(shè)置碼詞各比特位的值,有圓形單元模塊對(duì)應(yīng)的碼詞的比特位為比特1,否則為比特0。運(yùn)用Reed-solomon糾錯(cuò)算法對(duì)碼詞糾錯(cuò),13個(gè)碼詞中有3個(gè)糾錯(cuò)碼詞,因此可以糾正一個(gè)錯(cuò)誤,一個(gè)碼詞錯(cuò)任何比特都只算一個(gè)錯(cuò)誤。如果糾錯(cuò)成功則解碼成功,輸出10個(gè)數(shù)據(jù)碼詞。
權(quán)利要求
1.一種二維碼,其碼圖符號(hào)由具有不同光學(xué)反射率的單元模塊在平面上排列而成;其特征是所述單元模塊為圓形單元模塊,且模塊與模塊之間保留間隙。
2.如權(quán)利要求1所述的二維碼,其特征是所述圓形單元模塊為大小相同、等間距排列的實(shí)心圓形單元模塊。
3.如權(quán)利要求1所述的二維碼,其特征是所述相鄰兩個(gè)圓形單元模塊的圓心距離大于圓形單元模塊的直徑。
4.如權(quán)利要求1所述的二維碼,其特征是所述碼圖符號(hào)具有12×9個(gè)圓形單元模塊。
5.如權(quán)利要求1所述的二維碼,其特征是所述碼圖符號(hào)選用4∶3的外形比例。
6.如權(quán)利要求1所述的二維碼,其特征是所述碼圖符號(hào)外圍有一個(gè)封閉的邊框。
7.如權(quán)利要求1所述的二維碼,其特征是所述碼圖符號(hào)外圍有4個(gè)單元模塊尺寸寬度的靜區(qū)。
8.如權(quán)利要求4所述的二維碼,其特征是所述碼圖符號(hào)四角坐標(biāo)分別為(0,0)、(11,0)、(0,8)以及(11,8)圓形單元模塊是定位單元模塊;其余單元模塊分為13組,所述坐標(biāo)為(0,1)、(0,2)、(1,0)、(1,1)(1,2)、(2,0)、(2,1)以及(2,2)為第一組;所述坐標(biāo)為(0,3)、(0,4)、(0,5)、(1,3)、(1,4)、(1,5)、(2,4)以及(2,5)為第二組;所述坐標(biāo)為(0,6)、(0,7)、(0,8)、(1,6)(1,7)、(1,8)、(2,6)以及(2,7)為第三組;所述坐標(biāo)為(0,9)、(0,10)、(1,9)、(1,10)、(1,11)、(2,9)、(2,10)以及(2,11)為第四組;所述坐標(biāo)為(3,0)、(3,1)、(4,0)、(4,1)、(4,2)、(5,0)、(5,1)以及(5,2)為第五組;所述坐標(biāo)為(2,3)、(3,2)、(3,3)、(3,4)、(3,5)、(4,3)、(4,4)以及(4,5)為第六組;所述坐標(biāo)為(2,8)、(3,6)、(3,7)、(3,8)、(3,9)、(4,6)、(4,7)以及(4,8)為第七組;所述坐標(biāo)為(3,10)、(3,11)、(4,9)、(4,10)、(4,11)、(5,9)、(5,10)以及(5,11)為第八組;所述坐標(biāo)為(6,0)、(6,1)、(6,2)、(7,0)、(7,1)、(7,2)、(8,1)以及(8,2)為第九組;所述坐標(biāo)為(6,3)、(6,4)、(7,3)、(7,4)、(7,5)、(8,3)、(8,4)以及(8,5)為第十組;所述坐標(biāo)為(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(6,5)以及(6,6)為第十一組;所述坐標(biāo)為(6,7)、(6,8)、(7,6)、(7,7)、(7,8)、(8,6)、(8,7)以及(8,8)為第十二組;所述坐標(biāo)為(6,9)、(6,10)、(6,11)、(7,9)、(7,10)、(7,11)、(8,9)以及(8,10)為第十三組。
9.一種如權(quán)利要求1-8中任一項(xiàng)所述的二維碼編碼方法,將二進(jìn)制數(shù)據(jù)流編碼輸出碼圖符號(hào);包括如下步驟A、將二進(jìn)制數(shù)據(jù)流分割成具有特定比特長(zhǎng)度的信息數(shù)據(jù)碼詞;B、對(duì)所述信息數(shù)據(jù)碼詞應(yīng)用糾錯(cuò)算法進(jìn)行運(yùn)算,生成糾錯(cuò)碼詞;C、將所述信息數(shù)據(jù)碼詞、糾錯(cuò)碼詞生成單元模塊為圓形單元模塊、且模塊與模塊之間保留間隙的碼圖符號(hào)。
10.如權(quán)利要求9所述的編碼方法,其特征是所述碼圖具有12×9圓形單元模塊,其中四角的四個(gè)單元為定位單元,在余下的104個(gè)圓形單元模塊中,前80個(gè)用于存儲(chǔ)信息數(shù)據(jù),剩下的24個(gè)用于存儲(chǔ)糾錯(cuò)數(shù)據(jù)。
11.如權(quán)利要求10所述的編碼方法,其特征是所述糾錯(cuò)數(shù)據(jù)碼詞按如下方式生成80個(gè)比特的信息數(shù)據(jù)按每8個(gè)比特一組分成10組,即共計(jì)10個(gè)8比特信息數(shù)據(jù)碼詞(codeword),對(duì)該10個(gè)碼詞運(yùn)用糾錯(cuò)算法生成3個(gè)8比特的糾錯(cuò)碼詞。
12.如權(quán)利要求11所述的編碼方法,其特征是所述糾錯(cuò)算法選用Reed-Solomon糾錯(cuò)算法。
13.如權(quán)利要求12所述的編碼方法,其特征是所述糾錯(cuò)碼詞選用BCH糾錯(cuò)碼。
14.一種二維碼解碼方法,包括如下步驟1)獲取碼圖符號(hào)圖像,2)對(duì)獲取的碼圖符號(hào)圖像進(jìn)行二值化處理,3)對(duì)圓形單元模塊進(jìn)行邊緣檢測(cè)得到邊界圖像,4)對(duì)邊界圖像進(jìn)行閉合邊界跟蹤,5)圓形單元模塊識(shí)別,6)區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊,7)方向定位,8)碼詞還原并糾錯(cuò)。
15.如權(quán)利要求14所述的方法,其特征是在所述步驟1)和步驟2)之間,還包括步驟1`)對(duì)獲取的碼圖符號(hào)進(jìn)行圖像增強(qiáng)處理。
16.如權(quán)利要求14所述的方法,其特征是所述步驟3)中,所述邊緣檢測(cè)獲得的邊界象素定義為像素值為0且相鄰8個(gè)像素中有非0像素的象素;所述邊緣檢測(cè)的方法是對(duì)二值圖像中所有像素作邊界判定得到邊界圖像,將邊界像素標(biāo)記為最大亮度255,其余則標(biāo)記為0。
17.如權(quán)利要求14所述的方法,其特征是所述步驟4)對(duì)邊界圖像進(jìn)行閉合邊界跟蹤的過(guò)程包括41)對(duì)邊界圖像按行主的方向掃描,以掃描到的第一個(gè)邊界像素為邊界跟蹤的起點(diǎn)像素,如果沒(méi)有邊界像素則表明本次流程結(jié)束;42)將起點(diǎn)像素的象素坐標(biāo)放入隊(duì)列Q,并將該起點(diǎn)像素標(biāo)記為0,表示已跟蹤過(guò)了;43)判斷起點(diǎn)像素的相鄰8個(gè)像素中是否有邊界像素,如果有則任選一個(gè)像素作為下次跟蹤的起點(diǎn),跳轉(zhuǎn)到42);否則本次跟蹤結(jié)束,隊(duì)列Q中的象素坐標(biāo)列表即是一個(gè)閉合邊界,存儲(chǔ)隊(duì)列Q中的象素坐標(biāo)列表并將其清空,跳轉(zhuǎn)到41)。
18.如權(quán)利要求14所述的方法,其特征是所述步驟5)圓形單元模塊識(shí)別的過(guò)程包括51)將閉合邊界所有邊界點(diǎn)的象素橫坐標(biāo)累加,將累加和除以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)象素橫坐標(biāo)u;將所有邊界點(diǎn)象素縱坐標(biāo)累加,將累加和除以邊界點(diǎn)總數(shù)得到閉合邊界的中心點(diǎn)象素縱坐標(biāo)v;52)以閉合邊界中心點(diǎn)象素坐標(biāo)(u,v)按四個(gè)方向掃描閉合邊界的直徑,分別得到四個(gè)長(zhǎng)度值d1,d2,d3,d4;53)取平均直徑為d=(d1+d2+d3+d4)/4,定義圓的規(guī)范度為N=|d-d1|/d+|d-d2|/d+|d-d3|/d+|d-d4|/d;54)對(duì)每一個(gè)閉合邊界計(jì)算其N值,根據(jù)實(shí)測(cè)統(tǒng)計(jì)結(jié)果將N值大于設(shè)定閾值TN的閉合邊界丟棄,剩下的閉合邊界認(rèn)為是條碼圓形單元模塊的邊界。
19.如權(quán)利要求14所述的方法,其特征是所述步驟6)區(qū)別并剔除不同碼圖符號(hào)的圓形單元模塊的過(guò)程包括61)取得兩個(gè)圓的尺寸差異度設(shè)一個(gè)圓的直徑長(zhǎng)度為D1,另一個(gè)圓的直徑長(zhǎng)度為D2,則這兩個(gè)圓的尺寸差異度為L(zhǎng)dif=|D1-D2|/max(D1,D2),設(shè)定條碼的靜區(qū)寬度為M個(gè)圓形單元模塊直徑,并且圓的尺寸差異度為L(zhǎng)dif;62)選擇離圖像中心點(diǎn)最近的圓形單元模塊為種子圓形單元模塊,然后將距離該圓形單元模塊距離小于M且尺寸差異度Ldif小于預(yù)設(shè)值的圓形單元模塊加入到分組中;63)一輪增長(zhǎng)結(jié)束后,以新加入組的圓形單元模塊為種子圓形單元模塊重復(fù)增長(zhǎng)過(guò)程,直到?jīng)]有新的圓形單元模塊加入組為止。
20.如權(quán)利要求14所述的方法,其特征是所述步驟7)方向定位的過(guò)程包括71)找出碼圖符號(hào)的四角定位圓形單元模塊;72)設(shè)定四角定位圓形單元模塊的坐標(biāo);73)按照坐標(biāo)校正公式,計(jì)算各圓形單元模塊的坐標(biāo)。
21.如權(quán)利要求14所述的方法,其特征是所述步驟8)的過(guò)程包括根據(jù)與編碼時(shí)的碼詞比特到條碼圓形單元模塊的布局,及碼圖符號(hào)中的各圓形單元模塊坐標(biāo),設(shè)置碼詞各比特位的值,有圓形單元模塊對(duì)應(yīng)的碼詞的比特位為比特1,否則為比特0;運(yùn)用Reed-solomon糾錯(cuò)算法對(duì)碼詞糾錯(cuò);糾錯(cuò)成功后,輸出數(shù)據(jù)字。
22.如權(quán)利要求20所述的方法,其特征是所述步驟71)的具體過(guò)程包括根據(jù)各圓形單元模塊的閉合邊界坐標(biāo),計(jì)算出圓形單元模塊組的最小外接矩形,經(jīng)過(guò)該最小外接矩形的中心坐標(biāo)劃一條水平線與垂直線,將圓形單元模塊分成左上、右上、左下以及右下四個(gè)區(qū),確定每一個(gè)區(qū)中離最小外接矩形的中心最遠(yuǎn)的點(diǎn)為該區(qū)的定位圓形單元模塊。
23.如權(quán)利要求20所述的方法,其特征是所述步驟72)的具體過(guò)程包括設(shè)定四角定位圓形單元模塊在條碼中的坐標(biāo)分別為(0,0)、(11,0)、(0,8)以及(11、8);
24.如權(quán)利要求20所述的方法,其特征是所述步驟73)的具體過(guò)程包括根據(jù)坐標(biāo)校正公式x’=K0*x+K1*x*y+K2*y+K3;y’=K4*x+K5*x*y+K6*y+K7;(x’,y’)為各圓形單元模塊的坐標(biāo),(x,y)為圖像中原點(diǎn)的坐標(biāo),將四角定位圓形單元模塊在條碼中的坐標(biāo)以及它們?cè)趫D像中的坐標(biāo)代入上述公式得到8個(gè)8元一次方程,解方程組得出K0~K78個(gè)系數(shù),將K0~K7代入方程就得到了坐標(biāo)轉(zhuǎn)換方程,將每個(gè)圓形單元模塊的中心坐標(biāo)填入該方程組,計(jì)算出該圓形單元模塊在條碼中的坐標(biāo)。
全文摘要
本發(fā)明公開(kāi)了一種二維碼及其編解碼方法,二維碼采用圓形單元模塊,且模塊與模塊之間保留間隙;圓形單元模塊在深度離焦條件下成像后還是圓形單元模塊,經(jīng)過(guò)unsharp mask濾波后能很好的還原圓形單元模塊的形狀。這種設(shè)計(jì)使得圖像處理算法對(duì)二值化閾值的選擇不敏感,又因模塊間有間隙,減小了二值化后相鄰模塊粘連在一起可能性,使得每個(gè)模塊可以被單獨(dú)定位。因此,本發(fā)明即便在深度離焦、低照度成像條件下仍可以可靠地識(shí)讀、解碼;易識(shí)讀,糾錯(cuò)能力強(qiáng),對(duì)識(shí)讀設(shè)備的要求低,利于廣泛推廣應(yīng)用。
文檔編號(hào)G06K9/00GK1885311SQ20061002109
公開(kāi)日2006年12月27日 申請(qǐng)日期2006年5月29日 優(yōu)先權(quán)日2006年5月29日
發(fā)明者常治國(guó), 呂迎豐, 張偉 申請(qǐng)人:深圳矽感科技有限公司