王 超 冉鑫澤 劉 毅
1(國家食品藥品監督管理總局信息中心 北京 100053) 2(華中科技大學 湖北 武漢 430074) 3(復旦大學 上海 201203)
條形碼是一種廣泛應用在商業、郵政、圖書管理、倉儲、工業生產過程控制等領域的自動識別技術具有輸入速度快、準確度高、成本低、可靠性強等優點。條形碼有一維碼、二維碼、三維碼等類型。常見的一維碼有EAN碼、UPC碼、25碼、39碼、128碼等,一維碼一般有數據校驗功能;常見的二維碼有QR碼、PDF417碼、Data Matrix碼、漢信碼、龍貝碼等,二維碼一般具有數據糾錯功能;一維碼、二維碼均印制在平面上的圖形,是二維空間的編碼,三維碼則在此基礎上增加第三維的信息,獲得更大的數據容量[1]。
二維碼是一種數據交換的載體。常見應用中,二維碼存儲物品的編碼、或某個域名信息,使用信息終端掃碼獲取編碼或域名,進而通過訪問網絡獲取更多的相關信息,這類應用對二維碼的數據容量尚沒有很大的要求。在一些特殊情況下,維碼需要存儲較多的數據信息,例如在現在火車票、機票上,廣泛采用二維碼,可以存儲用戶姓名、證件號碼、車/班次等信息[2-4]。
當二維碼被用作普通意義的數據傳輸信道時,容量更成為一個突出的問題。文獻[5-6]中,利用二維碼實現物理隔離的數據安全交換。類似的,在文獻[7]中,運用二維條碼技術和數字圖像處理實現非涉密外網與涉密內網數據的單向傳輸。
上述文獻提出的應用模式對條碼信息容量提出很高的要求,但沒有給出可行的大容量條碼技術方案。在二維碼基礎上,用顏色擴充第三維信息,實現三維碼設計,增大信息容量,是一種簡單易行的方式。
QR碼,即快速響應矩陣碼,應用非常廣泛,特別在移動互聯網時代無處不在的掃碼應用中,QR碼更是不可或缺的標識形式。QR碼按模塊數量不同分為40個不同版本,其中版本1規格為21×21個模塊,版本40規格為177×177個模塊。不同版本信息容量不同,表1給出了幾種版本模塊數量對應的數據容量情況[8]。

表1 不同版本模塊數量及數據容量
如圖1所示,QR碼中用黑白模塊表示一個比特位的數據信息,并設計了定位圖形、矯正圖形,可實現快速識讀,在圖像彎曲、變形情況下仍具有較強的識別能力[9-13]。

圖1 QR碼符號示例
在二維碼基礎上,增加顏色信息,即形成所謂彩色二維碼,可以增加二維碼的信息容量,這也是多維碼/三維碼的一種主要形式。對于相同的模塊結構,黑白碼每個模塊表示1個比特位,而四種顏色時每個模塊可以表示兩個比特位的信息,容量增加一倍。
微軟公司制定了Microsoft Tag 多維碼,這種二維條碼有四色和八色兩種版本,主要用于保存URL、vCard 和電話。解碼時需要根據解碼得到的索引號連接到服務器中獲取相應數據。Microsoft Tag 針對不同的內容打開不同的應用,實現了單個條碼對應多條信息[14]。
韓國ColorZip 公司推出一種名叫ColorCode 的多維碼,該條碼由延世大學的研究小組開發,并逐漸推出了相關產品。ColorCode 的特點是像照片那樣由一看即懂的圖案構成,重點在于條碼外觀的個性化設計,條碼內只存了一個索引信息,使用時將解碼得到的索引發送給服務器,服務器將索引對應的相關信息發送到手機上。ColorCode 本身的信息容量并不高,獲取信息需要和Microsoft Tag一樣聯網,沒有離線獲取信息的功能[15-17]。
清華大學的關濤[18]分析了Data Matrix 條碼的生成過程,并對其進行信息擴展,生成了一種新的彩色Data Matrix 條碼。Data Matrix 條碼能夠離線解碼數據,且其數據容量相對于二維碼提高了很多。
類似彩色Data Matrix碼,也可以在QR碼基礎上擴展模塊的顏色,形成新的二維碼方案。陳元枝等[19-20]提出一種彩色QR碼方案,每一個模塊表示的不僅僅是一位的二進制數據,可以表示兩位、三位甚至更多。假設編碼采用的顏色數量為2 k,則QR碼符號中每個模塊可以儲存的比特數就是k。為了保證彩色QR碼的可靠性和健壯性,這種彩色QR碼方案只改變了數據編碼區域的顏色信息,功能圖形依然使用的是普通的黑白QR碼的,這樣可以最大程度的保證其和普通黑白QR碼的兼容性。
上述彩色二維碼方案中,Microsoft Tag和ColorCode主要目的是為用戶提供一種更絢麗的條碼方案,而非擴大數據容量。文獻[18-20]提出的方案中,直接對表示數據的圖形模塊進行顏色擴展,從而提高信息容量。這種設計思路容易理解,但是新的條碼與Data Matrix或QR碼不僅結構上不兼容,而且對數據編碼、糾錯碼的設計也帶來影響,限制了新方案的應用。
QR碼性能良好,應用非常廣泛。在QR碼基礎上,擴展第三個維度的顏色信息,可以增加信息容量,不僅繼承了QR碼的優點,還有利于彩色二維碼的應用普及。基于該思想,設計新型彩色QR碼技術方案。
首先,將需要寫入二維碼的信息按照先后順序平均分成前、后兩部分,按照普通QR碼的生成方法,將兩部分數據分別寫入前、后兩個相同版本的QR碼中,也即兩個二維碼的位置探測圖形、定位圖形、分隔符、版本信息和格式信息完全一樣。
然后,根據上述兩個普通QR碼符號,生成彩色QR碼,彩色QR碼模塊顏色定義的規則如表2所示。例如前后兩個QR碼相應位置模塊為白色和黑色,則彩色QR碼相應位置模塊為紅色。

