资源描述
《数字图像处理》课程设计汇报
——手写阿拉伯数字识别
1、课程设计目标
1)、 提升分析问题、处理问题能力,深入巩固数字图像处理系统中 基础原理和方法。
掌握文件检索方法和技巧。
2)、 熟悉掌握一门计算机语言,能够进行数字图像应用处理开发设计。
2、方法综述
2.1手写阿拉伯数字识别研究背景
字符识别处理信息可分为两大类:一类是文字信息,处理关键是用各国家、各民族文字(如:汉字,英文等)书写或印刷文本信息,现在在印刷体和联机手写方面技术已趋向成熟,并推出了很多应用系统;另一类是数据信息,关键是由阿拉伯数字及少许特殊符号组成多种编号和统计数据,如:邮政编码、统计报表、财务报表、银行票据等等,处理这类信息关键技术是手写数字识别。
近几年来中国开始大力推广“三金”工程在很大程度上要依靠数据信息输入,假如能经过手写数字识别技术实现信息自动录入,无疑会促进这一事业进展。所以,手写数字识别研究有着重大现实意义,一旦研究成功并投入应用,将产生巨大社会和经济效益。
2.2人工神经网络概念
人工神经网络(Artificia Neural Network)至今还没有一个比较科学和权威定义。有一个定义是:“人工神经网络是生理学上真实人脑神经网络结构和功效,和若干基础特征某种理论抽象,简化和模拟而组成一个信息处理系统。”荣辉.张济世.人工神经网路及其现实状况和展望《电子技术应用》1995年第10期
4一5页
从系统见解看,人工神经网络是由大量神经元经过极其丰富和完善联接而成,模拟大脑基础特征自适应非线性动态系统。神经元之间连接方法不一样,神经网络结构形态也就不一样。具体生理学上定义本文不再展开赘述。
2.3 BP神经网络
神经网络应用已经渗透到各个领域中,包含金融、股票估计,自动控制,
机器人,模式识别,计算机视觉和图像处理,信号处理等等, T,J,Sejnowiski,C,R,Rosenberg”Paralle Netwoeks that Learn to Pronounce English Test”,Complex Systems,1987:1 145-168
陈明,赵瑞清.BP神经网络百分比训练.计算机学报,1993(8)
靳蕃,范俊波,谭永东。神经网络和神经计算机.西南交大,1991
庄镇泉,王煦法,王东生.神经网络和神经计算机.北京:科学出版社,1992
6:毛群.王少飞.基于matlab神经网络数字识别系统实现.中国西部科技.(09).
7:施少敏.马彦恒.陈建泗.基于BP网络数字识别方法.兵工自动化..25.10
8:朱曼丽.孙志锋.孙志林.一个基于神经网络数字识别方法.计算机工程和应用..12
9:乔宝明张晓莉高志才基于matlab识别0-9数字图像新方法.技术和创新管理..3
10:许捍卫.王成.一个简单数字识别方法研究.河海大学测量工程系
其中软件模拟BP网络是应用最多、最成功网络。此次课程设计是基于BP神经网络对手写阿拉伯数字进行识别,故下文介绍相关BP神经网络概念。
2.3.1 BP神经网络概念
BP(Back Propagation)网络又叫误差反向传输网络,是由美国加利福尼亚大学PDP小组提出一个神经网络算法,实现了Minsky和Papert认为不能实现多层网络设想。
BP算法基础思想是,学习过程由信号正向传输和误差反向传输两个过程组成。正向传输时,输入样本从输入层传入,经各隐藏层逐层处理后,传向输出层。若输出层实际输出和期望输出(老师信号)不符,则转入误差反向传输阶段。误差反传是将输出误差以某种形式经过隐藏层向输入层反传,并将误差分摊给各层全部单元,从而取得各层单元误差信号,此误差信号即作为修正各单元权值依据。这种信号正向传输和误差反向传输各层权值调整过程,是周而复始地进行。权值不停调整过程,也就是网络学习训练过程。此过程一直进行到网络输出误差降低到可接收到程度,或进行到预先设定学习次数为此。
BP网络基础结构图1所表示,网络由不一样层次节点集合组成,每一层节点输出送到下一层节点。这些输出值因为连接权不一样而被放大、衰减或抑制。除了输入层外,每一节点输入为前一节点输出值加权和。每一节点激励输出值由节点输入、激励函数及闭值决定。
图1:BP网络模型
BP网络学习算法使用梯度搜索技术,以期望网络实际输出和期望输出均方差最小。网络学习是一个在误差反向转播同时修正过程。学习过程应包含两个阶段:前向计算阶段和反向调整阶段
2.4图像分割:
对二值化后图像进行分割处理,本课程设计采取基于字符连通域分割。因为对数字书写有一定要求,两个字符之间不能出现连笔情况,所以能够对二值图像各个分离部分进行标注来分割字符,用函数bwlabel来实现。用函数regionprops来度量图像区域属性, 包含属性BoundingBox( 表示各标注区域最小矩形) 和Centroid(表示各区域质心)。经过对各个区域标注及各个区域起点坐标和区域范围(包含宽度和高度)确实定来截取字符, 所用函数为imcrop,最终调用函数imresize对图像进行归一化处理。
2.5特征提取
经过粗网格方法来提取特征。首先对分割后字符归一化为70×50点阵,然后将此矩阵等分为7×5网格,接着依次统计每一个网格内黑像素点(即“1”)个数,得到一个以数字表示7×5维网格特征,将7×5维特征矩阵转变为一维特征,最终对其进行归一化操作。
3、试验结果和分析
3.1课程设计结构及步骤
基于BP神经网络手写体数字识别系统大致能够分为输入、预处理、特征提取、BP神经网络识别4个部分。输入包含数字样本集扫描输入和待识别数字输入,先用数字样本集扫描输入图像经预处理后特征提取特征向量来训练神经网络,再用训练好神经网络来识别待识别数字。预处理部分包含二值化、平滑、去噪、细化,再对预处理后二值点阵图像进行特征提取。最终将所提取特征量输入训练好神经网络进行识别,输出识别结果。基于BP神经网络手写体数字识别系统结构及步骤图2所表示。
开始读入需要识别数字图像
将图像转化为灰度图像
将灰度图像转化为二值图像
图像分割
预处理模块
特征提取
进行数字识别和比对
图2:手写阿拉伯数字识别系统步骤图
3.2预处理模块
因为扫描输入图像通常为RGB格式,预处理首先需要将其转化为二值化图像,即只包含“0”、“1”矩阵形式。先将原始图像转化为灰度图像, 经过函数rgb2gray来实现,再经过函数im2bw转化为二值图像,然后对二值化后图像进行分割处理,
3.3数字识别和比对
采取三层BP神经网络来实现。经过试验测试设定隐含层神经元数目为10,所以只需分类10个数字,设定输出层神经元数目为10。隐含层神经元传输函数采取S型对数函数logsig, 输出层神经元传输函数也采取S 型对数函数logsig,此神经网络训练函数采取trainlm,性能函数采取sse,训练步数最长设为5000,性能目标设为0.01。
3.4试验结果
图3:GUI界面及试验结果
图4:导入具体需要进行识别图像
图5:对需要识别数字进行选择和裁剪 图6:对需要识别手写阿拉伯数字进行预处理
3.4.1预处理模块部分源代码:
function img = edu_imgpreprocess(I)
Igray = rgb2gray(I);
Ibw = im2bw(Igray,graythresh(Igray));%将图像转化为二值图像
Iedge = edge(uint8(Ibw));
se = strel('square',3);
Iedge2 = imdilate(Iedge, se);
Ifill= imfill(Iedge2,'holes');
[Ilabel num] = bwlabel(Ifill);
Iprops = regionprops(Ilabel);
Ibox = [Iprops.BoundingBox];
Ibox = reshape(Ibox,[4 50]);
Ic = [Iprops.Centroid];
Ic = reshape(Ic,[2 50]);
Ic = Ic';
Ic(:,3) = (mean(Ic.^2,2)).^(1/2);
Ic(:,4) = 1:50;
Ic2 = sortrows(Ic,2);
for cnt = 1:5
Ic2((cnt-1)*10+1:cnt*10,:) = sortrows(Ic2((cnt-1)*10+1:cnt*10,:),4);
end
Ic3 = Ic2(:,1:2);
ind = Ic2(:,4);
for cnt = 1:50
img{cnt} = imcrop(Ibw,Ibox(:,ind(cnt)));
end
function bw2 = edu_imgcrop(bw)
% 找到图像边界
[y2temp x2temp] = size(bw);
x1=1;
y1=1;
x2=x2temp;
y2=y2temp;
% 找出最左边空格(Finding left side blank spaces)
cntB=1;
while (sum(bw(:,cntB))==y2temp)
x1=x1+1;
cntB=cntB+1;
end
% 找出最右边空格(Finding right side blank spaces)
cntB=1;
while (sum(bw(cntB,:))==x2temp)
y1=y1+1;
cntB=cntB+1;
end
%找出最上边空格( Finding upper side blank spaces)
cntB=x2temp;
while (sum(bw(:,cntB))==y2temp)
x2=x2-1;
cntB=cntB-1;
end
% 找出最下边空格(Finding lower side blank spaces)
cntB=y2temp;
while (sum(bw(cntB,:))==x2temp)
y2=y2-1;
cntB=cntB-1;
end
% 对图像进行裁剪(Crop the image to the edge)
bw2=imcrop(bw,[x1,y1,(x2-x1),(y2-y1)]);
图7:对需要识别手写阿拉伯数字进行特征提取
3.4.2特征提取源代码
function lett = edu_imgresize(bw2)
% This function will take the cropped binary image and change it to 5 x 7
% character representation in single vector.
bw_7050=imresize(bw2,[70,50]);%重新定义尺寸
%粗网格特征提取方法
for cnt=1:7
for cnt2=1:5
Atemp=sum(bw_7050((cnt*10-9:cnt*10),(cnt2*10-9:cnt2*10)));
lett((cnt-1)*5+cnt2)=sum(Atemp);
end
end
lett=((100-lett)/100);%特征向量归一化
lett=lett';
3.4.3:识别模块源代码
function net = edu_createnn(P,T)%创建神经网络
alphabet = P;
targets = T;
[R,Q] = size(alphabet);
[S2,Q] = size(targets);
S1 = 10;S2=10;
net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsig'},'trainlm');
net.LW{2,1} = net.LW{2,1}*0.01;
net.b{2} = net.b{2}*0.01;
net.performFcn = 'sse';
net.trainParam.goal = 0.01;
net.trainParam.show = 20;
net.trainParam.epochs = 5000;
net.trainParam.mc = 0.95;
P = alphabet;
T = targets;
[net,tr] = train(net,P,T);
3.5试验结果分析
在此次课程试验中我对0到9这10个手写数字进行识别,在试验过程中,发觉该系统没措施达成百分之百正确率,进行数次程序调试这个问题仍然没措施得到改善。比如该系统有时会将8识别为1,将7识别为3,或将7识别为2,不过对于4,5这两个数,识别正确率能达成百分之百。
5、课程设计总结和体会
经过此次课程设计使得我对手写阿拉伯数字识别系统设计和运行有了深入了解,也使得我对数字图像处理这个课程有了深入探索。在整个设计过程中,我认为最关键是要有整体计划思想,先对课题进行需求分析,分成多个模块进行设计和编程,最终设计一个GUI界面将各个模块整合到一个系统中,完成课程设计题目标要求。在这个过程中我深化了书本所学习到理论知识,也经过在网上查询资料和文件学习到了书本以外知识,这开拓了我见识。在老师指导下我经过对代码进行分析提升了编程能力,不过包含部分比较细致参数设置还没有深入地研究过,有待提升。
6、参考文件
展开阅读全文