陳元枝,鄧 艷,史紹亮,姜文英
(1.桂林電子科技大學(xué) 電子工程與自動(dòng)化學(xué)院,廣西 桂林 541004;2.中國(guó)科技開(kāi)發(fā)院廣西分院,南寧 530012)
?
基于Zxing的彩色QR碼生成與識(shí)別方法
陳元枝1,鄧艷1,史紹亮2,姜文英1
(1.桂林電子科技大學(xué) 電子工程與自動(dòng)化學(xué)院,廣西 桂林541004;2.中國(guó)科技開(kāi)發(fā)院廣西分院,南寧530012)
針對(duì)黑白條碼數(shù)據(jù)容量小、信息嵌入能力不足等問(wèn)題,在Zxing的基礎(chǔ)上設(shè)計(jì)了一種彩色QR碼的生成和識(shí)別方法。該方法利用2k種二進(jìn)制組合對(duì)數(shù)據(jù)信息進(jìn)行編碼,對(duì)應(yīng)k種不同的編碼顏色,利用二進(jìn)制值與十進(jìn)制值之間的轉(zhuǎn)換實(shí)現(xiàn)準(zhǔn)確的顏色識(shí)別,編碼顏色可任意選取,不需要利用參考顏色處理顏色模塊邊緣的混疊效應(yīng),計(jì)算復(fù)雜度大幅降低。實(shí)驗(yàn)結(jié)果表明,基于Zxing的彩色QR碼不僅擴(kuò)充了數(shù)據(jù)容量,而且保留了黑白QR碼的可靠性和魯棒性。
彩色QR碼;數(shù)據(jù)容量;編碼;條碼識(shí)別;Zxing
近年來(lái),彩色條碼成為信息嵌入技術(shù)之一,顏色的使用大大提高了黑白條碼的數(shù)據(jù)容量。研究者為了提高二維碼的數(shù)據(jù)容量進(jìn)行了大量的研究。Han[1]首次提出了彩色二維碼ColorCode,利用參考顏色克服了顏色保真度的問(wèn)題,為區(qū)分每種顏色提供了標(biāo)準(zhǔn)的顏色參考,為彩色二維碼的發(fā)展奠定了基礎(chǔ)。微軟公司開(kāi)發(fā)了高容量的彩色條碼[2](high capacity color barcode,簡(jiǎn)稱(chēng)HCCB),HCCB碼采用不同顏色的三角形編碼數(shù)據(jù),提高了數(shù)據(jù)容量并減小了條碼元素的尺寸,但HCCB碼掃描的魯棒性較差。彩色PM(paper memory)碼[3]利用獨(dú)特的層狀結(jié)構(gòu)提高了數(shù)據(jù)容量,但解碼時(shí)對(duì)設(shè)備分辨率要求過(guò)高。Kato等[4]提出的移動(dòng)多彩色復(fù)合碼(mobile multi-color composite,簡(jiǎn)稱(chēng)MMCC)選取的編碼顏色最大限度地分離RGB顏色立方體的黑、紅、青、白平面,數(shù)據(jù)容量增加至黑白QR碼的4倍,但MMCC碼無(wú)法正確解碼褶皺或邊緣彎曲的失真符號(hào)。Querini等[5]在黑白QR碼的基礎(chǔ)上研發(fā)了高容量的彩色二維碼(high capacity colored 2-dimensional code,簡(jiǎn)稱(chēng)HCC2D),它將調(diào)色板均勻分布在QR碼的四周,解決了HCCB碼的檢測(cè)和校準(zhǔn)問(wèn)題,但其數(shù)據(jù)容量略小于HCCB碼,解碼的正確率取決于彩色打印機(jī)的分辨率。
由于彩色條碼觀察到的顏色取決于條碼表面的反射率和未知光源的光譜,彩色二維碼主要利用參考顏色處理偏色問(wèn)題,導(dǎo)致計(jì)算復(fù)雜度明顯增加、解碼正確率不高。為了避免顏色模塊邊緣的混疊效應(yīng),要求編碼顏色在RGB空間相距最遠(yuǎn),以提高顏色的辨識(shí)度。為此,在Zxing[6]的基礎(chǔ)上設(shè)計(jì)了一種彩色QR碼的生成和識(shí)別方法,彩色QR碼的數(shù)據(jù)容量相比黑白二維碼和同類(lèi)型的彩色二維碼均有明顯的優(yōu)勢(shì)。將生成的彩色QR碼保存為PNG格式后,編碼顏色可以任意選取,無(wú)須利用參考顏色處理彩色QR碼的偏色問(wèn)題,計(jì)算復(fù)雜度明顯降低。
1.1PM碼
2005年,日本專(zhuān)利局提出彩色PM碼。PM碼利用獨(dú)特的層狀結(jié)構(gòu)顯著地提高了數(shù)據(jù)容量,PM碼有多層且每層都是單色的QR碼,PM碼表層的顏色模塊可能呈現(xiàn)2種顏色,一種是單個(gè)碼層的顏色,另一種是多層疊加后合成的顏色。當(dāng)合成的顏色與單層的顏色一樣時(shí),合成的顏色將根據(jù)PM碼的轉(zhuǎn)換算法,在RGB和HSB兩個(gè)顏色空間之間將其轉(zhuǎn)換成指定的顏色。PM碼的顏色轉(zhuǎn)換算法連同包含在條碼表層的索引信息,使解碼軟件能夠檢測(cè)每層顏色模塊是否存在,繼而解碼每層的數(shù)據(jù),最終解碼PM碼。
1.2CQR碼
受PM碼多層二維碼的啟發(fā),Nurwono等[7]提出了CQR碼(color quick response code),CQR碼將待編碼的數(shù)據(jù)分成3組,采用第三方編碼軟件分別生成3個(gè)黑白QR碼,并設(shè)定第1層QR碼為紅色,第2層QR碼為綠色,第3層QR碼為藍(lán)色,用Adobe Photoshop將3個(gè)單色QR碼疊加,疊加后同一像素點(diǎn)的顏色值相加,最后將整個(gè)圖像的顏色值反轉(zhuǎn)生成CQR碼。解碼時(shí),遍歷由手機(jī)采集的CQR碼,得到每個(gè)像素點(diǎn)的RGB值,分離并解碼單層QR碼,最后將3個(gè)單色QR碼的解碼結(jié)果級(jí)聯(lián),顯示解碼結(jié)果。雖然CQR碼能儲(chǔ)存9 KB數(shù)據(jù),但是在保證光源、拍攝角度、拍攝距離、手機(jī)像素等實(shí)驗(yàn)條件下平均解碼正確率僅為63%。
1.3HCC2D碼
Grillo和Querini共同研發(fā)了HCC2D碼,HCC2D碼在擴(kuò)充條碼容量的同時(shí),保留了黑白QR碼的可靠性和魯棒性。HCC2D碼能支持不同類(lèi)型和不同長(zhǎng)度的數(shù)據(jù),根據(jù)輸入數(shù)據(jù)的長(zhǎng)度自適應(yīng)選擇條碼的維度。因?yàn)镠CC2D碼的位置探測(cè)圖形、分隔符、定位圖形、校正圖形、格式信息以及版本信息均與黑白QR碼一致,所以HCC2D與黑白QR碼兼容。HCC2D碼的數(shù)據(jù)容量?jī)H次于HCCB碼,但其解決了HCCB碼的檢測(cè)和校準(zhǔn)問(wèn)題。
2.1彩色QR碼的設(shè)計(jì)思路
黑白QR碼每個(gè)模塊只能容納1位二進(jìn)制數(shù)據(jù),通常白色用“0”表示,黑色用“1”表示。若每個(gè)模塊放入2位二進(jìn)制數(shù)據(jù),則有4種不同的組合,“00”、“01”、“10”、“11”分別表示4種顏色。例如,二進(jìn)制數(shù)據(jù)為11001100,若采用黑白QR碼,則需要存入8個(gè)模塊,但采用4色QR碼,每次讀取2位二進(jìn)制數(shù)據(jù),并將其轉(zhuǎn)換為1位十進(jìn)制數(shù)據(jù),即11→3,00→0,11→3,00→0,然后將4位十進(jìn)制數(shù)據(jù)存入4個(gè)模塊,即4色QR碼的數(shù)據(jù)容量為黑白QR碼的2倍。將這個(gè)結(jié)論推廣,若每個(gè)模塊放入k(k≥2)位二進(jìn)制數(shù)據(jù),則彩色QR碼采用2k種顏色表示,數(shù)據(jù)容量為黑白QR碼的k倍。
2.2彩色QR碼相對(duì)黑白QR碼的變化
為了確保彩色QR碼的可靠性和魯棒性,4色QR碼保留了黑白QR碼的功能圖形、格式信息和版本信息區(qū)域,由于3個(gè)區(qū)域占QR碼的面積比例很小,提高QR碼的數(shù)據(jù)容量?jī)H在數(shù)據(jù)和糾錯(cuò)碼字區(qū)域進(jìn)行。隨著顏色種類(lèi)的增加,單位面積的數(shù)據(jù)容量隨之增大。假設(shè)編碼采用的顏色數(shù)為2k種,則每個(gè)模塊可儲(chǔ)存的比特?cái)?shù)為k。
碼字總數(shù)、剩余位、數(shù)據(jù)碼字?jǐn)?shù)、糾錯(cuò)碼字?jǐn)?shù)、糾錯(cuò)塊數(shù)等均為黑白QR碼的k倍。當(dāng)k=1時(shí),QR碼采用黑白兩色編碼;當(dāng)k=2時(shí),QR碼采用4種顏色編碼,以此類(lèi)推。為了簡(jiǎn)化計(jì)算,彩色QR碼以4種顏色為例,低版本黑白QR碼和彩色QR碼的數(shù)據(jù)容量如表1所示。
表1 低版本黑白QR碼和彩色QR碼的數(shù)據(jù)容量
與黑白QR碼相比,彩色QR碼的數(shù)據(jù)密度更高,因此彩色QR碼的字符計(jì)數(shù)指示符的位數(shù)需要相應(yīng)增加。如表2所示,彩色QR碼數(shù)字模式、字母數(shù)字模式、中國(guó)漢字模式的字符計(jì)數(shù)指示符位數(shù)為n+[k/2],其中,n為黑白QR碼的字符計(jì)數(shù)指示符的位數(shù)。彩色QR碼8位字節(jié)模式的字符計(jì)數(shù)指示符的位數(shù)均為16。
表2 黑白QR碼和彩色QR碼字符計(jì)數(shù)指示符的位數(shù)
2.3彩色QR碼生成舉例
將“12345678”編碼為版本1-L的4色QR碼的步驟為:
1)根據(jù)表1和表2擴(kuò)充4色QR碼的數(shù)據(jù)容量和字符計(jì)數(shù)指示符的位數(shù)。
2)根據(jù)待編碼內(nèi)容選擇編碼模式為數(shù)字模式。
3)根據(jù)QR碼數(shù)字模式的編碼規(guī)則,將“12345678”編碼為27位二進(jìn)制數(shù)據(jù),即12345678→000111101101110010001001110。
4)由數(shù)據(jù)碼字流的字節(jié)數(shù)為4,確定彩色QR碼的版本號(hào)為1、糾錯(cuò)等級(jí)為L(zhǎng)、碼字總數(shù)為52、數(shù)據(jù)碼字?jǐn)?shù)為38、糾錯(cuò)碼字?jǐn)?shù)為14以及糾錯(cuò)的塊數(shù)為2。
5)連接數(shù)字模式的模式指示符0001、字符計(jì)數(shù)指示符00000001000和二進(jìn)制數(shù)據(jù),適當(dāng)添加終止符0000、填充位00和填充碼字。
6)采用Reed-Solomon算法對(duì)數(shù)據(jù)碼字流進(jìn)行分塊糾錯(cuò),形成糾錯(cuò)碼字流。塊1的數(shù)據(jù)碼字為{16,16,61,-71,19,-128,-20,17,-20,17,-20,17,-20,17,-20,17,-20,17,-20};塊1的糾錯(cuò)碼字為{-32,21,90,-1,-45,121,1};塊2的數(shù)據(jù)碼字為{17,-20,17,-20,17,-20,17,-20,17,-20,17,-20,17,-20,17,-20,17,-20,17};塊2的糾錯(cuò)碼字為{-47,8,-15,30,-67,103,0}。
7)根據(jù)QR碼符號(hào)中字符的布置規(guī)則,構(gòu)造信息的最終碼字序列。
8)填充功能圖形區(qū)域,包括尋像圖形、分隔符、定位圖形、校正圖形區(qū)域,黑色用3填充,白色用0填充。
9)填充格式信息和版本信息,黑色用3填充,白色用0填充。
10)對(duì)數(shù)據(jù)和糾錯(cuò)碼字區(qū)域進(jìn)行掩膜。
11)根據(jù)QR碼符號(hào)字符的排列規(guī)則,在步驟9)、10)的基礎(chǔ)上填充數(shù)據(jù)碼字和糾錯(cuò)碼字,每次讀取2位二進(jìn)制數(shù)據(jù),將其轉(zhuǎn)換為十進(jìn)制數(shù)據(jù),填充到矩陣元素aij=0,1,2,3的21×21階矩陣。
12)根據(jù)顏色映射表,將矩陣元素0映射為白色、1映射為青色、2映射為紅色、3映射為黑色,生成4色QR碼,并將4色QR碼圖像保存為PNG格式的圖像。
2.4彩色QR碼識(shí)別舉例
編碼內(nèi)容為“12345678”的4色QR碼的解碼步驟為:
1)加載并遍歷4色QR碼圖像。由于圖像保存為PNG格式,可得到每個(gè)像素點(diǎn)的RGB值,并將90 000個(gè)像素點(diǎn)的RGB值一一映射為0、1、2、3。
2)將圖像二值化。
3)檢測(cè)尋像圖形是否存在。若成功檢測(cè)尋像圖形,則返回3個(gè)位置探測(cè)圖形中心點(diǎn)的坐標(biāo),進(jìn)入步驟4),否則進(jìn)入步驟12)結(jié)束本次解碼。
4)由3個(gè)位置探測(cè)圖形中心點(diǎn)的坐標(biāo),計(jì)算每邊的模塊數(shù),即版本號(hào),若版本號(hào)大于等于2,則返回校正圖形中心點(diǎn)的坐標(biāo)。
5)利用透視變換得到柵格化的QR碼,矩陣元素僅為0、1、2、3。
6)根據(jù)預(yù)設(shè)的顏色映射表,識(shí)讀格式信息和版本信息。
7)消除掩膜,恢復(fù)數(shù)據(jù)碼字和糾錯(cuò)碼字。
8)采用糾錯(cuò)碼字進(jìn)行錯(cuò)誤檢查。若發(fā)現(xiàn)錯(cuò)誤,則進(jìn)入步驟9);否則進(jìn)入步驟10)。
9)根據(jù)接收碼字多項(xiàng)式,計(jì)算伴隨式并求解錯(cuò)誤位置,對(duì)每個(gè)錯(cuò)誤位置取反,以實(shí)現(xiàn)分塊糾錯(cuò)。
10)根據(jù)模式指示符和字符計(jì)數(shù)指示符,將數(shù)據(jù)碼字劃分為多個(gè)部分,按照使用的模式譯碼。
11)根據(jù)數(shù)據(jù)碼字譯碼結(jié)果,輸出源數(shù)據(jù)信息流。
12)結(jié)束解碼。
3.1數(shù)據(jù)容量
黑白QR碼與彩色QR碼版本40-L的數(shù)據(jù)容量見(jiàn)表3。由于4色QR碼每個(gè)模塊儲(chǔ)存了2位二進(jìn)制數(shù)據(jù),而黑白QR碼每個(gè)模塊僅儲(chǔ)存1位二進(jìn)制數(shù)據(jù),隨著彩色二維碼字符計(jì)數(shù)指示符位數(shù)的增加,4色QR碼的數(shù)據(jù)容量約為黑白QR碼的2倍。
表3 黑白QR碼與彩色QR碼版本40-L的數(shù)據(jù)容量
6種二維碼的最大數(shù)據(jù)容量見(jiàn)表4。由表4可知,4色QR碼的數(shù)據(jù)容量遠(yuǎn)大于Data Matrix、PDF417以及黑白QR碼。與關(guān)濤[8]設(shè)計(jì)的4色DM碼和賈華國(guó)等[9]設(shè)計(jì)的具有高壓縮比漢字編碼能力的6色DM碼相比也有明顯的優(yōu)勢(shì)。
表4 6種二維碼的最大數(shù)據(jù)容量
3.2顏色識(shí)別
隨機(jī)選取RGB顏色立方體的4個(gè)對(duì)角線(xiàn)平面WYBK(white、yellow、blue、black)、WGMK(white、green、magenta、black)、WCRK(white、cyan、red、black)、YCRB(yellow、cyan、red、blue)對(duì)“桂林電子科技大學(xué)”采用4種不同顏色編碼生成的彩色QR碼,如圖1所示。圖1均為版本1、糾錯(cuò)等級(jí)為L(zhǎng)的4色QR碼。
圖1 彩色QR碼示例Fig.1 Example of color QR code
從圖1可看出,4色QR碼的編碼顏色可以任意選取,不要求編碼顏色在RGB顏色立方體中的距離最遠(yuǎn)以提高顏色的辨識(shí)度,任意4種顏色均可正確解碼。這是因?yàn)榫幋a后的矩陣元素0、1、2、3與顏色映射表中顏色一一對(duì)應(yīng),而編碼生成的彩色QR碼圖片保存為無(wú)損壓縮格式PNG,確保解碼能精確地識(shí)別每個(gè)模塊的RGB值,并將RGB值與預(yù)先設(shè)定的顏色映射表中數(shù)值一一對(duì)應(yīng),4色QR碼每次讀取2位二進(jìn)制數(shù),并將其轉(zhuǎn)化為1位十進(jìn)制數(shù),能精確地識(shí)別顏色,且編碼顏色可任意選取。
3.3計(jì)算復(fù)雜度
主流的彩色條碼利用參考顏色作為調(diào)色板來(lái)辨別顏色模塊,并采用一種自適應(yīng)的顏色閾值算法處理偏色問(wèn)題,將每個(gè)顏色模塊與參考顏色對(duì)比得到偏色范圍,然后定義顏色區(qū)間,最后對(duì)圖像進(jìn)行偏色糾正,彩色條碼的計(jì)算復(fù)雜度相對(duì)黑白條碼大幅增加,且顏色區(qū)間決定了解碼正確率的高低。顏色區(qū)間過(guò)大,不同色調(diào)的顏色將歸為同種顏色;顏色區(qū)間過(guò)小,不同光照條件下的同種顏色將解碼為不同顏色。編碼顏色在RGB顏色空間中相距越遠(yuǎn),顏色的辨識(shí)度越高,因此主流彩色條碼的編碼顏色數(shù)受到限制。主流的彩色條碼圖片保存為有損壓縮格式JPEG,相鄰顏色模塊容易受到顏色混疊的影響,將調(diào)色板作顏色匹配容易造成解碼錯(cuò)誤。
為了減小計(jì)算復(fù)雜度,提高數(shù)據(jù)容量和解碼正確率,不進(jìn)行偏色處理。彩色QR碼從電子檔變成紙質(zhì)檔涉及顏色空間的轉(zhuǎn)換,色域的不同將導(dǎo)致顏色信息的丟失,雖然該方法不支持掃描紙質(zhì)檔的彩色QR碼,但能夠準(zhǔn)確地識(shí)別顏色,無(wú)需采用參考顏色處理顏色模塊邊緣的混疊效應(yīng),導(dǎo)致計(jì)算量顯著減少,且編碼顏色可任意選取。編碼顏色數(shù)目也將不受限制,隨著編碼顏色種類(lèi)的增多,數(shù)據(jù)容量將顯著提升。
在Zxing的基礎(chǔ)上設(shè)計(jì)了一種彩色QR碼的生成和識(shí)別方法,該方法生成的4色QR碼的數(shù)據(jù)容量為黑白QR碼的2倍,等于4色HCCB碼,略大于4色HCC2D碼,數(shù)據(jù)容量與4色或6色的DM碼相比有明顯的優(yōu)勢(shì)。彩色QR碼的編碼顏色可以任意選取,彩色QR碼解碼對(duì)環(huán)境光照無(wú)特殊要求,通過(guò)二進(jìn)制數(shù)據(jù)與十進(jìn)制數(shù)據(jù)的相互轉(zhuǎn)換,能準(zhǔn)確地識(shí)別顏色,無(wú)需采用調(diào)色板匹配顏色模塊,計(jì)算復(fù)雜度大大降低。
[1]CHEOL-HO C,EUN-DONG S,NAM-KYU L,et al.Machine readable code image and method of encoding and decoding the same:United States,7020327[P].2002-03-07.
[2]Microsoft Research.High capacity color barcode [EB/OL].(2007-03-19)[2015-11-25].http://research.microsoft.com/projects/hccb.
[3]ONODA T,MIWA K.Hierarchized two-dimensional code, creation method thereof, and read method thereof:European,1916619[P].2011-05-25.
[4]KATO H, TAN K T, CHAI D. Novel colour selection scheme for 2D barcode[C]//IEEE International Symposium on Intelligent Signal Processing and Communication Systems,2009:529-532.
[5]QUERINI M,GRILLO A,LENTINI A,et al. 2D color barcodes for mobile phones[J].International Journal of Computer Science and Applications,2011,8(1):136-155.
[6]CROSSING Z.Multi-format 1d/2d barcode image processing library with clients for android [EB/OL].(2012-03-15)[2015-11-25].http://code.google.com/p/zxing.
[7]NURWONO K A H,KOSALA R.Color quick response code for mobile content distribution[C]//The 7th ACM International Conference on Advances in Mobile Computing and Multimedia,2009:267-271.
[8]關(guān)濤.彩色Data Matrix條碼的設(shè)計(jì)以及若干問(wèn)題的研究[D].北京:清華大學(xué),2006:47-49.
[9]賈華國(guó),袁遠(yuǎn)松,劉志.一種面向漢字的高壓縮比彩色二維條碼的設(shè)計(jì)與實(shí)現(xiàn)[J].浙江工業(yè)大學(xué)學(xué)報(bào),2010,38(5):561-565.
編輯:曹壽平
Generation and recognition method of color QR codes based on Zxing
CHEN Yuanzhi1, DENG Yan1, SHI Shaoliang2, JIANG Wenying1
(1.School of Electronic Engineering and Automation, Guilin University of Electronic Technology, Guilin 541004, China;2.Guangxi Branch of Institute of Chinese Science and Technology Development, Nanning 530012, China)
In view of black-and-white barcode’s defects such as small data capacity and insufficient information embedding capacity, a generation and recognition method of color quick response (QR) codes based on Zxing was designed, which used 2kkinds of binary combination to encode data information, corresponding toktypes of encoding colors which could be arbitrarily selected. A conversion between binary and decimal is used to achieve accurate color recognition. The method was not necessary to use any reference color to deal with the aliasing effect on the edge of the color module, therefore the computational complexity was reduced greatly. Experimental results show that the color QR codes based on Zxing not only expand data capacity, but also retain the reliability and robustness properties of QR.
color QR code; data capacity; encoding; barcode recognition; Zxing
2016-01-12
廣西自動(dòng)檢測(cè)技術(shù)與儀器重點(diǎn)實(shí)驗(yàn)室主任基金(YQ14102)
陳元枝(1968-),男,吉林長(zhǎng)春人,教授,博士,研究方向?yàn)楣怆姍z測(cè)、圖像處理。E-mail:chenyz001@126.com
TP311
A
1673-808X(2016)04-0333-05
引文格式:陳元枝,鄧艷,史紹亮,等.基于Zxing的彩色QR碼生成與識(shí)別方法[J].桂林電子科技大學(xué)學(xué)報(bào),2016,36(4):333-337.