紀琴琴,黃 魯
(1 中國科學技術大學微電子學院,合肥 230027; 2 中國科學技術大學信息科學技術學院,合肥 230027)
條形碼技術具有簡單方便、高效準確、經濟實用等優(yōu)點,它在人們的日常生產生活中獲得廣泛的應用。條形碼作為一種通用的商品包裝標簽,通常印刷在商品或印刷品上。目前,識別一維條形碼主要依靠激光掃描儀,激光掃描儀不僅需要人工對準條形碼區(qū)域才能保證解碼率,且對條形碼質量要求很高。而使用圖像處理的方式可以識別具有一定質量缺陷的條形碼,提高條碼應用的效率。目前市場上已經出現基于圖像處理的條碼識別設備,但價格昂貴,因此,研究并開發(fā)更加經濟高效的類似產品具有很大的商業(yè)價值。
圖像處理的方法主要有兩個步驟,即條形碼定位和條碼識別,本文只討論條形碼定位的實現技術。
國內外研究人員在條形碼定位領域一直沒有停止研究的腳步:文獻[1]將圖像劃分成32×32的小塊,分析每一塊圖像的所有骨架的平行性確定其為條形碼子區(qū)域,再將所有子區(qū)域組合成條形碼區(qū)域,實驗表明所提取的條碼區(qū)域受條紋背景干擾。Gallo和Manduchi[2]提出一種快速檢測條形碼區(qū)域的方法,該方法計算每一個像素的直方圖梯度,并使用濾波器和全局二值化分割條形碼區(qū)域,但該方法不適用于傾斜條形碼的定位。文獻[3-4]提出基于形態(tài)學的方法,獲取的條形碼區(qū)域會因為噪聲區(qū)域的影響而改變。文獻[5-6]使用Hough變換尋找條形碼區(qū)域,當條碼背景有明顯的平行線時,該方法并不適用。
本文實現的條形碼區(qū)域定位方法適用于傾斜、扭曲、具有明顯平行線等復雜背景的條形碼圖像。
本文以具有代表性的EAN-13條形碼作為研究對象,如圖1。EAN-13條形碼由59個“條”和“空”組成,每個條或空是1、2、3或4倍單位元素寬度。條空黑白相間、寬窄不等、分布間隔有限且互相平行,具有明顯的單方向紋理特征。
圖1 EAN-13條碼Fig.1 EAN-13 barcode
本文算法主要由2個部分組成:圖像分割[7]、區(qū)域邊緣線提取。對輸入圖像先用Sobel算子邊緣檢測,突出條形碼區(qū)域并減弱背景區(qū)域的影響,二值化后的圖像經過數學形態(tài)學處理進一步消除背景區(qū)域,分割圖像得到多個條形碼候選區(qū)域;最后通過提取候選區(qū)域的邊緣線進行平行性分析定位條形碼區(qū)域,其原理框圖如圖2所示。
圖2 原理框圖Fig.2 Block diagram
圖3展示每個步驟的具體中間結果(圖片經過裁剪且保留主要部分)。
圖3 條形碼區(qū)域定位具體步驟圖Fig.3 Intermediate results for each step
假設圖3中的灰度圖(640×480)用f(x,y)表示,因為條形碼信息主要分布在水平方向上,所以可用f(x,y)的水平梯度圖與垂直梯度圖的差值圖作為Sobel邊緣檢測圖,以減弱背景區(qū)域的干擾。式(1)中的D(x,y)即為所求的邊緣圖。
(1)
隨后用大津法[8]計算D(x,y)的閾值T,利用式(2)對圖像進行二值化,處理后的圖像數據大為減少且條形碼區(qū)域明顯。
(2)
基于數學形態(tài)學的方法對條形碼圖像進行分割是使用一定的結構元素,利用形態(tài)學中的閉運算、腐蝕膨脹等運算對圖像進行處理,得到多個條形碼候選區(qū)域。
商品條形碼具有標準尺寸,條碼區(qū)域的長為37.29 mm,寬為26.26 mm,允許的放大倍數是0.8~2.0,是具有一定長寬比且條空排列間隔有限的矩形,長寬比約在1.4左右。因此,本文所選取的結構元素形狀為矩形,通過對大量不同背景的條碼圖像進行分割,結果表明當結構元素長寬比選取為1.5且腐蝕與膨脹次數比為2∶3可以將條形碼分割到一個區(qū)域中。同時,我們也在WWW Muenster(1)http:∥cvpr.uni-muenster.de/research/barcode/Database.和ArTe-Lab(2)http:∥artelab.dista.uninsubria.it/download.這兩個標準的一維條碼數據集上進行測試,條碼在一個區(qū)域中的正確率分別為94.8%和99.8%。
邊緣線是條形碼區(qū)域黑白的分界線且為單像素寬度,在分界處的像素值變化范圍在該像素領域最大,因此,若一個像素在該像素領域內梯度最大或最小,則認為其為分界點,所有的分界點構成邊緣線。具體步驟如下:
1) 假設條形碼候選區(qū)域為h(x,y),定義一個與h(x,y)同尺寸類型的圖像H(x,y),將其像素值全置為0。從左到右掃描h(x,y),記當前像素點的像素梯度Δp,梯度幅值Ip。
2) 考慮以像素p為中心的一個長度為r的單像素線段,這條線上有r個像素點。
3) 如果同時滿足以下兩個條件則將H(x,y)中(px,py)處的像素值置1。
a)Ip大于閾值T1(用大津法計算的h(x,y)的閾值)。
b)r-1個像素點的梯度均大于或者小于Δp。
4) 重復步驟1)、2)、3)直至h(x,y)中的像素被掃描完。
目標區(qū)域的邊緣線具有一定的長度且相互平行,背景區(qū)域的邊緣線長度較短且無規(guī)律。用橢圓擬合的方法獲得條碼候選區(qū)域的邊緣線傾斜角(與水平x的夾角),如表1所示。
表1 區(qū)域邊緣線角度值Table 1 Angles of area edge lines
基于以下兩點:
1) 理論上條形碼區(qū)域的邊緣線數是60根,但模糊受損的條碼區(qū)域邊緣線數跟理論值會有差距,差距的大小受模糊受損程度影響。
2) 扭曲形變的條形碼的邊緣線并不全是平行的。因此,目標區(qū)域必須同時滿足以下兩個條件:
a) 邊緣線數大于5;
b) 與相鄰邊緣線的傾斜角相差在2°內的邊緣線總數超過總邊緣數的3/4。
否則,認為此區(qū)域不是目標區(qū)域,如果所有的條形碼候選區(qū)域都不滿足上述兩個條件,則這張圖片不包含條形碼區(qū)域。
我們使用2個公開的一維條形碼圖片數據集進行算法性能測試:由文獻[9]提供的WWU Muenster條碼數據集和文獻[10]提供的ArTe-Lab條碼數據集。ArTe-Lab條碼數據集包括365張640×480的EAN圖片。WWU Muenster條碼數據集包含由N95手機拍攝的1 055張EAN和UPC-A條形碼圖片,Zamberletti等[10]和Creusot與Munawar[11]僅使用其中的595張圖片,數據集的具體細節(jié)如表2所示。
表2 數據集細節(jié)Table 2 Datasets details
我們的算法與文獻[10-11]提出的方法進行比較,結果如表3所示。在ArTe-Lab條碼數據集中定位條碼區(qū)域的正確率為90.1%,在Muenster條碼數據集中的正確率為97.8%,對比于文獻[10]的方法分別提高10%和15%左右且略高于文獻[11]的方法。
表3 不同條形碼區(qū)域定位算法的比較結果Table 3 Comparison of the results among different barcode localization algorithms %
圖4為我們的方法與文獻[10-11]的方法對Arte-Lab中同一張圖片的條形碼區(qū)域定位效果。
本文方法(圖左)、Creusot(圖右的綠色區(qū)域)和Zamberletti(圖右的紅色區(qū)域)圖4 對Arte-Lab中一張條碼圖片的定位結果Fig.4 Localization result for a picture in Arte-Lab
圖5展示對模糊、條紋背景等復雜情況的條碼圖片的實驗結果,圖片均是在自然光照下攝像頭采集的640×480像素且經過裁剪保留主要區(qū)域的灰度圖。
圖5 復雜圖像背景下的條碼定位Fig.5 Barcode localization in complex image background
我們以60幀/s左右的速度運行640×480圖像。在表4中,文獻[10]和文獻[11]是運用OpenCV庫C++實現的運行在Intel i7 CPU的單線程上@3.33 GHz,本文給出的結果同樣是運用OpenCV庫C++實現,運行在Intel i5 CPU的單線程上@3.40 GHz。相比于文獻[10-11]的方法,我們的算法具有更高的實時性。
表4 平均運行時間Table 4 Average computing time ms
本文所提出的條形碼定位算法簡單高效,適用于傾斜、形變、模糊等不同情況的條碼圖像。通過與現有算法進行比較,結果表明我們的算法具有非常高的實時性,在主頻1.2 GHz的樹莓派ARM7嵌入式系統上定位時間為0.29 s。