吳 楠
(安陽鋼鐵集團股份有限公司)
冶金鐵路運輸中路局車輛都配備有車號,通過記錄車號數(shù)據(jù),實現(xiàn)車輛的站內(nèi)調(diào)配、放置、外發(fā)和準確編組。通過照相系統(tǒng)獲取車號圖像,把待識別數(shù)字從原始圖像中提取出來,對單字符圖像進行二值化處理,采用已經(jīng)訓練好的BP(Back-Propagation Learning Algorithm)網(wǎng)絡對單字符圖像進行識別,當該圖像符合BP 網(wǎng)絡認定的某數(shù)字特征時,識別出該數(shù)字。這里著重介紹BP 網(wǎng)絡識別二值圖像的程序設計,圖像獲取、定位、分割等方面的知識請參考相關資料。
BP 網(wǎng)絡是模仿大腦神經(jīng)網(wǎng)絡而建立的一種信息處理系統(tǒng),實質(zhì)反映了輸入轉化成輸出的一種數(shù)學表達式,這種數(shù)學關系是由網(wǎng)絡的結構確定,而網(wǎng)絡結構必須根據(jù)具體問題進行設計和訓練[2]。BP網(wǎng)絡由輸入層、隱含層、輸出層組成。(如圖1 所示)。輸入層和輸出層的單元數(shù)是由具體問題的輸入?yún)?shù)和輸出參數(shù)確定,而隱含層的單元數(shù)由具體問題的復雜程度、誤差下降情況等來確定。信息從輸入層經(jīng)各隱含層向輸出層傳播,在輸出層獲得響應后,按減小希望輸出與實際輸出誤差的方向,從輸出層修正回到輸入層。隨著這種誤差逆?zhèn)鞑バ拚牟粩噙M行,網(wǎng)絡對輸入響應的正確率不斷上升,輸出將得到更精確的值[3]。
圖1 BP 網(wǎng)絡結構
車號由0 ~9 十個阿拉伯數(shù)字組合而成(如圖2所示)。經(jīng)過分割、提取可以獲得單個數(shù)字(如圖3所示)。對于單個的數(shù)字圖像,對它進行圖像的二值化處理就可以將該數(shù)字的特征值錄入已經(jīng)訓練好的BP 網(wǎng)絡,BP 網(wǎng)絡通過對比該數(shù)字的特征值近似于0 ~9 哪個數(shù)字的特征值而將它識別出來。為了訓練能識別出0 ~9 十個數(shù)字的各自相應特征值的BP 網(wǎng)絡,必須先告訴BP 網(wǎng)絡這十個數(shù)字各自的特征值是什么,我們進行抽象化建模過程:(1)畫圖板—圖像—屬性;(2)寬度和高度設為20,單位設為像素,顏色設為黑白;(3)在設定好的畫布里鍵入數(shù)字0(之后鍵入1 ~9);(4)保存后就得到了0 的二值圖像(20 ×20)。0 ~9 十個數(shù)字的二值圖像(如圖4 所示)。至此我們建立了十個數(shù)字的模型,可以基于對模型表現(xiàn)出的特征值對BP 網(wǎng)絡訓練,使網(wǎng)絡記憶每個數(shù)字的特征。
圖2 貨運列車車號數(shù)字
圖3 單個數(shù)字
圖4 0 -9 二值圖像
需要指出貨運列車車號數(shù)字串可能出現(xiàn)移位、傾斜、變形、破損、模糊等圖像噪聲干擾情況,這就要求訓練出的BP 網(wǎng)絡具有抗噪聲干擾的能力,即圖像數(shù)字的位置偏移、位移、不清晰等,網(wǎng)絡都能正確的識別出該數(shù)字。為了擴大網(wǎng)絡的識別范圍和精度,在輸入數(shù)量上進行擴充,增加多幅20 ×20 的圖像,對數(shù)字進行左偏、右偏、增加或減少像素點等一些微小的改動(可使用畫圖板鉛筆加一個像素點或橡皮擦一個點,或拖動數(shù)字上下左右做細微的移動。)
使用MATLAB 函數(shù)庫的IMREAD 函數(shù)將圖像二值化處理。例如:I0 =imread('3.bmp'),意思為讀取名字為“3.bmp”圖像,圖像中空白用1 表示,數(shù)字3 的黑色輪廓用0 表示,將400 個0 和1 放入變量I0中作為網(wǎng)絡的輸入量。
對0 ~9 十幅數(shù)字化(二值)圖像的識別用兩種算法對比介紹:
1)方法一:將圖像20 ×20 的矩陣每一行都轉置后依次放成一列,即400 ×1 的矩陣,十幅圖放入一個矩陣400 ×10,輸入網(wǎng)絡訓練。其流程如圖5 所示。
圖5 直接對圖象信息進行識別的主流程圖
2)方法二:將圖像劃分為5 ×4 的網(wǎng)格,每格為一小的4 ×5 矩陣,包含原圖的20 個數(shù)字量,分析這20 個數(shù)字量,有幾個0(圖像的有用信息)記為一個值,記錄20 個值,再將這個包含有用特征值的5 ×4矩陣轉置成一列,輸入網(wǎng)絡訓練。其流程如圖6 所示。
圖6 提取圖象特征信息進行識別的主流程圖
1)方法一
I0 =imread(‘0.bmp’);
%對0 圖像的讀取
I1 =imread(‘1.bmp’);
%對1 圖像的讀取
……
%省略對其它圖像的讀取程序
p1 =zeros(400,10);
%建立一400 ×10 的矩陣,初始化為0
%將圖像的每一行(0 或1 值)轉置后順序放為一列
[a,b]=size(I0);
for i=1:a
for j=1:b
k=(i-1)* b+j;
p1(k,1)=I0(i,j);
end
end
[a,b]=size(I1);
for i=1:a
for j=1:b
k=(i-1)* b+j;
p1(k,2)=I1(i,j);
end
end
……
%省略對其它圖像的轉置程序
到此p1 這個400 ×10 矩陣的列中存放了0 ~9十幅圖的各自的特征值,每幅有400 個值(一列)。不要忘記噪聲干擾,假設每幅圖都多做2 個干擾圖像,(實際需要大量噪聲干擾圖像)。重復上面程序得到了p2、p3。
p=[p1 p2 p3];
%建成一個400 ×30 的矩陣,做輸入
t1 =eye(10);
%10 ×10 的單位陣
t2 =eye(10);
t3 =eye(10);
t=[t1 t2 t3 ];
%將3 個單位陣建成一個10 ×30 的矩陣,做輸出
[R,Q]=size(p);
S1 =80;
%神經(jīng)元個數(shù)80 個
[S2,Q]=size(t);
[w1,b1]=rands(S1,R);
[w2,b2]=rands(S2,S1);
disp_fqre=100;
%100 次顯示一次
max_epoch=15000;
%最大訓練15000 次
err_goal=0.01;
%誤差0.01
lr=0.6;
%學習速率0.6
TP=[disp_fqre max_epoch err_goal lr];
[w1,b1,w2,b2,epochs,errors]= trainbpx(w1,b1,‘tansig’,w2,b2,‘purelin’,p,t,TP);
%采用trainbpx 自適應算法訓練網(wǎng)絡
2)方法二
I0 =imread(‘0.bmp’);
%讀取圖象信息
sum0 =zeros(4,5);
%建立一個4 ×5 的矩陣,放特征值
for i=1:20
for j=1:20
m=ceil(i/5);
%i=5 的倍數(shù)時4 ×5 的矩陣才會換行
n=ceil(j/4);
%j=4 的倍數(shù)時4 ×5 的矩陣才會換列
if (I0(i,j)= =0)
%看原圖所指處的值是否為0
sum0(m,n)=sum0(m,n)+1;
%為0,sum 加1
end
end
end
……
%省略對其它圖像的提取0 值特征的程序
p1 =zeros(20,10);
%求轉置p1,類似于方法一程序
[a,b]=size(sum0);
……
%for 函數(shù)過程省略
p=[p1 p2 p3];
%期望輸入
t1 =eye(10);
%10 ×10 的單位陣
t2 =eye(10);
t3 =eye(10);
t=[t1 t2 t3];
%期望輸出
[R,Q]=size(p);
S1 =30;
%隱含層神經(jīng)元的個數(shù)為30
[S2,Q]=size(t);
[w1,b1]=rands(S1,R);
[w2,b2]=rands(S2,S1);
disp_fqre=100;
%100 次顯示一次
max_epoch=8000;
%總共運行8000 次
err_goal=0.01;
%期望誤差0.01
lr=0.6;
%學習速率0.6
TP=[disp_fqre max_epoch err_goal lr];
[w1,b1,w2,b2,epochs,errors]= trainbpx(w1,b1,‘tansig’,w2,b2,‘purelin’,p,t,TP);
兩種方法的程序通過網(wǎng)絡的訓練都達到了預期的目的。兩種方法得到的收斂圖及運行情況圖如圖7、圖8 所示。
圖7 方法一的收斂圖及運行情況圖
圖8 方法二的收斂圖及運行情況圖
從圖7,圖8 可以看出,在學習速率同為0.6,期望誤差值為0.01 時,方法一需要運行10658 次,誤差的接近程度為0.00999496,隱含層神經(jīng)元80 個;方法二需要運行2705 次,誤差的接近程度為0.00999782,隱含層神經(jīng)元30 個。方法二較方法一訓練時間縮減75%,誤差提高0.000003,復雜度降低62.5%。
綜上所述,方法二訓練出了具備識別圖像數(shù)字能力的BP 網(wǎng)絡。如果加大訓練輸入量,將得到更好的網(wǎng)絡訓練效果。
經(jīng)過實際應用,該BP 網(wǎng)絡具備了短時高效的辨別數(shù)字圖像的能力,可以有效的降低人工核對貨運列車車號的工作量,并減少人為因素造成的差錯。
[1]張德豐. MATLAB 數(shù)字圖像處理[M].機械工業(yè)出版社,2009:16 -20.
[2]王小川,史峰. MATLAB 神經(jīng)網(wǎng)絡43 個案例分析[M].北京航空航天大學出版社,2013:79 -88.
[3]尹念東. BP 神經(jīng)網(wǎng)絡的應用設計[J]. 信息技術,2003,26(6):18 -20.