表2 彩色QR碼模塊顏色定義規則
該彩色QR碼位置探測圖形、定位圖形、分隔符、版本信息和格式信息完全遵循QR碼的技術標準,也不需要考慮模塊掩模、糾錯等問題。
解碼時,根據彩色QR碼的模塊顏色,按照表2規則反向操作,將彩色QR碼還原為前、后兩個黑白QR碼,分別提取存儲的信息,最后按前、后順序將兩部分信息拼接在一起,得到所需的完整信息。綜上所述,彩色QR編碼、解碼流程如圖2所示。

圖2 彩色QR碼編碼/解碼流程
相比黑白二維碼,提高解碼的可靠性是彩色二維碼面臨的一個關鍵問題,增加顏色維度不僅影響二維碼符號圖形的檢測,增加模塊的顏色類型,也會影響提取信息的準確性。
為了提高彩色QR碼識別的可靠性,在選擇模塊顏色時,盡可能使顏色之間的區分度更大。眾所周知,紅色、綠色、藍色是三原色,按比例混合可以得到各種其他顏色。圖3為RGB顏色空間示意圖,RGB顏色空間處在邊長為1的正方體中,紅色、綠色、藍色分別位于立方體在坐標軸上的三個頂點上,坐標系原點處為黑色,其他定點分別對應白色、黃色、品紅和青色。

圖3 RGB顏色空間示意圖
顏色空間中,空間距離越大,顏色區分度越高。因此,彩色QR碼模塊顏色可以選擇RGB空間頂點處的顏色。方案中,彩色QR碼定位圖形、校正圖形仍然為黑色,這樣可以提高這些圖形識別的準確性。
綜上所述,在彩色QR碼方案設計中,選擇了黑色、白色、紅色、藍色作為模塊的四種顏色,具體配色規則見表2。
在Visual Studio 2012開發平臺上,采用C#編程語言編程實現了新型彩色QR碼生成、解碼功能。
測試中,分別輸入10個、20個、30個漢字,程序將字符串分為兩部分,分別生成前、后兩個相同版本的QR碼,并依據表2定義的規則自動生成彩色QR碼,并用惠普LaserJet Pro CP1025 彩色激光打印機打印出來。圖4中,需要存儲的字符串是“白日依山盡黃河入海流”,分段后分別生成兩個QR碼。其中,圖4(a)存儲的信息是“白日依山盡”,圖4(b)中存儲的是“黃河入海流”,圖4(c)是合成的彩色(不同灰度)QR碼。

(a) 前二維碼(b) 后二維碼(c) 對應彩色QR碼 圖4 彩色QR碼生成實例
解碼時,用攝像機采集彩色QR碼圖像,基于普通QR碼圖像分析原理,實現二維碼的定位及模塊分割。計算每個功能模塊所有像素R、G、B的均值,對均值歸一化后,計算其與RGB顏色空間中黑色、白色、紅色、藍色的空間距離,按距離大小實現模塊顏色的判斷。由于采用所有像素的統計特性,所以能最大化提高模塊顏色判定的準確性。依據模塊的顏色,按照表2定義的規則,還原兩個普通QR碼,提取兩個QR碼中的信息并拼接得到完整信息,完成彩色QR碼的解碼過程。
分別在不同情況下對彩色QR碼的識別準確率進行測試:正常情況下的測試、皺褶或彎曲情況下的測試、顏色光照明條件下的測試。
在自然漫反射環境光下進行彩色QR碼識別測試,印刷彩色QR碼的紙張平整,攝像機正向采集圖像。此時彩色QR碼識讀穩定,沒有出現數據差錯。
測試中,過度的皺褶、彎曲導致數據錯誤、甚至無法識別,這是由圖形定位錯誤、模塊分割錯誤引起。測試中,保證標準黑白QR碼能夠被正確識別,在同等皺褶、彎曲條件下,測試彩色QR碼識別準確性的差異。經過100次試驗(其中皺褶80次、彎曲20次),彩色QR碼正確識別97次,準確性略有下降。
在顏色光照明條件下進行彩色QR碼識別測試,分別用紅、綠、藍單色光照明,QR碼能夠正確定位,但數據大量錯誤。顯而易見,彩色QR碼中,模塊的顏色包含了數據信息,在偏色條件下,可能導致顏色識別錯誤,數據不能得到正確解碼。
實驗表明,正常條件下,彩色QR碼識別準確率與QR碼持平,具有較高的可靠性。但對照明光的偏色敏感,過度偏色將導致數據出現明顯差錯。因此應用過程中,應盡可能采用自然光、日光燈等白光源照明。
QR碼是一種廣泛應用的數據載體形式,通過增加顏色維度可以成倍增加數據容量,拓寬二維碼的應用范圍。本文設計的彩色二維碼在保留QR碼圖形特征、數據編碼特征的基礎上,將信息切分兩段,分別生成QR碼,按特定顏色定義規則合成為彩色二維碼。如果增加顏色種類,可以進一步增加信息容量。該方案原理簡潔、實用,識別穩定可靠,在彩色QR碼合成前及分解后,與標準QR碼完全兼容,比較容易得到推廣。