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