黃乃映 詹宜巨
(1.中山大學(xué)信息科學(xué)與技術(shù)學(xué)院 2.中山大學(xué)工學(xué)院)
最初出現(xiàn)的一維條碼由于承載信息能力有限,人們又設(shè)計(jì)出二維條碼,它使用的是二維坐標(biāo)系,空間上的點(diǎn)可以通過(X,Y)來表示,即條碼在橫向X軸和縱向Y軸都含有信息。但是隨著條碼應(yīng)用范圍的進(jìn)一步擴(kuò)大,其承載信息的能力已經(jīng)不能滿足人們的要求,于是人們又提出三維條碼的理念,用彩色代替原始二維條碼中的黑白色,這樣由顏色衍生出來的Z軸也包含大量的信息,使用的是三維坐標(biāo)系,空間上的點(diǎn)可以通過(X,Y,Z)來表示[1]。
在所有類型的二維條碼中,PDF417條碼的應(yīng)用范圍最廣并具有很高的認(rèn)可度。它屬于堆疊式二維條碼,由3到90行的截短一維條碼堆疊而成。PDF417條碼的密度會(huì)隨著行數(shù)的增加而增加,對(duì)于低密度PDF417條碼和高密度PDF417條碼的識(shí)別方法是不一樣的,因?yàn)楫?dāng)PDF417條碼的密度較低時(shí),光學(xué)系統(tǒng)點(diǎn)擴(kuò)展函數(shù)的影響可以忽略;反之,當(dāng)PDF417條碼密度較高時(shí)則不能[2,3]。由于現(xiàn)在人們要求PDF417條碼能夠承載更多的信息,因此PDF417條碼的密度越來越高,這給條碼的識(shí)別帶來很大的難度。由于三維條碼使用的是三維空間,即使條碼密度較低,其容納信息的能力也非常強(qiáng)。因此本文結(jié)合三維條碼理論,設(shè)計(jì)彩色三維PDF417條碼,并重點(diǎn)研究三維PDF417條碼的識(shí)別。
三維PDF417條碼的設(shè)計(jì)主要涉及編碼方式和顏色的選取,下面對(duì)這兩部分做具體的介紹。
條碼的編碼方法分為兩種:模塊組配法和寬度調(diào)節(jié)法,兩種方法的編碼容量都會(huì)隨著模塊寬度的增大而增大。但是實(shí)驗(yàn)表明[4,5]:當(dāng)模塊寬度小于等于7時(shí),寬度調(diào)節(jié)法的編碼容量更大;當(dāng)模塊寬度大于7時(shí),模塊組配法的編碼容量更大。隨著條碼應(yīng)用范圍的不斷擴(kuò)大,人們要求不斷增加條碼的編碼容量,所以模塊寬度常常大于 7,而這時(shí)模塊組配法的編碼容量更大,因此本文選擇模塊組配法編碼方式。
按照三維條碼理論,顏色的選取主要有兩種方法:第一種方法是根據(jù)同類顏色、不同灰度值進(jìn)行選擇,即將黑色分成不同的等級(jí),如深黑、淺黑、較深黑等等顏色,這種方法不僅對(duì)識(shí)別設(shè)備要求很高,更重要的是條碼的抗干擾性能大大降低,倘若條碼在流通的過程中受到污損、褪色等情況,就不能正確識(shí)別條碼,所以此方法具有很強(qiáng)的局限性;第二種方法是根據(jù)顏色的不同進(jìn)行選擇,這樣可以很好地克服第一種方法的缺點(diǎn)[4,5]。因此本文選取彩色來代替二維條碼中條的顏色,空的顏色仍然采用白色。設(shè)計(jì)的條碼如圖1所示。
圖1 彩色三維PDF417條碼
下面對(duì)三維PDF417條碼和二維PDF417條碼進(jìn)行比較,以編碼容量作為對(duì)比的標(biāo)準(zhǔn)。
設(shè)一個(gè)三維PDF417條碼字符的模塊數(shù)為n,條和空的對(duì)數(shù)為k,則所能表示的碼字?jǐn)?shù)為:
(1)式中p表示條的顏色種數(shù),q表示空的顏色種數(shù)[4,5]。
設(shè)一個(gè)二維PDF417條碼字符的模塊數(shù)為n,條和空的對(duì)數(shù)為k,則所能表示的碼字?jǐn)?shù)為[4,5]:
由(1)式除以(2)式得:
假設(shè)p=6,q=2,可得:
對(duì)于三維PDF417條碼的識(shí)別,本文采取兩種識(shí)別方法:第一種方法是把三維PDF417條碼轉(zhuǎn)化為二維 PDF417條碼進(jìn)行識(shí)別;第二種方法是對(duì)三維PDF417條碼直接進(jìn)行識(shí)別。其識(shí)別過程如圖2 和圖3 所示,兩種方法的主要區(qū)別在于第二種方法沒有圖像預(yù)處理環(huán)節(jié)。
圖2 第一種識(shí)別方法
圖3 第二種識(shí)別方法
圖像預(yù)處理是第一種識(shí)別方法必不可少的一個(gè)環(huán)節(jié),其主要包括以下三個(gè)環(huán)節(jié):彩色條碼灰度化、圖像二值化、去噪,其具體的流程如圖4所示。
3.1.1 彩色圖像灰度變換
圖4 圖像預(yù)處理流程
彩色圖像灰度變換常用三種方法:加權(quán)法、平均法、最大值法。
① 加權(quán)法:有實(shí)驗(yàn)證明:人眼對(duì)不同顏色的敏感程度是不同的,對(duì)綠色最強(qiáng),對(duì)藍(lán)色最弱,在RGB空間中,對(duì)R、G、B以不同的權(quán)值進(jìn)行加權(quán)平均,如式(5)所示:
(5)式中 f (i,j)為灰度值輸出。
② 平均法:在RGB空間中,對(duì)R、G、B三分量的亮度求均值,如式(6)所示:
(6)式中 f (i ,j)為灰度值輸出。
③ 最大值法:在RGB空間中,對(duì)R、G、B三分量的亮度求最大值,其式(7)所示:
(7)式中 f( i,j)為灰度值輸出。
以上三種方法處理結(jié)果如圖5、圖6、圖7所示。
最大值法處理效果如圖 7所示,當(dāng)以 R、G、B三分量亮度最大值作為灰度值輸出,使得輸出的灰度圖像偏亮,這不利于灰度圖像二值化;均值法處理圖像效果如圖6所示,當(dāng)以R、G、B三分量的亮度均值作為灰度值輸出,使得輸出的灰度圖像整體亮度比較均勻,可以滿足圖像二值化的要求,但是如圖5所示的加權(quán)法處理效果更好,圖像與背景之間非常明顯,更加有利于圖像二值化,因此本文選取加權(quán)法進(jìn)行彩色圖像灰度化。
3.1.2 灰度圖像二值化
圖5 加權(quán)法
圖6 均值法
圖7 最大值法
灰度圖像二值化常采用閾值化處理,即選擇一個(gè)合適的閾值,將灰度圖像轉(zhuǎn)換成二值圖像,閾值選取的好壞,對(duì)圖像和背景的分離具有重要的影響?,F(xiàn)在普遍采用直方圖技術(shù)來選取閾值,對(duì)于灰度 PDF417條碼圖像來說,在二值化的時(shí)候,可以將條碼中的條作為特征物圖像,空作為背景物圖像;或者將條碼中的空作為特征物圖像,將條作為背景物圖像[6]。
如圖8所示的二維PDF417條碼直方圖,可以發(fā)現(xiàn)有兩個(gè)峰值較大,則將兩個(gè)較大波峰的中間位置定義為閾值,即谷底的最小值[6]?;叶葓D像二值化后,所得結(jié)果如圖9所示,這里閾值取為0.82。
3.1.3 去噪
圖8 條碼直方圖
圖9 二值圖像
現(xiàn)在普遍采用濾波器來消除噪聲,濾波器種類比較多,如空域低通濾波器,頻域低通濾波等等,如圖10和圖11所示。
圖10 3×3模板均值濾波
圖11 5×5模板均值濾波
從圖10和圖11可以發(fā)現(xiàn),濾波后條碼圖像顯得比較模糊,這不利于條碼邊緣檢測,如果想保證邊緣檢測的正確性,必須保證圖像與背景之間的清晰。所以本文沒有采用濾波平滑的方法來消除噪聲,而采用受控形態(tài)學(xué)中膨脹和腐蝕算法[7]。
受控形態(tài)學(xué)的原理比較簡單,主要是通過指定一個(gè)約束量S來控制腐蝕和膨脹運(yùn)算的程度,因?yàn)樵谝话闩蛎浐透g算法中,并沒有具體指出膨脹和腐蝕的程度,這樣很難保證膨脹和腐蝕運(yùn)算的效果,其處理結(jié)果如圖12和圖13所示。由于受控形態(tài)學(xué)中的受控腐蝕和受控膨脹對(duì)于噪聲的敏感度比較低,因此本文采用受控腐蝕和受控膨脹來對(duì)噪聲進(jìn)行平滑處理,其處理結(jié)果如圖14和圖15所示。
通過比較圖9和圖15,可以發(fā)現(xiàn)條碼圖像邊緣的模糊程度小了很多。通過比較圖10、圖11、圖12、圖13、圖15可以發(fā)現(xiàn),經(jīng)濾波器處理后的圖像,不僅背景灰暗,且邊緣不清楚,這對(duì)于之后邊緣檢測會(huì)產(chǎn)生很大的負(fù)面影響。經(jīng)一般腐蝕和膨脹處理后,圖像產(chǎn)生很大失真,顯然不適合噪聲的消除。但是經(jīng)過先受控腐蝕再受控膨脹處理后,不僅背景清晰,最重要的是圖像失真程度非常小。因此本文采用先受控腐蝕后受控膨脹來消除噪聲。
圖12 一般膨脹變化
圖13 一般腐蝕變化
圖14 先受控腐蝕變化
圖15 再受控膨脹變化
彩色圖像邊緣檢測都需要基于一定的顏色空間,如 RGB、HSV顏色空間。一般情況下,數(shù)字圖像是以RGB形式存在。但是實(shí)際情況下,人們?yōu)榱诵枰ǔ0?RGB空間轉(zhuǎn)化為其他形式的空間,但是在轉(zhuǎn)化的時(shí)候,容易受到噪聲的影響[8]。例如將RGB空間轉(zhuǎn)化為HSV空間,再還原為RGB空間,結(jié)果如圖17所示。
圖16 HSV空間
圖17 還原RGB空間
通過比較圖1和圖17,可以發(fā)現(xiàn),如果對(duì)顏色空間進(jìn)行轉(zhuǎn)換,會(huì)造成彩色圖像中某些信息丟失,而且轉(zhuǎn)換后的圖像對(duì)噪聲十分敏感,因此本文仍然選用RGB顏色空間。
商場購物或者驗(yàn)證發(fā)票時(shí),經(jīng)常出現(xiàn)條碼偏移和傾斜的現(xiàn)象,為了對(duì)條碼精確識(shí)別,則必須在識(shí)別之前,將條碼旋轉(zhuǎn)到水平狀態(tài)。本文采用Hough算法[9]旋轉(zhuǎn)條碼。
旋轉(zhuǎn)條碼的時(shí)候,由于受到噪聲、污損等外界因素的影響,彩色條碼圖像中條的顏色區(qū)域會(huì)出現(xiàn)少量麻點(diǎn),因此必須對(duì)受到干擾的區(qū)域進(jìn)行插值?,F(xiàn)在出現(xiàn)的插值方法主要有:最鄰近插值、雙線性插值、三次卷積插值、Hermite插值等,本文采用先三次卷積插值再Hermite插值。
圖18 最鄰近插值
圖19 雙線性插值
圖21 再Hermite插值
旋轉(zhuǎn)后,最鄰近插值法效果最差,旋轉(zhuǎn)得到的條碼圖像邊緣非常粗糙,如圖18所示;雙線性插值旋轉(zhuǎn)效果次之,如圖19所示;三次卷積旋轉(zhuǎn)效果最好,如圖20所示;同時(shí)由于雙線性插值具有低通性質(zhì),因此在高頻的時(shí)候,條碼圖像會(huì)產(chǎn)生失真,會(huì)使圖像邊界更加粗糙;三次卷積法可以有效克服最鄰近插值和雙線性插值的缺點(diǎn)。但是在PDF417條碼層與層交界處,旋轉(zhuǎn)效果仍然不是很好,因此本文利用兩點(diǎn)三次Hermite插值對(duì)每層交界處進(jìn)行平滑,如圖21所示。旋平后的二維條碼和三維條碼如圖2 2和圖2 3所示。
圖22 二維條碼旋轉(zhuǎn)
圖23 三維條碼旋轉(zhuǎn)
由于PDF417條碼是由多行一維條碼疊加而成,因此在識(shí)別的時(shí)候必須分割出每行條碼。利用 Sobel水平邊緣檢測算子 f (x,y)來提取PDF417條碼水平邊緣,再進(jìn)行水平投影,如圖24所示。
圖24 水平投影后所得圖像[7]
由圖2 4可知:圖像的峰點(diǎn)對(duì)應(yīng)于條碼的行邊界,這樣行邊界的計(jì)算就轉(zhuǎn)化為峰點(diǎn)數(shù)量的計(jì)算。
下面利用統(tǒng)計(jì)方法來計(jì)算條碼的行邊界。
將條碼旋轉(zhuǎn)到水平狀態(tài)后,可以通過條碼的上下邊界方程,來計(jì)算PDF417條碼圖像的高度 H'。則行高如式(10)所示:
接下來就可以根據(jù)行高來分割單行條碼。條碼圖像分割結(jié)果如圖2 5所示。
圖25 分割出的單行條碼
3.5.1 二維PDF417條碼的邊緣檢測
條碼邊緣檢測就是采用某種算法,將條碼圖像中的條和空之間的分界線提取出來,常用的邊緣檢測算法有 Roberts、Sobel、Log、Prewitt、Canny 等[11~14]。
Log算子邊緣檢測效果如圖2 9所示,條碼二值圖像的邊緣大部分都沒有檢測出來,明顯不符合要求;Sobel和Prewitt算子邊緣檢測效果如圖2 6和圖2 8所示,其檢測效果比Log算子稍好,但是仍然有部分邊緣沒有檢測出來;Roberts算子邊緣檢測效果如圖 27所示,從效果圖可以發(fā)現(xiàn),在檢測的時(shí)候,產(chǎn)生了大量的偽邊緣;Canny算子邊緣檢測效果如圖3 0所示,檢測效果不僅邊緣清晰,偽邊緣很少,甚至沒有,故選取Canny算子進(jìn)行邊緣檢測。
圖26 Sobel算子檢測
圖27 Roberts算子檢測
圖28 Prewitt算子檢測
圖29 Log算子檢測
圖30 Canny算子檢測
3.5.2 三維PDF417條碼的邊緣檢測
除了將彩色條碼圖像轉(zhuǎn)化為灰度二值圖像外,還可以直接從彩色條碼圖像入手。在對(duì)一般的彩色圖像進(jìn)行邊緣檢測的時(shí)候,如果出現(xiàn)部分邊緣丟失,不會(huì)對(duì)結(jié)果產(chǎn)生很大的影響,但是彩色三維PDF417條碼圖像則不同,因?yàn)闂l碼圖像中的顏色攜帶著大量的信息,如果在邊緣檢測的時(shí)候出現(xiàn)漏檢,就會(huì)對(duì)結(jié)果產(chǎn)生很大的影響。下面用傳統(tǒng)Canny算法來直接檢測彩色三維PDF417條碼圖像邊緣,如圖3 1所示。
圖31 傳統(tǒng)的Canny算法
從圖3 1可以發(fā)現(xiàn),直接利用傳統(tǒng)Canny算法檢測條碼邊緣,得到的結(jié)果并不是十分的理想,因此本文對(duì)傳統(tǒng)Canny算法進(jìn)行改進(jìn),傳統(tǒng)Canny算法共有四個(gè)步驟[11~14]:① 利用高斯濾波器平滑圖像,去除圖像噪聲;② 利用一階偏導(dǎo)的有限差分來計(jì)算梯度幅值和方向;③ 對(duì)梯度幅值進(jìn)行非極大值抑制;④ 用雙閾值算法檢測并且連接邊緣。
現(xiàn)在對(duì)第二步、第三步進(jìn)行優(yōu)化。
(1)梯度幅值和方向的計(jì)算
首先,彩色圖像仍然以 RGB的形式存在,在點(diǎn)(i,j)的8個(gè)鄰域內(nèi),通過對(duì)x、y、45°、135°方向上求偏導(dǎo),來計(jì)算點(diǎn) (i ,j)的梯度值和方向。其具體過程如下:
x方 向 偏 導(dǎo) 數(shù) Rx(i,j)、 Bx(i,j)、 Gx(i,j)、Py(i,j ):
(2)在第一種方法中,是把彩色圖像轉(zhuǎn)化為灰度二值圖像,這樣圖像與背景之間非常清晰。如果直接用傳統(tǒng)的Canny算法對(duì)彩色三維PDF417條碼進(jìn)行邊緣檢測,由于圖像與背景之間不是那么清晰,因此邊緣檢測效果不是很好,效果如圖3 0所示,因此閾值選取的好壞對(duì)邊緣檢測有著至關(guān)重要的作用。由于傳統(tǒng)Canny算法采用雙閾值進(jìn)行判別,這樣容易造成漏檢或者產(chǎn)生偽邊緣,為克服這缺點(diǎn),本文采用局部動(dòng)態(tài)閾值選擇的方法。
已知原梯度圖像Y,Y經(jīng)過非極大值抑制之后得到的圖像為X,則閾值選擇的過程如下:
① 計(jì)算X中各個(gè)候選點(diǎn)的雙閾值。設(shè) x( i ,j)是X中的一點(diǎn),Y中存在一個(gè)中心為 Y (i,j)的正方形,其寬度為a,點(diǎn) x( i ,j)雙閾值的選取與正方形內(nèi)梯度分布存在緊密的聯(lián)系,可以根據(jù)PDF417條碼密度的大小調(diào)整a的大小,a的取值范圍為 [3 0,50],在所選正方形區(qū)域梯度直方圖中,像素點(diǎn)個(gè)數(shù)的計(jì)算是按照梯度遞增順序進(jìn)行累計(jì)[15]。假設(shè)像素點(diǎn)的總個(gè)數(shù)為 Z,高閾值用T2表示,低閾值用 T1表示,當(dāng)累計(jì)和占 Z得百分比則為T2,T2的40%為T1。
② 假設(shè)X中候選邊緣點(diǎn)的梯度值為T,該點(diǎn)的高閾值為T2,低閾值為T1,當(dāng) T> T2時(shí),則候選點(diǎn)為時(shí),且與保留邊緣點(diǎn)的8個(gè)鄰域相連,該點(diǎn)為邊緣點(diǎn),保留該點(diǎn)[15]。實(shí)驗(yàn)結(jié)果如圖3 2所示。
圖32 改進(jìn)的Canny算法
本文采取了兩種識(shí)別方法,下面對(duì)它們的識(shí)別效果進(jìn)行比較,主要不同之處歸納如下:
(1)從識(shí)別效果來看:第一種方法的邊緣檢測效果非常好,如圖3 0所示,幾乎沒有任何的偽邊緣;第二種方法的邊緣檢測效果也不錯(cuò),如圖3 2所示,產(chǎn)生了少量的偽邊緣。所以第一種方法識(shí)別效果更好;
(2)從識(shí)別效率來看:第一種方法的識(shí)別速度要比第二種方法快,因?yàn)榻?jīng)過改進(jìn)的Canny算法運(yùn)行速度比較慢;
(3)從計(jì)算量來看:由于第二種方法沒有圖像預(yù)處理,不需進(jìn)行灰度變換、二值化、去噪等計(jì)算,因此相比于第一種方法,計(jì)算量小很多。
[1]三維碼[DB/OL]. http://baike.baidu.com/view/1586298.htm.
[2]二維條形碼[DB/OL]. http://baike.baidu.com/View/71834.htm
[3]PDF417條碼[DB/OL]. http://baike.baidu.com/view/132249.htm
[4]劉寧鐘,楊靜宇.三維條碼的編碼理論和設(shè)計(jì)[J].計(jì)算機(jī)學(xué)報(bào),2007,30(4):686-692.
[5]劉寧鐘.高維條碼識(shí)別技術(shù)和編碼理論的研究[D].博士學(xué)位論文.南京理工大學(xué),2003:1-13,21-27,56-72.
[6]王沁.PDF417條碼識(shí)別技術(shù)研究[D].碩士學(xué)位論文.西安理工大學(xué),2007:17-34.
[7]文華.基于數(shù)學(xué)形態(tài)學(xué)的圖像處理算法的研究[D].碩士學(xué)位論文.哈爾濱工程大學(xué),2006:7-42.
[8]胡博.彩色圖像分割算法研究[D].碩士學(xué)位論文.電子科技大學(xué),2009:8-13.
[9]Hough變換[DB/OL]. http://baike.baidu.com/view/1241775.htm
[10]成誠. 二維PDF417條碼識(shí)別技術(shù)的研究及其在Linux 平臺(tái)下的實(shí)現(xiàn)[D].碩士學(xué)位論文.南京航空航天大學(xué),2008:18-32.
[11]楊帆.數(shù)字圖像處理與分析[M].北京:北京航空航天大學(xué)出版社,2007.251-261.
[12]周曉偉.二維條碼識(shí)別技術(shù)研究[D].碩士學(xué)位論文.上海交通大學(xué),2007:15-27.
[13]胡小鋒,趙輝等.Visual C++/MATLAB圖像處理與識(shí)別實(shí)用案例精選[M].人民郵電出版社,2004:85-118.
[14]王家文,曹宇.MATLAB 6.5圖形圖像處理[M].2004:190-193,268-272.
[15]王佳,李波,徐其志.邊緣檢測中局部區(qū)域的動(dòng)態(tài)閾值選取的方法[J].計(jì)算機(jī)應(yīng)用研究,2010,27(2).