李 毅, 智立甫, 賈 明
(石家莊職業(yè)技術(shù)學(xué)院a.電氣與電子工程系;b.藝術(shù)設(shè)計(jì)系,河北 石家莊 050081)
隨著手持智能終端技術(shù)和移動(dòng)互聯(lián)技術(shù)的飛速發(fā)展,基于智能終端的各種應(yīng)用研究層出不窮.Android平臺(tái)條碼識(shí)別技術(shù)是利用數(shù)字圖像處理技術(shù),將圖像信息轉(zhuǎn)換為數(shù)字信息,在智能終端上進(jìn)行處理以實(shí)現(xiàn)自動(dòng)識(shí)別條碼信息的一種技術(shù).本文將分析如何在Android平臺(tái)上實(shí)現(xiàn)條碼圖像獲取、條碼定位、條碼檢測(cè)及譯碼.
二維條碼識(shí)別是數(shù)字處理技術(shù)的典型應(yīng)用,由圖像捕捉、圖像預(yù)處理、條碼定位、條碼檢測(cè)、譯碼、信息輸出組成,如圖1所示.
圖1 二維條碼識(shí)別結(jié)構(gòu)圖
Android平臺(tái)獲取的圖像信息以彩色模式存在,在數(shù)字處理前要將色度信息和色彩飽和度信息去除并轉(zhuǎn)換為256級(jí)的灰度圖像.將彩色圖像轉(zhuǎn)化為灰度圖像需要將RGB(紅、綠、藍(lán))顏色模式的圖像數(shù)據(jù)轉(zhuǎn)換為Y,Cb,Cr顏色模式,其中,Y代表圖像亮度,Cb代表色度,Cr代表飽和度.利用Gray(灰轉(zhuǎn)換.將色度和飽和度信息分量去掉,得到Gray=0.299R+0.587G+0.114B,再將 R,G,B三個(gè)分量設(shè)置為相等即可得到灰度圖.
為了條碼定位和識(shí)別準(zhǔn)確,需要對(duì)灰度圖進(jìn)行二值化處理,在灰度圖中選取兩個(gè)灰度等級(jí)T1和T2,并設(shè)定為灰度閾值.灰度等級(jí)在T1和T2之間的設(shè)定為1,其他設(shè)定為0.即 g(x,y)=這樣就能得到只含有黑色和白色的二值圖像,條碼圖像也就具有較清晰的邊緣輪廓[1].
條碼圖像經(jīng)過預(yù)處理后,具有較為清晰的邊界和條碼特征.由于條碼種類不同,因此,條碼圖像具有較大的外形差異.定位條碼邊界是識(shí)別條碼的關(guān)鍵,具體算法為:第一步,將二值化圖像信息讀入二維數(shù)組ImageArray中,以數(shù)組的邊界定位圖形邊界;第二步,創(chuàng)建一個(gè)存放條碼圖像的二維數(shù)組QRArray;第三步,采用逐點(diǎn)掃描的方式,掃描ImageArray數(shù)組,如果獲取的ImageArray中元素為“1”,則在該點(diǎn)進(jìn)行水平和垂直兩次掃描,如果兩個(gè)方向上的掃描結(jié)果中均有兩個(gè)以上的“1”,則在QRArray中記錄該點(diǎn);否則不記錄.重復(fù)該掃描方式至ImageArray的最后一個(gè)元素,即可得到一幅完整條碼圖像的映射數(shù)組QRArray.
QR_code是目前最為常用的二維條碼標(biāo)準(zhǔn),條碼圖像是一個(gè)正方形矩陣,所包含的信息有定位點(diǎn)、分割區(qū)、數(shù)據(jù)區(qū)和糾錯(cuò)區(qū).條碼有三個(gè)定位點(diǎn),分別分布于條碼圖像的左側(cè)和右上角,顯示特征為黑白條框[2].見圖2.
圖2 定位點(diǎn)位置
獲取定位點(diǎn)的算法為:第一步,采用對(duì)QRArray逐點(diǎn)掃描的方式,利用定位點(diǎn)特殊的比例關(guān)系確定三個(gè)定位點(diǎn)的邊界;第二步,將定位點(diǎn)以外的條碼數(shù)據(jù)區(qū)信息根據(jù)字符放置位置轉(zhuǎn)換為條碼字符數(shù)組DataArray;第三步,將DataArray的信息逐點(diǎn)分解為一個(gè)字模,即5個(gè)數(shù)據(jù)位和10個(gè)糾錯(cuò)位,利用經(jīng)典Chien搜索法得到糾錯(cuò)位坐標(biāo),數(shù)據(jù)位通過查表方式確定,即可得到條碼信息.
采用JavaSE技術(shù)實(shí)現(xiàn)基于桌面的條碼識(shí)別系統(tǒng),構(gòu)建Android平臺(tái)的條碼識(shí)別流程,如圖3所示.
在圖像處理類中,由于Android的硬件資源有限,所以在灰度處理、均衡處理、邊緣處理、二值化處理中,先將圖像轉(zhuǎn)換為Static類型的三維數(shù)組,之后圍繞數(shù)組展開計(jì)算,在圖像顯示時(shí)將數(shù)組轉(zhuǎn)換為Image類型.這樣不僅能提高運(yùn)算速度,而且能節(jié)約系統(tǒng)資源.條碼定位算法先對(duì)ImageArray行逐點(diǎn)掃描,符合在水平向右方向上連續(xù)6個(gè)像素出現(xiàn)“1”,并且垂直向下方向連續(xù)6個(gè)像素為“1”,則定位為條碼的起始坐標(biāo).條碼的終止坐標(biāo)算法與起始坐標(biāo)算法類似.根據(jù)計(jì)算得到的坐標(biāo)可以將圖像進(jìn)行切割,得到條碼圖像映射矩陣.該定位算法的優(yōu)勢(shì)在于,它能方便、快速地分割圖像中的條碼區(qū)域;缺點(diǎn)在于,如果條碼定位不準(zhǔn)確,將不能有效地識(shí)別信息,識(shí)別率反而降低.
圖3 Android應(yīng)用程序流程圖
測(cè)試環(huán)境為:計(jì)算機(jī)模擬Android4.2.2平臺(tái),攝像頭200萬像素.測(cè)試中選擇較好的光照條件對(duì)條碼正面進(jìn)行拍攝,對(duì)10幅二維條碼進(jìn)行測(cè)試,每幅照片的識(shí)別時(shí)間平均為5s,識(shí)別成功率為100%.同時(shí),使用一幅沒有條碼的圖像進(jìn)行測(cè)試,由于程序的形態(tài)學(xué)處理會(huì)將整幅畫面中所有的亮度腐蝕掉,因此,在圖像中找不到任何字符可以識(shí)別,識(shí)別結(jié)果為空.
通過測(cè)試可知,系統(tǒng)程序可以對(duì)較好環(huán)境下拍攝的條碼圖像進(jìn)行識(shí)別,雖然其在識(shí)別速度、正確率和抗干擾方面有待加強(qiáng),但它仍然證明了使用Android作為信息采集和處理設(shè)備的可行性,為今后構(gòu)建Android平臺(tái)的信息采集與識(shí)別系統(tǒng)打下了基礎(chǔ).
利用Android平臺(tái),使用數(shù)字圖像處理技術(shù)可有效識(shí)別二維條碼,將圖像信息轉(zhuǎn)換為文本信息.該信息可以與現(xiàn)有的Android信息過濾軟件融合,為安全、高效使用條碼提供技術(shù)保障,同時(shí)也為今后以智能終端作為信息采集與處理平臺(tái)的各種信息管理系統(tǒng)的建立積累經(jīng)驗(yàn).
[1]徐慧,王占全.精通VC++數(shù)字圖像處理技術(shù)與工程案例[M].北京:人民郵電出版社,2009:23.
[2]中國物品編碼中心.條碼技術(shù)與應(yīng)用 [M].北京:中國計(jì)量出版社,2003:145.