白 明,王 莉,蘇彥莽,高振斌
商品的賦碼是我國政府部門以及市場監(jiān)管部門對消費品的一種電子監(jiān)管手段,其方法就是賦予每一件商品一個監(jiān)管碼[1-3].隨著商品數(shù)量的不斷增多及種類的不斷更新,各行各業(yè)都開始使用賦碼監(jiān)管系統(tǒng),一方面可以使消費者充分了解商品,另一方面也符合國家電子安全監(jiān)管的理念[4].因此,對監(jiān)管碼識別準確率要求相對較高,而字符圖像二值分割的好壞對監(jiān)管碼的識別起著決定性的作用.
根據(jù)數(shù)字圖像的特征分布情況不同、圖像各自的特性不同及對圖像興趣區(qū)域的限制條件不同,將興趣區(qū)域從目標圖像的背景中分割出來的方法、理論也多種多樣.幾種常見的分割方法有:邊緣檢測分割方法、OSTU分割方法、固定特值分割方法等.
文獻 [5]使用OSTU方法對圖像進行分割,該方法實現(xiàn)相對簡單,且分割效果好,但是無法實現(xiàn)圖像中各區(qū)域的自適應(yīng)分割.
生物學家在研究哺乳類動物的視覺皮層時發(fā)現(xiàn),在某一種外部刺激下哺乳類動物的一片特定部分能夠激發(fā)脈沖信號,這些特定的部分有著相似的特性,根據(jù)這種脈沖耦合特性建立了PCNN模型.隨著PCNN網(wǎng)絡(luò)研究逐漸深入,他的性能也更完善,其最主要的特點是:具有記憶功能、網(wǎng)絡(luò)容量大、高效的計算能力.PCNN網(wǎng)絡(luò)內(nèi)部每個神經(jīng)元都存儲著部分信息,在信息處理的過程中,所有神經(jīng)元處于并行處理的狀態(tài).此外,人工神經(jīng)網(wǎng)絡(luò)有著超強自學習能力,通過學習和適應(yīng)改變內(nèi)部參數(shù)和結(jié)構(gòu)可以達到近似任何函數(shù)的效果,因此廣泛用于數(shù)字圖像處理領(lǐng)域.
PCNN網(wǎng)絡(luò)在圖像的二值分割中,所獲得的結(jié)果除了受網(wǎng)絡(luò)參數(shù)的影響還與網(wǎng)絡(luò)的迭代次數(shù)有關(guān).因此,本文采用圖像的交叉熵最小理論控制迭代次數(shù),來實現(xiàn)算法的自行分割圖像[6-8].
PCNN網(wǎng)絡(luò)神經(jīng)元模型如圖1所示.
PCNN網(wǎng)絡(luò)整體工作流程可以大致表示為:
圖1 PCNN網(wǎng)絡(luò)神經(jīng)元基本模型Fig.1 Basic model of PCNN neural network
式中:F[n]是對應(yīng)神經(jīng)元的反饋輸入,S[n]是圖像中對應(yīng)像素的灰度值;M和W為當前神經(jīng)元的連結(jié)權(quán)值矩陣,即卷積核,它代表當前神經(jīng)元與相鄰神經(jīng)元之間互相作用的程度;V表示神經(jīng)元固有電平;VT表示神經(jīng)元固有門限電平;β表示神經(jīng)元相互影響作用程度;Y表示當前神經(jīng)元輸出脈沖信號,定義Y=0時,神經(jīng)元被抑制,此時無脈沖信號產(chǎn)生,當Y=1時,神經(jīng)元被激活,此時產(chǎn)生脈沖信號;T表示當前神經(jīng)元能否產(chǎn)生激發(fā)脈沖的動態(tài)電平閾值.
PCNN內(nèi)部由許多神經(jīng)元構(gòu)成,在數(shù)字圖像處理中,主要利用其激發(fā)脈沖的同步特性以及鄰近神經(jīng)元捕獲特性.圖2為PCNN處理圖像的過程.
熵是用來衡量事件中不確定性信息大小的一個量.交叉熵是表示2個不同概率分布的熵的差異.設(shè)有2個信息集合,其概率分布分別為P、Q,其公式可表示為
式中:D(P∶Q)為集合P與Q的交叉熵;pi為集合P的概率元素;qi為集合Q的概率元素.
直接運用PCNN網(wǎng)絡(luò)分割圖像,無法準確判定具體哪一次點火圖像為最佳二值分割圖像,只能通過對實驗數(shù)據(jù)的大量統(tǒng)計得出.這種結(jié)論往往受其他因素的干擾而不準確.本文采用最小交叉熵原理優(yōu)化PCNN網(wǎng)絡(luò)迭代次數(shù),其流程如圖3所示.在圖像分割過程中,P,Q分別表示目標圖像和分割后圖像的分布情況.當二者交叉熵D最小時,該分割后的圖像信息與原圖像信息最為接近,判定此時分割效果最好.
圖2 圖像處理過程Fig.2 Image processing
圖3 最佳二值分割方法Fig.3 Optimal two value segmentation method
2.1.1 設(shè)計對象
在使用MATLAB計算PCNN網(wǎng)絡(luò)過程中,主要對象設(shè)計如表1所示.
網(wǎng)絡(luò)運算過程中,主要是更新輸入反饋項F、線性輸入項L、動態(tài)閾值T以及脈沖輸出Y.通過反復(fù)更新這些值,就能夠得到一個完整的時間序列.主要有6個變量和8個常量需要存儲.6個變量分別為K、L、U、Theta、Y、F,其存儲的大小與待處理圖像相同.8個常量分別為alpha_L,alpha_Theta,alpha_F,beta,W,vL,vF,vT.在計算的過程中,因為exp(-alpha_L),exp(-alpha_Theta),exp(-alpha_F)亦為常數(shù),所以為了減少運算量,提前計算其結(jié)果并將其整體存儲.W為連結(jié)矩陣,是影響連接域的關(guān)鍵,vL、vF、vT分別為L、F以及Theta的初始固定電平,DM為原始圖像.
2.1.2 數(shù)據(jù)表示方法
在神經(jīng)網(wǎng)絡(luò)計算的過程中,因為閾值vTheta一般相對較大,故采用16位二進制數(shù)據(jù)表示,其他常量均用8位二進制數(shù)據(jù)表示,與待處理圖像的像素位寬相同.但是在計算時,為了提高網(wǎng)絡(luò)運算精度,將變量K、L用16位二進制數(shù)據(jù)表示,其中小數(shù)位和整數(shù)位各8位.變量U、T、F變量用24位二進制數(shù)據(jù)表示,其中小數(shù)位為8位,整數(shù)位為16位.
2.1.3 模塊設(shè)計
在PCNN網(wǎng)絡(luò)的實現(xiàn)中,存儲模塊將所需參數(shù)以及中間部分運算結(jié)果儲存起來,運算模塊將輸入的數(shù)據(jù)計算后在控制模塊的操作下完成與存儲單元之間的數(shù)據(jù)交換.整體設(shè)計電路如圖4所示.
運算模塊主要包括卷積模塊和線性計算模塊.卷積模塊主要為了計算變量K,可以利用3個RAM以及2個計數(shù)器完成.如圖5所示,3個RAM是用來緩存圖像的3行數(shù)據(jù).計數(shù)器1控制RAM地址信號,計數(shù)器2控制運算的行數(shù).
線性計算模塊主要是計算變量線性輸入項L、反饋項F以及動態(tài)門限Theta.以L計算模塊為例,如圖6,其它類似.
存儲模塊主要由RAM構(gòu)成:圖像數(shù)據(jù)RAM_X、線性項RAM_L、內(nèi)部活動項 RAM_U、點火輸出RAM_Y、動態(tài)閾值RAM_TH.當寫使能有效時(寫使能高有效),向addr處寫入數(shù)據(jù).地址線深度為15 bit,ram容量256×128;數(shù)據(jù)線寬度RAM_X為8bit、RAM_L為16 bit(8 bit小數(shù)位)、RAM_U為24 bit(8 bit小數(shù)位)、RAM_Y為8 bit、RAM_TH為24 bit(8 bit小數(shù)位) .
控制模塊主要是由計數(shù)器和狀態(tài)機組成,通過輸出使能信號來控制運算模塊內(nèi)所有變量的計算、更新以及運算模塊和存儲模塊之間的數(shù)據(jù)流動.其內(nèi)部結(jié)構(gòu)如圖7所示.
表1 PCNN算法的主要計算模塊Tab.1 The main computational blocks of PCNN algorithm
圖4 PCNN整體結(jié)構(gòu)Fig.4 Overall structure of PCNN
圖5 卷積模塊內(nèi)部結(jié)構(gòu)Fig.5 Internal structure of convolution module
圖6 變量L的計算過程Fig.6 Calculation process of variable L
狀態(tài)機主要有空閑Idle狀態(tài)、初始化Init狀態(tài)、計算L Calc_L狀態(tài)、等待L Wait_C_L狀態(tài)、計算U Calc_U狀態(tài)、計算Y Calc_Y狀態(tài)、計算Theta Calc_Th狀態(tài).
狀態(tài)機工作流程為:
Idle:當rst信號有效時令狀態(tài)機為Idle復(fù)位狀態(tài),所有變量復(fù)位,rst拉高后待寫使能有效跳轉(zhuǎn)至Init;
Init:初始化狀態(tài),初始化RAM_X(灰度),RAM_Y(全0),RAM_L,RAM_U和閾值Th,將迭代次數(shù)初始化為0,當寫使能拉低跳轉(zhuǎn)至Calc_L;
圖7 控制模塊的結(jié)構(gòu)Fig.7 Structure of control module
Calc_L:將X、Y矩陣輸入conv模塊計算L矩陣;Y矩陣讀完后跳轉(zhuǎn)至Wait_C_L;
Wait_C_L:等待L矩陣計算完畢,計算完畢后跳轉(zhuǎn)至Calc_U;
Calc_U:計算U矩陣,待U計算完畢后跳轉(zhuǎn)至Calc_Y;
Calc_Y:將U矩陣與閾值Theta進行比較,更新Y矩陣,并將Y矩陣輸出至最小交叉熵計算模塊,矩陣更新完畢后跳轉(zhuǎn)至Calc_Theta;
Calc_Theta:更新閾值Theta,計算完畢后跳轉(zhuǎn)至Idle;
迭代次數(shù)計數(shù)器主要負責控制整個圖像被PCNN網(wǎng)絡(luò)處理的次數(shù)以及各個變量的更新狀態(tài).當該計數(shù)器等于預(yù)先設(shè)定值時,網(wǎng)絡(luò)計算終止,狀態(tài)機回到Idle狀態(tài).
在圖8中,初始化模塊將PCNN網(wǎng)絡(luò)的初始化參數(shù)與原始圖像數(shù)據(jù)傳入PCNN模塊,該模塊主要功能是完成分割圖像的迭代運算,并將更新的閾值、生成的二值圖像以及記錄點火情況的標志矩陣存入RAM中.RAM模塊將生成的點火圖像和原始圖像傳遞至最小交叉熵模塊中.最小交叉熵模塊通過使能信號控制PCNN模塊的迭代.直至第n+1次迭代運算后,最小交叉熵模塊判斷此次迭代后的分割圖像的交叉熵大于第n次的值,此時,第n次交叉熵為最小交叉熵,即判定第n次分割圖像為最佳分割圖像.
交叉熵計算模塊主要由乘法器、加法器、除法器以及對數(shù)計算模塊組成,如圖9所示.對數(shù)計算模塊是由一個Block RAM構(gòu)成.利用查找表的方式來計算對數(shù).其輸入由八位小數(shù)和八位整數(shù)組成,查找表數(shù)據(jù)由MATLAB生成.
圖8 圖像的分割模塊Fig.8 Image segmentation module
圖9 熵計算模塊Fig.9 Entropy calculation module
為了說明改進后的效果,本文首先對比了PCNN網(wǎng)絡(luò)直接分割圖像時,不同迭代次數(shù)的圖像分割效果,然后對比了OSTU算法的分割效果.
圖10為原始圖像以及PCNN網(wǎng)絡(luò)直接分割圖像時第4~8次的點火圖像.其中可以看到PCNN網(wǎng)絡(luò)迭代到第7次時,圖像分割效果最好.
圖10 PCNN直接分割圖像Fig.10 Direct segmentation of PCNN
圖11中為本文算法和OSTU算法在處理灰度圖像時的效果.通過對比顯示,待處理圖像中字符特征相對比較明顯時,二者差距不大;當背景顏色較深或者圖像中字符特征相對較弱時,本文算法處理效果更加優(yōu)越.
本文設(shè)計可處理8位的256*128灰度圖像.設(shè)計采用Zedboard開發(fā)板,其核心芯片為Xilinx公司的ZynqTM-7000,內(nèi)部有大小為36Kb的Block RAM存儲資源.外部時鐘為100MHz,且接口資源和IP核資源豐富.實驗對象為圖10中原始圖像.
3.2.1 PCNN分割模塊
data_in為模塊輸入數(shù)據(jù),data_out為計算圖像數(shù)據(jù)X和點火后矩陣Y的卷積結(jié)果,nstate代表當前狀態(tài)機狀態(tài),data_y為本次迭代后的點火圖像數(shù)據(jù).當nstate為cal_l時,計算線性項L,計算完成后狀態(tài)機跳轉(zhuǎn)為cal_u狀態(tài),計算內(nèi)部應(yīng)激項U,以此類推,如圖12所示.
圖11 不同算法的二值分割效果Fig.11 Two value segmentation results of different algorithms
圖12 PCNN模塊仿真圖Fig.12 Simulation of PCNN module
3.2.2 對數(shù)求解模塊
clk為時鐘信號,信號a為圖像前景各級灰度值,信號b為圖像前景平均灰度值,信號c表示abs(a*log10(a/b)),信號sign為信號c的計算符號:‘1’為正,‘0’為負,對數(shù)計算結(jié)果如圖13所示.
3.2.3 最小交叉熵模塊
h1為背景像素點數(shù),h2為前景像素點數(shù),g1為背景灰度總值,g2為前景灰度總值,data_X為輸入的灰度圖像數(shù)據(jù),data_Y為分割后的二值圖像,D為計算后的交叉熵.sig_c和sign信號由對數(shù)求解模塊輸出.當sign=1時,sig_c加到d_temp中;當sign=0時,d_temp減去sig_c.最終結(jié)果輸出交叉熵D,如圖14所示.將計算后的交叉熵數(shù)據(jù)導(dǎo)出到MATLAB中顯示,圖像第7次分割后,其與原始圖像交叉熵最小,如圖15所示.
圖13 對數(shù)求解模塊仿真圖Fig.13 Simulation of logarithmic solution module
圖14 交叉熵計算模塊仿真圖Fig.14 Simulation of cross entropy calculation module
常規(guī)二值分割方法及PCNN網(wǎng)絡(luò)直接分割圖像的方法受網(wǎng)絡(luò)參數(shù)的影響,本文設(shè)計的聯(lián)合最小交叉熵理論的PCNN分割方法可以有效的解決這個問題.MATLAB實驗結(jié)果表明本文的設(shè)計方法在分割時比常規(guī)方法的效果更好,并能實現(xiàn)PCNN網(wǎng)絡(luò)自動分割圖像.Modelsim仿真的結(jié)果證明了本文設(shè)計方法在FPGA上的可實現(xiàn)性.
圖15 交叉熵計算結(jié)果Fig.15 The result of cross entropy calculation
[1] 蔣井明,李萱津,王榕榕.藥品電子監(jiān)管碼在賦碼過程中的常見問題與處理[J].機電信息,2010(5):50-53.
[2] 彭秉軍.奶粉行業(yè)產(chǎn)品質(zhì)量全程追溯系統(tǒng)研究與實現(xiàn)[D].長春:吉林大學,2015.
[3] 王小芳,張鵬飛,仝麗梅.“電子監(jiān)管碼”知多少[J].印刷世界,2012(11):27-29.
[4] 劉祥.移動互聯(lián)時代“互聯(lián)網(wǎng)+產(chǎn)品質(zhì)量追溯”管理體系建立初探[J].標準科學,2016(4):81-84.
[5] 孫玉梅,王鵬遙,孫巧妍,等.輪胎胎面參數(shù)在線檢測系統(tǒng)研究及應(yīng)用[J].儀器儀表學報,2016,37(12):2859-2865.
[6] 徐黎明,呂繼東.基于最小交叉熵的改進PCNN楊梅圖像分割算法[J].西北師范大學學報(自然科學版),2016,52(1):43-46.
[7] 沈艷,張曉明,韓凱歌,等.PCNN圖像分割技術(shù)研究[J].現(xiàn)代電子技術(shù),2014,37(2):38-41.
[8] DENG,Xiangyu,Yide.PCNN model analysis and its automatic parameters determination in image segmentation and edge detection[J].Chinese Journal of Electronics,2014,23(1):97-103.