孫洋洋,郭陽寬,張曉青
(北京信息科技大學(xué)儀器科學(xué)與光電工程學(xué)院,光電測試技術(shù)北京市重點實驗室,北京 100192)
隨著社會的發(fā)展,在物品流通和管理中記錄物品的來源及途徑的信息均以不同種類及數(shù)量的條形碼粘貼在物品上,能同時獲取每個環(huán)節(jié)的條形碼信息是提高管理與流通物品效率的重要技術(shù)。物品上的條形碼特點主要包括:所含的條形碼數(shù)量及種類多、尺寸大小不一、條形碼間距小且間隔中有文字、條碼傾斜角度各異、物品上含有其他復(fù)雜幾何形狀、因物品的流通性導(dǎo)致條形碼沒有直接印在碼盤上等。多個條形碼的情況多見于超市貨架上粘貼的價格條形碼、電子加工廠元器件碼盤上的條形碼、快遞包裹上的條形碼等場景,多條形碼的檢測技術(shù)能夠提高此類場景的識別效率、快速獲取物品信息。本文以元器件碼盤為例研究多條形碼檢測的方法。
目前已有的檢測方法大多是研究單個條形碼的情況,針對多條形碼檢測還沒有提出解決方法。故提出一種在形態(tài)學(xué)的基礎(chǔ)上通過定位條形碼區(qū)域的整體邊緣來同時檢測多個條形碼的方法,并進(jìn)行條形碼角度校正,為后續(xù)獲取條形碼信息準(zhǔn)備了條件。實驗驗證該方法能夠同時識別多個條形碼,并能夠準(zhǔn)確獲得所有條形碼信息。
工業(yè)相機(jī)直接獲得的圖像包含顏色和灰度等無關(guān)的信息,對圖像進(jìn)行預(yù)處理,可減少其對條形碼檢測的影響。此處采取的預(yù)處理方法主要包括灰度化和二值化,利用傳統(tǒng)的灰度處理的方法即可獲得灰度圖,而二值化的關(guān)鍵是閾值的選取。因檢測的條形碼圖像其灰度背景固定,反復(fù)實驗之后在[100~120]范圍內(nèi)確定閾值較合適。確定閾值之后根據(jù)式(1)可得到條形碼圖像的二值化圖像g(x,y)。
(1)
式中:T為二值化確定的閾值;f(x,y)為圖像中某一點(x,y)的灰度值。
高分辨相機(jī)采集到的待識別的多條形碼原圖如圖1所示,該碼盤上含有8個條形碼,二值化所得到的圖像如圖2所示。
圖1 原圖
圖2 二值化處理結(jié)果
二值化之后的圖像,條形碼區(qū)域出現(xiàn)黑色的縫隙,因此需要用形態(tài)學(xué)的方法進(jìn)行黑色區(qū)域填充。對圖像進(jìn)行形態(tài)學(xué)處理,主要包括膨脹和腐蝕。膨脹和腐蝕是形態(tài)學(xué)中彼此對偶的圖像處理方法。膨脹是將圖像中的高亮部分?jǐn)U大,腐蝕是將原圖中的高亮部分縮小。膨脹或者腐蝕操作就是將圖像(或圖像的一部分區(qū)域,我們稱之為A)與核(我們稱之為B)進(jìn)行卷積。式(2)是圖像A被核B膨脹的公式,式(3)是圖像A被核B腐蝕的公式。
A⊕B={x,y|Bxy∩A≠?}
(2)
AΘB={x,y|Bxy?A}
(3)
式中:Bxy為當(dāng)核B的原點移動到A中的某一點(x,y)的灰度值;?為不包括任何像素即空集;A⊕B、AΘB分別為用核B對圖像A進(jìn)行膨脹、腐蝕的結(jié)果。
利用條形碼特征的方法與形態(tài)學(xué)方法提取圖1所示碼盤上的條形碼區(qū)域進(jìn)行比較,如圖3所示。
(a)基于條形碼特征
(b)形態(tài)學(xué)方法
基于條形碼特征的提取方法在提取多個條形碼時出現(xiàn)條形碼粘連現(xiàn)象,如圖3(a)所示,而形態(tài)學(xué)方法能夠?qū)⒄麄€條形碼區(qū)域提取出來,避免了這種問題,如圖3(b)所示。
經(jīng)過定位之后的圖像,條形碼區(qū)域呈現(xiàn)明顯的矩形特征,利用輪廓檢測方法檢測矩形區(qū)域的邊界,即可獲得條形碼區(qū)域。一個輪廓一般對應(yīng)一系列的點,也就是對應(yīng)圖像中的一條曲線,從二值圖像中查找到的輪廓邊緣是很細(xì)的“白色”區(qū)域,此輪廓所確定的區(qū)域即為條形碼所在區(qū)域,提取到的所有條形碼區(qū)域如圖4所示。
為了保證后續(xù)條形碼識別效果,需要將提取的條形碼進(jìn)行角度校正,保證條形碼處于水平放置(較長邊與水平面平行)。解決條形碼的傾斜問題,傳統(tǒng)的方法是利用Hough變化提取條形碼圖像中水平和豎直的直線并計算直線的傾斜角度。而待檢測的條形碼尺寸較小且條形碼之間的距離較近,利用傳統(tǒng)的方法難度較大,故采用仿射變換旋轉(zhuǎn)圖像的方法校正條形碼角度。
(a)條形碼區(qū)域1
(b)條形碼區(qū)域2
(c)條形碼區(qū)域3
(d)條形碼區(qū)域4
將定位出的特征區(qū)域經(jīng)過基本形態(tài)學(xué)處理之后需確定校正角度a。條形碼特征區(qū)域提取時利用最小外接矩形的方法獲得特征區(qū)域的4個特征點,分別是矩形的中心坐標(biāo)、寬度、高度、旋轉(zhuǎn)角度,其示意圖如圖5所示。
圖5 最小外接矩形旋轉(zhuǎn)角度示意圖
如圖5,在圖像數(shù)據(jù)存儲中,坐標(biāo)的原點在圖像左上角,最小外接矩形的方法得到的旋轉(zhuǎn)角度θ是水平軸(x軸)逆時針旋轉(zhuǎn),與碰到的矩形的第一條邊的夾角。默認(rèn)將這個邊的邊長作為w,另一條邊邊長作為h。在這里,w與h是按照長短來定義的。而為了保證校正之后的條形碼的較長邊水平放置,因此需要根據(jù)判斷w和h值的情況來確定校正角度a,其確定如式(4)所示。
(4)
在opencv中,正角度是繞旋轉(zhuǎn)中心逆時針旋轉(zhuǎn),負(fù)角度是繞旋轉(zhuǎn)中心順時針旋轉(zhuǎn)。由式(4)調(diào)整角度校正后,能夠保證條形碼長邊水平放置。
仿射變換是一種基于2×3矩陣進(jìn)行的變換,任意一個仿射變換可以表達(dá)為乘以一個矩陣再加上一個向量的形式,如式(5)所示,代表這種變換的標(biāo)準(zhǔn)形式是2×3的矩陣,如(6)所示。
(5)
(6)
校正的旋轉(zhuǎn)中心選取的是原圖像的中心,導(dǎo)致校正之后的條形碼中心不在新圖像的中心,條形碼區(qū)域不能完整顯示,影響后續(xù)識別效果。因此需要在獲得仿射變換之后的新圖像前,計算生成的圖像大小,來給仿射變換矩陣添加平移信息。新圖像的尺寸示意圖如圖6所示。
(a) 原圖像
(b)新圖像
圖6中的尺寸關(guān)系如式(7)、式(8)。
w1=w|cosa|+h|sina|
(7)
h1=w|sina|+h|cosa|
(8)
式中:角度a為校正角度;w、h分別為圖像校正前的寬度和高度;w1、h1分別為圖像校正之后新圖像的寬度和高度。
根據(jù)新生成圖像的大小,給仿射變換矩陣添加平移信息。經(jīng)過調(diào)試后,確定變換矩陣需添加的平移量具體如式(9)所示。
(9)
修改仿射變換的變換矩陣之后校正圖像,其結(jié)果如圖7所示。圖7(a)是未修改仿射變換算法之前的校正結(jié)果,可以明顯看到條形碼部分圖像不在圖像內(nèi),圖7(b)為修改仿射變換算法之后的校正結(jié)果,明顯看出條形碼能夠在圖像中完整顯示,完成校正。
(a)修改算法前
(b)修改算法后
碼盤圖像處理之后,提取的多個條形碼圖可以直接調(diào)用識別包進(jìn)行解碼,獲得條形碼的具體信息識別結(jié)果如圖8所示。實驗中用到的碼盤含有8個條形碼,利用文中的方法能夠?qū)⑵淙孔R別出來。采用市面上成熟的條形碼掃描槍進(jìn)行識別結(jié)果驗證,驗證結(jié)果如表1所示。
圖8 元器件碼盤條形碼檢測結(jié)果
表1中的待測條形碼ID代表含有多個條形碼的元器件碼盤圖從左下方到右上方的條形碼順序,將表1的識別結(jié)果與本文方法的識別結(jié)果對比,驗證該方法的識別結(jié)果正確,故設(shè)計的多條形碼檢測方法可行。
本文提出了一種基于圖像處理檢測多條形碼的方法。通過實驗證明該方法能夠同時識別碼盤上的所有條形碼,并能準(zhǔn)確獲取所有條形碼的信息,給元器件碼盤的流通和管理過程帶來極大的便利。該檢測方法也可以應(yīng)用在其他需要同時檢測含有多個條形碼物品的工業(yè)領(lǐng)域。
表1 條形碼掃描槍識別結(jié)果