白 明,王 莉,蘇彥莽,高振斌
商品的賦碼是我國政府部門以及市場監管部門對消費品的一種電子監管手段,其方法就是賦予每一件商品一個監管碼[1-3].隨著商品數量的不斷增多及種類的不斷更新,各行各業都開始使用賦碼監管系統,一方面可以使消費者充分了解商品,另一方面也符合國家電子安全監管的理念[4].因此,對監管碼識別準確率要求相對較高,而字符圖像二值分割的好壞對監管碼的識別起著決定性的作用.
根據數字圖像的特征分布情況不同、圖像各自的特性不同及對圖像興趣區域的限制條件不同,將興趣區域從目標圖像的背景中分割出來的方法、理論也多種多樣.幾種常見的分割方法有:邊緣檢測分割方法、OSTU分割方法、固定特值分割方法等.
文獻 [5]使用OSTU方法對圖像進行分割,該方法實現相對簡單,且分割效果好,但是無法實現圖像中各區域的自適應分割.
生物學家在研究哺乳類動物的視覺皮層時發現,在某一種外部刺激下哺乳類動物的一片特定部分能夠激發脈沖信號,這些特定的部分有著相似的特性,根據這種脈沖耦合特性建立了PCNN模型.隨著PCNN網絡研究逐漸深入,他的性能也更完善,其最主要的特點是:具有記憶功能、網絡容量大、高效的計算能力.PCNN網絡內部每個神經元都存儲著部分信息,在信息處理的過程中,所有神經元處于并行處理的狀態.此外,人工神經網絡有著超強自學習能力,通過學習和適應改變內部參數和結構可以達到近似任何函數的效果,因此廣泛用于數字圖像處理領域.
PCNN網絡在圖像的二值分割中,所獲得的結果除了受網絡參數的影響還與網絡的迭代次數有關.因此,本文采用圖像的交叉熵最小理論控制迭代次數,來實現算法的自行分割圖像[6-8].
PCNN網絡神經元模型如圖1所示.
PCNN網絡整體工作流程可以大致表示為:


圖1 PCNN網絡神經元基本模型Fig.1 Basic model of PCNN neural network
式中:F[n]是對應神經元的反饋輸入,S[n]是圖像中對應像素的灰度值;M和W為當前神經元的連結權值矩陣,即卷積核,它代表當前神經元與相鄰神經元之間互相作用的程度;V表示神經元固有電平;VT表示神經元固有門限電平;β表示神經元相互影響作用程度;Y表示當前神經元輸出脈沖信號,定義Y=0時,神經元被抑制,此時無脈沖信號產生,當Y=1時,神經元被激活,此時產生脈沖信號;T表示當前神經元能否產生激發脈沖的動態電平閾值.
PCNN內部由許多神經元構成,在數字圖像處理中,主要利用其激發脈沖的同步特性以及鄰近神經元捕獲特性.圖2為PCNN處理圖像的過程.
熵是用來衡量事件中不確定性信息大小的一個量.交叉熵是表示2個不同概率分布的熵的差異.設有2個信息集合,其概率分布分別為P、Q,其公式可表示為

式中:D(P∶Q)為集合P與Q的交叉熵;pi為集合P的概率元素;qi為集合Q的概率元素.
直接運用PCNN網絡分割圖像,無法準確判定具體哪一次點火圖像為最佳二值分割圖像,只能通過對實驗數據的大量統計得出.這種結論往往受其他因素的干擾而不準確.本文采用最小交叉熵原理優化PCNN網絡迭代次數,其流程如圖3所示.在圖像分割過程中,P,Q分別表示目標圖像和分割后圖像的分布情況.當二者交叉熵D最小時,該分割后的圖像信息與原圖像信息最為接近,判定此時分割效果最好.

圖2 圖像處理過程Fig.2 Image processing

