EAN一13碼的圖像識別系統設計與實現
二值化是利用點運算中的閾值變換理論將灰度圖轉化為二值圖像。二值化中閾值T的選擇是關鍵,在整幅圖中,我們最關心的是條碼,條碼是由條空(黑白)組成的,根據前面的假設,在整幅圖的中心區域選取50×50個像素點,對其進行灰度處理并得到灰度直方圖,采用雙峰法得到閾值T,此閾值可以有效地把條碼的條空區分出來。按照下式得到二值化圖像g(x,y)。本文引用地址:http://www.j9360.com/article/195562.htm
2.1.2 濾波
由于原圖像各部分亮度不均,背景圖像有不同的情況,得到的二值圖會有很多噪聲,條碼區域有,條碼區域外也有,為了后續部分的條碼提取和條碼譯碼,需要進行濾波處理。考慮到一維條碼的特征:豎直的條和空,采用中值濾波方法,中值濾波模板如圖3所示。被圈部分表示模板遍歷整幅圖時,所對應待檢像素的位置。取待濾波像素上下相鄰的4個像素值,共5個像素值進行排序,用中間值覆蓋待濾波的像素值。此模塊能有效地濾除條碼區的椒鹽噪聲,背景區的噪聲能得到很大抑制。此模塊是根據一維碼的特征設計,可以適合各種一維碼。
2.1.3 邊緣檢測
常用的邊緣檢測算法有梯度算法、Roberts梯度法、Sobel算法和Laplaceian算法等,在充分研究一維條碼的特征后,借鑒各種檢測算法,在此自行設計了一種濾波算法。由于設計實驗時采用的是640×480或320×240的圖像,假設條碼占整個圖像的50 %以上,根據圖2可以算出每個模塊占的像素值為3到4個或l到2個,如果采用3×3或5×5之類的邊緣檢測模板,加上圖像原本的變形,將會誤檢邊緣或邊緣丟失,同時考慮到一維條碼的特征:豎直的條和空,有明顯的豎直邊緣,因此設計了豎直邊緣檢測算法,邊緣檢測模板如圖4所示。
待檢像素的值由其鄰域內10個像素的值決定,這10個值按模板中的權值相加的絕對值為s(x,y)。由于進行邊緣檢測的圖像是二值圖,非黑(0)即白(255),設定邊緣檢測的閾值T1=255×4=1 020,即鄰域內至少有4處黑白突變才能說明待檢像素為一邊緣值,按照下式得到邊緣檢測圖像h(x,y)。
2.2 圖像提取
圖像提取是把圖像中的條碼部分割出來,用于后續的條碼譯碼。圖像提取的步驟分為:上下分割和左右分割。根據條碼的特征,分別設計了上下分割和左右分割的算法。
2.2.1 上下分割
基于前文的假設,設計了如下分割算法,上下分割的流程如圖5(a)所示,此流程的設計應用了條碼的兩個特征:條空數為59個,即邊緣數為60個;條碼的上下部分都有空白區。當然一般情況下,條碼區域所在行肯定還會存在噪聲,因此邊緣數是肯定大于60的,而在條碼上下的空白區所在行經過圖像預處理基本沒多少噪聲,邊緣數基本不會大于60,通過對100幅圖像的試驗只有背景很復雜的2幅圖例外。但是沒分割出來不代表沒譯碼出來,后面譯碼部分對分割有補充修正。根據各種圖像的不同,上下分割不會把整個條碼區域分割出來,但分割出來的圖像信息足以用來解碼。上下分割可以去除圖像中上下部分的非條碼區同時為譯碼減少了計算量。
評論