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