圖3 最佳二值分割方法Fig.3 Optimal two value segmentation method
2.1.1 設計對象
在使用MATLAB計算PCNN網絡過程中,主要對象設計如表1所示.
網絡運算過程中,主要是更新輸入反饋項F、線性輸入項L、動態閾值T以及脈沖輸出Y.通過反復更新這些值,就能夠得到一個完整的時間序列.主要有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)亦為常數,所以為了減少運算量,提前計算其結果并將其整體存儲.W為連結矩陣,是影響連接域的關鍵,vL、vF、vT分別為L、F以及Theta的初始固定電平,DM為原始圖像.
2.1.2 數據表示方法
在神經網絡計算的過程中,因為閾值vTheta一般相對較大,故采用16位二進制數據表示,其他常量均用8位二進制數據表示,與待處理圖像的像素位寬相同.但是在計算時,為了提高網絡運算精度,將變量K、L用16位二進制數據表示,其中小數位和整數位各8位.變量U、T、F變量用24位二進制數據表示,其中小數位為8位,整數位為16位.
2.1.3 模塊設計
在PCNN網絡的實現中,存儲模塊將所需參數以及中間部分運算結果儲存起來,運算模塊將輸入的數據計算后在控制模塊的操作下完成與存儲單元之間的數據交換.整體設計電路如圖4所示.
運算模塊主要包括卷積模塊和線性計算模塊.卷積模塊主要為了計算變量K,可以利用3個RAM以及2個計數器完成.如圖5所示,3個RAM是用來緩存圖像的3行數據.計數器1控制RAM地址信號,計數器2控制運算的行數.
線性計算模塊主要是計算變量線性輸入項L、反饋項F以及動態門限Theta.以L計算模塊為例,如圖6,其它類似.
存儲模塊主要由RAM構成:圖像數據RAM_X、線性項RAM_L、內部活動項 RAM_U、點火輸出RAM_Y、動態閾值RAM_TH.當寫使能有效時(寫使能高有效),向addr處寫入數據.地址線深度為15 bit,ram容量256×128;數據線寬度RAM_X為8bit、RAM_L為16 bit(8 bit小數位)、RAM_U為24 bit(8 bit小數位)、RAM_Y為8 bit、RAM_TH為24 bit(8 bit小數位) .
控制模塊主要是由計數器和狀態機組成,通過輸出使能信號來控制運算模塊內所有變量的計算、更新以及運算模塊和存儲模塊之間的數據流動.其內部結構如圖7所示.

表1 PCNN算法的主要計算模塊Tab.1 The main computational blocks of PCNN algorithm

圖4 PCNN整體結構Fig.4 Overall structure of PCNN

圖5 卷積模塊內部結構Fig.5 Internal structure of convolution module

圖6 變量L的計算過程Fig.6 Calculation process of variable L
狀態機主要有空閑Idle狀態、初始化Init狀態、計算L Calc_L狀態、等待L Wait_C_L狀態、計算U Calc_U狀態、計算Y Calc_Y狀態、計算Theta Calc_Th狀態.
狀態機工作流程為:
Idle:當rst信號有效時令狀態機為Idle復位狀態,所有變量復位,rst拉高后待寫使能有效跳轉至Init;
Init:初始化狀態,初始化RAM_X(灰度),RAM_Y(全0),RAM_L,RAM_U和閾值Th,將迭代次數初始化為0,當寫使能拉低跳轉至Calc_L;

圖7 控制模塊的結構Fig.7 Structure of control module
Calc_L:將X、Y矩陣輸入conv模塊計算L矩陣;Y矩陣讀完后跳轉至Wait_C_L;
Wait_C_L:等待L矩陣計算完畢,計算完畢后跳轉至Calc_U;
Calc_U:計算U矩陣,待U計算完畢后跳轉至Calc_Y;
Calc_Y:將U矩陣與閾值Theta進行比較,更新Y矩陣,并將Y矩陣輸出至最小交叉熵計算模塊,矩陣更新完畢后跳轉至Calc_Theta;
Calc_Theta:更新閾值Theta,計算完畢后跳轉至Idle;
迭代次數計數器主要負責控制整個圖像被PCNN網絡處理的次數以及各個變量的更新狀態.當該計數器等于預先設定值時,網絡計算終止,狀態機回到Idle狀態.
在圖8中,初始化模塊將PCNN網絡的初始化參數與原始圖像數據傳入PCNN模塊,該模塊主要功能是完成分割圖像的迭代運算,并將更新的閾值、生成的二值圖像以及記錄點火情況的標志矩陣存入RAM中.RAM模塊將生成的點火圖像和原始圖像傳遞至最小交叉熵模塊中.最小交叉熵模塊通過使能信號控制PCNN模塊的迭代.直至第n+1次迭代運算后,最小交叉熵模塊判斷此次迭代后的分割圖像的交叉熵大于第n次的值,此時,第n次交叉熵為最小交叉熵,即判定第n次分割圖像為最佳分割圖像.
交叉熵計算模塊主要由乘法器、加法器、除法器以及對數計算模塊組成,如圖9所示.對數計算模塊是由一個Block RAM構成.利用查找表的方式來計算對數.其輸入由八位小數和八位整數組成,查找表數據由MATLAB生成.

