BP网络实现对货运列车车号识别的程序设计
2015-12-22吴楠
吴 楠
(安阳钢铁集团股份有限公司)
0 概述
冶金铁路运输中路局车辆都配备有车号,通过记录车号数据,实现车辆的站内调配、放置、外发和准确编组。通过照相系统获取车号图像,把待识别数字从原始图像中提取出来,对单字符图像进行二值化处理,采用已经训练好的BP(Back-Propagation Learning Algorithm)网络对单字符图像进行识别,当该图像符合BP 网络认定的某数字特征时,识别出该数字。这里着重介绍BP 网络识别二值图像的程序设计,图像获取、定位、分割等方面的知识请参考相关资料。
1 BP 网络简介
BP 网络是模仿大脑神经网络而建立的一种信息处理系统,实质反映了输入转化成输出的一种数学表达式,这种数学关系是由网络的结构确定,而网络结构必须根据具体问题进行设计和训练[2]。BP网络由输入层、隐含层、输出层组成。(如图1 所示)。输入层和输出层的单元数是由具体问题的输入参数和输出参数确定,而隐含层的单元数由具体问题的复杂程度、误差下降情况等来确定。信息从输入层经各隐含层向输出层传播,在输出层获得响应后,按减小希望输出与实际输出误差的方向,从输出层修正回到输入层。随着这种误差逆传播修正的不断进行,网络对输入响应的正确率不断上升,输出将得到更精确的值[3]。
图1 BP 网络结构
2 建立车号的数学模型
车号由0 ~9 十个阿拉伯数字组合而成(如图2所示)。经过分割、提取可以获得单个数字(如图3所示)。对于单个的数字图像,对它进行图像的二值化处理就可以将该数字的特征值录入已经训练好的BP 网络,BP 网络通过对比该数字的特征值近似于0 ~9 哪个数字的特征值而将它识别出来。为了训练能识别出0 ~9 十个数字的各自相应特征值的BP 网络,必须先告诉BP 网络这十个数字各自的特征值是什么,我们进行抽象化建模过程:(1)画图板—图像—属性;(2)宽度和高度设为20,单位设为像素,颜色设为黑白;(3)在设定好的画布里键入数字0(之后键入1 ~9);(4)保存后就得到了0 的二值图像(20 ×20)。0 ~9 十个数字的二值图像(如图4 所示)。至此我们建立了十个数字的模型,可以基于对模型表现出的特征值对BP 网络训练,使网络记忆每个数字的特征。
图2 货运列车车号数字
图3 单个数字
图4 0 -9 二值图像
需要指出货运列车车号数字串可能出现移位、倾斜、变形、破损、模糊等图像噪声干扰情况,这就要求训练出的BP 网络具有抗噪声干扰的能力,即图像数字的位置偏移、位移、不清晰等,网络都能正确的识别出该数字。为了扩大网络的识别范围和精度,在输入数量上进行扩充,增加多幅20 ×20 的图像,对数字进行左偏、右偏、增加或减少像素点等一些微小的改动(可使用画图板铅笔加一个像素点或橡皮擦一个点,或拖动数字上下左右做细微的移动。)
3 算法和流程图
使用MATLAB 函数库的IMREAD 函数将图像二值化处理。例如:I0 =imread('3.bmp'),意思为读取名字为“3.bmp”图像,图像中空白用1 表示,数字3 的黑色轮廓用0 表示,将400 个0 和1 放入变量I0中作为网络的输入量。
对0 ~9 十幅数字化(二值)图像的识别用两种算法对比介绍:
1)方法一:将图像20 ×20 的矩阵每一行都转置后依次放成一列,即400 ×1 的矩阵,十幅图放入一个矩阵400 ×10,输入网络训练。其流程如图5 所示。
图5 直接对图象信息进行识别的主流程图
2)方法二:将图像划分为5 ×4 的网格,每格为一小的4 ×5 矩阵,包含原图的20 个数字量,分析这20 个数字量,有几个0(图像的有用信息)记为一个值,记录20 个值,再将这个包含有用特征值的5 ×4矩阵转置成一列,输入网络训练。其流程如图6 所示。
图6 提取图象特征信息进行识别的主流程图
4 程序简述
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;
%神经元个数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 自适应算法训练网络
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 的倍数时4 ×5 的矩阵才会换行
n=ceil(j/4);
%j=4 的倍数时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 函数过程省略
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;
%隐含层神经元的个数为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);
5 应用效果
两种方法的程序通过网络的训练都达到了预期的目的。两种方法得到的收敛图及运行情况图如图7、图8 所示。
图7 方法一的收敛图及运行情况图
图8 方法二的收敛图及运行情况图
从图7,图8 可以看出,在学习速率同为0.6,期望误差值为0.01 时,方法一需要运行10658 次,误差的接近程度为0.00999496,隐含层神经元80 个;方法二需要运行2705 次,误差的接近程度为0.00999782,隐含层神经元30 个。方法二较方法一训练时间缩减75%,误差提高0.000003,复杂度降低62.5%。
综上所述,方法二训练出了具备识别图像数字能力的BP 网络。如果加大训练输入量,将得到更好的网络训练效果。
6 结论
经过实际应用,该BP 网络具备了短时高效的辨别数字图像的能力,可以有效的降低人工核对货运列车车号的工作量,并减少人为因素造成的差错。
[1]张德丰. MATLAB 数字图像处理[M].机械工业出版社,2009:16 -20.
[2]王小川,史峰. MATLAB 神经网络43 个案例分析[M].北京航空航天大学出版社,2013:79 -88.
[3]尹念东. BP 神经网络的应用设计[J]. 信息技术,2003,26(6):18 -20.