摘要:隨著數(shù)字信息的發(fā)展,現(xiàn)在人們對(duì)計(jì)算機(jī)對(duì)圖像的識(shí)別與處理越來越關(guān)注。本文通過分析計(jì)算機(jī)對(duì)EAN_13商品條形碼的解析,來闡述計(jì)算機(jī)對(duì)圖像分析的一般步驟和一些關(guān)鍵算法。
關(guān)鍵詞:EAN_13 圖像處理
1 EAN_13條形碼概述
EAN_13條形碼是一種常用的商品條形碼,目前大多數(shù)商品上標(biāo)有的條形碼就是此種碼制。改條形碼是由一系列條、空及字符組成,調(diào)和空有序排列,蘊(yùn)含著數(shù)字信息。而特定的數(shù)字代表著特定的商品編號(hào)。
EAN-13條形碼由深色的條和白色的空組成。條碼一共有13位,13位的含義分別為前綴、制造廠商代碼、商品代碼和校驗(yàn)碼。其中條碼直接表示12個(gè)數(shù)字,12個(gè)數(shù)字分為兩組,由前面的三個(gè)“條”和“空”代表101開始,之后24個(gè)“條”和“空”表示6個(gè)數(shù)字,中間由五個(gè)“條”和“空”表示中間分隔符,用“01010”來表示,分隔符后面是后面6個(gè)數(shù)字,由24個(gè)“條”和“空”表示,最后是結(jié)束符,由3個(gè)“條”和“空”表示。如果用0表示“空”,用1來表示“條”,則開始符、中間分隔符、結(jié)束符的“條”和“空”都是單位長度,其余的12個(gè)數(shù)字,每個(gè)數(shù)字由4個(gè)“條”和“空”組成,這4個(gè)“條”和“空”共有7個(gè)單位長度,每個(gè)條和空的寬度在1~4之間,分為2個(gè)條和2個(gè)空[1]。在編碼的時(shí)候,EAN-13商品條碼的起始符、終止符均為 “101”,中間分隔符為“01010”。其他的數(shù)據(jù)字符的編碼的二進(jìn)制表示有三個(gè)子集,如表1,而括號(hào)中表示1和0的個(gè)數(shù):
EAN-13商品條碼的第2-7為數(shù)字,從遵守A、B子集的排列,第8-13位遵循C子集的第一位條形碼隱藏在前6位數(shù)字中,取決于前6位數(shù)字在AB子集的順序。而右側(cè)數(shù)據(jù)符及校驗(yàn)符的編碼均用C子集表示,EAN-13商品條碼中第13位是校驗(yàn)碼2 條形碼圖像解析探究
了解EAN_13商品條形碼的含義,就為條形碼的圖像解析奠定了基礎(chǔ)。計(jì)算機(jī)解析條形碼圖像主要是識(shí)別出條和空的寬度,然后對(duì)其進(jìn)行譯碼編碼。而對(duì)圖形的分析,主要是可以分為二值化、濾波、邊緣檢測、圖像分割、圖像提取、譯碼幾部分。下面,分別概括各種算法。
2.1 二值化 圖片在計(jì)算機(jī)中存儲(chǔ)是按照RGB三元素存儲(chǔ)的。由于計(jì)算機(jī)采集到的圖像受包裝、光照等各方面影響,所以處理圖片的信息非常困難。而且條碼的研究,只需要條和空的寬度即可,所以不需要其他的顏色信息,所以講顏色多彩的圖像,進(jìn)行二值化處理,讓計(jì)算機(jī)存儲(chǔ)的數(shù)據(jù),只保留純黑和純白兩種顏色,這就叫做二值化處理。二值化處理的方式是,先計(jì)算圖像的灰度值Y=0.299R+0.587G
+0.114B。然后去一個(gè)中間值X,當(dāng)改點(diǎn)像素點(diǎn)大于X,則將其像素值設(shè)為255,小于改值,則為0。此時(shí),可以設(shè)置一個(gè)圖像的地圖數(shù)組,將黑色存為1,白色存為0。
2.2 濾波 因?yàn)閳D像受到光照、角度等各方面的影響,所以二值化后的圖像存在一定的毛躁點(diǎn)。中值濾波可以有效地去掉毛躁點(diǎn),讓誤差縮減到最低。由于條碼的特殊性,因?yàn)樗膱D像是豎直方向上一致,所以可以采取取每一列五個(gè)點(diǎn),將五個(gè)點(diǎn)排序,來得到中間數(shù)值的為改點(diǎn)的取值。本算法可以基于上面的地圖數(shù)組來計(jì)算,會(huì)非常方便。
2.3 邊緣檢測 邊緣檢測是計(jì)算出改點(diǎn)是否為圖像的邊緣。這個(gè)算法為后面的圖像分割提取做了準(zhǔn)備。按照條碼圖像的特殊性,我們可以取一個(gè)2*5的數(shù)組的圖像,即5行2列的圖像,如果這兩列的圖像中第一列和下一列至少存在4行元素發(fā)生像素改變,則證明改點(diǎn)為邊緣點(diǎn)。
2.4 圖像提出 因?yàn)榕臄z到的圖像存在著含有其他圖像的邊緣,或者是條碼圖像位置不居中等各種情況,要順利地譯出條碼就需要將條碼圖像從原圖像中提取出來。對(duì)條碼圖像的提取,主要是上下分割和左右分割。
上下分割比較簡單,可以通過邊緣檢測,從圖像的中間位置開始,分別向上和向下掃描,假如檢測到圖像的邊緣小于59,則認(rèn)為其不是條碼圖像,記錄圖像的上端和下端。
左右分割,根據(jù)顯示中商品的條碼位置,經(jīng)過反復(fù)試驗(yàn),我們可以發(fā)現(xiàn),無論圖像中拍攝其他邊緣還是沒有拍攝,當(dāng)圖像邊緣由0變?yōu)?時(shí),恰好是條碼邊緣的開始。以此特征來,我們可以得出條碼左右分割的方法:①從圖像中部開始,從左向右掃描圖像,記錄第一個(gè)從0到1轉(zhuǎn)變的邊緣位置,本步也要通過邊緣檢測,以免誤用于毛躁點(diǎn)。②圖像向上和向下掃描,記錄上下分割后,圖像全部從0到1轉(zhuǎn)變的邊緣位置。③計(jì)算獲得邊緣的傾斜多,如果大于10°,則影響圖像效果,建議重新采集圖像;如果傾斜度小于10°,則圖像可用。④對(duì)所有邊緣進(jìn)行微調(diào),將偏差過于大的圖像邊緣進(jìn)行處理,讓其與其他邊緣的差別變小。⑤以此方法,查找下一個(gè)由條變空的邊緣,然后將其位置值與前面的邊緣值之差作為第一個(gè)寬度值,記錄到數(shù)組中。⑥排序全部第一寬度值得到的數(shù)組,取得其中間值。⑦判斷此中間值與排序之中的上下兩個(gè)值的差別如果大于2,則獲取圖像失??;如果小于等于1,則圖像獲取正確,將此中間值保存在最終的寬度數(shù)組中,作為第一個(gè)寬度以備譯碼使用。⑧按上述步驟,將全部59個(gè)條和空的寬度全部找出。則最后的一點(diǎn)的位置,將是圖像的右邊緣,而經(jīng)過查找右邊緣的過程,圖像的條和空的寬度也記錄在了數(shù)組中。
3 譯碼
在條碼圖像提取出來之后,就可以進(jìn)行譯碼了。譯碼的理論依據(jù)就是條形碼的含義。因?yàn)闂l形碼包含著3+6*7+5+6*7+3=95個(gè)單位長度,所以我們可以把上面圖像提取的時(shí)候計(jì)算的全部長度相加,然后計(jì)算出單位長度。因?yàn)閱挝幻恳徊蕉伎赡艽嬖谡`差,下面的譯碼也不能絕對(duì)的相等。計(jì)算出單位長度之后,主要譯碼步驟按照下面:①取出前三個(gè)寬度,看其長度是在0.6-1.4個(gè)單位長度之間,如果正確,則為開始標(biāo)志,繼續(xù)譯碼;若為錯(cuò)誤,說明圖像采集錯(cuò)誤。②循環(huán)取六次寬度,每次取出4個(gè)寬度。比較寬度與單位寬度的比值取整,得到一個(gè)四位的編碼,在A子集和B子集中尋找此四位編碼對(duì)應(yīng)的數(shù)字信息,并同時(shí)記錄這六個(gè)數(shù)字信息所在的A子集或者B子集。③越過5個(gè)寬度(中間分隔符),取后面6次的連續(xù)的4個(gè)寬度,在C子集中查找相應(yīng)的數(shù)值信息。④按照前6個(gè)數(shù)字得到的AB子集的順序,查找其前置碼的數(shù)值。⑤驗(yàn)證譯碼結(jié)果,將前12位數(shù)字的奇數(shù)位相加,偶數(shù)位相加乘以3,兩個(gè)結(jié)果之和相加后,個(gè)位數(shù)減去10得到的模的個(gè)位即是校驗(yàn)結(jié)果,與第13位進(jìn)行比較,如果正確,則譯碼成功。
4 結(jié)論
本文主要描述了計(jì)算機(jī)下處理?xiàng)l形碼圖像的圖像分析算法。算法的創(chuàng)新點(diǎn)主要是圖像的左右分割步驟和圖像譯碼過程。對(duì)于計(jì)算機(jī)處理其他的圖形奠定了基礎(chǔ)。
參考文獻(xiàn):
[1]孫江濤,孫珊珊,趙健飛.基于圖像分析的攝像頭識(shí)別條形碼的算法[J].華北科技學(xué)院學(xué)報(bào),2012(3).
[2]龔亞歡,王超,胡晨.EAN-13碼的圖像識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2009(22):106-109.
[3]康牧.圖像處理中幾個(gè)關(guān)鍵算法的研究[D].西安電子科技大學(xué),2009.
基金項(xiàng)目:中央高校基本科研業(yè)務(wù)費(fèi)資助(DX2013B01)。