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