圖8 圖像的分割模塊Fig.8 Image segmentation module

圖9 熵計算模塊Fig.9 Entropy calculation module
為了說明改進后的效果,本文首先對比了PCNN網絡直接分割圖像時,不同迭代次數的圖像分割效果,然后對比了OSTU算法的分割效果.
圖10為原始圖像以及PCNN網絡直接分割圖像時第4~8次的點火圖像.其中可以看到PCNN網絡迭代到第7次時,圖像分割效果最好.

圖10 PCNN直接分割圖像Fig.10 Direct segmentation of PCNN
圖11中為本文算法和OSTU算法在處理灰度圖像時的效果.通過對比顯示,待處理圖像中字符特征相對比較明顯時,二者差距不大;當背景顏色較深或者圖像中字符特征相對較弱時,本文算法處理效果更加優越.
本文設計可處理8位的256*128灰度圖像.設計采用Zedboard開發板,其核心芯片為Xilinx公司的ZynqTM-7000,內部有大小為36Kb的Block RAM存儲資源.外部時鐘為100MHz,且接口資源和IP核資源豐富.實驗對象為圖10中原始圖像.
3.2.1 PCNN分割模塊
data_in為模塊輸入數據,data_out為計算圖像數據X和點火后矩陣Y的卷積結果,nstate代表當前狀態機狀態,data_y為本次迭代后的點火圖像數據.當nstate為cal_l時,計算線性項L,計算完成后狀態機跳轉為cal_u狀態,計算內部應激項U,以此類推,如圖12所示.

圖11 不同算法的二值分割效果Fig.11 Two value segmentation results of different algorithms

圖12 PCNN模塊仿真圖Fig.12 Simulation of PCNN module
3.2.2 對數求解模塊
clk為時鐘信號,信號a為圖像前景各級灰度值,信號b為圖像前景平均灰度值,信號c表示abs(a*log10(a/b)),信號sign為信號c的計算符號:‘1’為正,‘0’為負,對數計算結果如圖13所示.
3.2.3 最小交叉熵模塊
h1為背景像素點數,h2為前景像素點數,g1為背景灰度總值,g2為前景灰度總值,data_X為輸入的灰度圖像數據,data_Y為分割后的二值圖像,D為計算后的交叉熵.sig_c和sign信號由對數求解模塊輸出.當sign=1時,sig_c加到d_temp中;當sign=0時,d_temp減去sig_c.最終結果輸出交叉熵D,如圖14所示.將計算后的交叉熵數據導出到MATLAB中顯示,圖像第7次分割后,其與原始圖像交叉熵最小,如圖15所示.

圖13 對數求解模塊仿真圖Fig.13 Simulation of logarithmic solution module

圖14 交叉熵計算模塊仿真圖Fig.14 Simulation of cross entropy calculation module
常規二值分割方法及PCNN網絡直接分割圖像的方法受網絡參數的影響,本文設計的聯合最小交叉熵理論的PCNN分割方法可以有效的解決這個問題.MATLAB實驗結果表明本文的設計方法在分割時比常規方法的效果更好,并能實現PCNN網絡自動分割圖像.Modelsim仿真的結果證明了本文設計方法在FPGA上的可實現性.

圖15 交叉熵計算結果Fig.15 The result of cross entropy calculation
[1] 蔣井明,李萱津,王榕榕.藥品電子監管碼在賦碼過程中的常見問題與處理[J].機電信息,2010(5):50-53.
[2] 彭秉軍.奶粉行業產品質量全程追溯系統研究與實現[D].長春:吉林大學,2015.
[3] 王小芳,張鵬飛,仝麗梅.“電子監管碼”知多少[J].印刷世界,2012(11):27-29.
[4] 劉祥.移動互聯時代“互聯網+產品質量追溯”管理體系建立初探[J].標準科學,2016(4):81-84.
[5] 孫玉梅,王鵬遙,孫巧妍,等.輪胎胎面參數在線檢測系統研究及應用[J].儀器儀表學報,2016,37(12):2859-2865.
[6] 徐黎明,呂繼東.基于最小交叉熵的改進PCNN楊梅圖像分割算法[J].西北師范大學學報(自然科學版),2016,52(1):43-46.
[7] 沈艷,張曉明,韓凱歌,等.PCNN圖像分割技術研究[J].現代電子技術,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.