

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