数字图像处理课程设计报告.docx
《数字图像处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
![数字图像处理课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/4/5e10678f-aeae-4898-8e99-4d445b6d44ff/5e10678f-aeae-4898-8e99-4d445b6d44ff1.gif)
数字图像处理课程设计报告
数字图像处理
课程设计报告
姓名:
宋东洋、祁飞、登科
学号:
、、
班级:
软件开发.NET3班
设计题目:
手写体数字识别
教师:
庞海波老师
提交日期:
2015年12月25日
一、设计容:
主题:
《手写体数字识别》
详细说明:
读入手写体数字图片,选择要识别的数字然后通过寻找数字边界将图像裁剪的边缘,然后生成裁剪后图像的二进制图像,并将其转换成5﹡7的图像,然后进行特征提取,运行Simulink模型识别数字。
二、现实意义:
手写体数字的识别有着非常广泛的应用(如:
邮政编码、统计报表、财务报表、银行票据等等)。
三、涉及知识容:
1、边界查找
2、二值化
3、Simulink模型
四、实例分析及截图效果:
(1)代码显示:
1、程序中定义图像变量说明
(1)S--------------------------------------------------------------原图变量;
(2)img_crop----------------------------------------------------选择的图象;
(3)imgGray-----------------------------------------------------灰度图像变量
(4)BW-----------------------------------------------------------二值化图像;
(5)charvec-----------------------------------------------------5*7图像变量;
2、实现代码:
Index.m
functionvarargout=charGUI(varargin)
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',charGUI_OpeningFcn,...
'gui_OutputFcn',charGUI_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---ExecutesjustbeforecharGUIismadevisible.
functioncharGUI_OpeningFcn(hObject,eventdata,handles,varargin)
loaddata;
assignin('base','net',net);
handles.output=hObject;
guidata(hObject,handles);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=charGUI_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
%---ExecutesonbuttonpressinpbLoad.
functionpbLoad_Callback(hObject,eventdata,handles)
[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.gif';'*.*'},'PickanImageFile');
S=imread([pathname,filename]);
axes(handles.axes1);
imshow(S);
handles.S=S;
guidata(hObject,handles);
%---ExecutesonbuttonpressinpbSelect.
functionpbSelect_Callback(hObject,eventdata,handles)
S=handles.S;
axes(handles.axes1);
img_crop=imcrop(S);
axes(handles.axes2);
imshow(img_crop);
handles.img_crop=img_crop;
guidata(hObject,handles);
%---ExecutesonbuttonpressinpbPreprocess.
functionpbPreprocess_Callback(hObject,eventdata,handles)
img_crop=handles.img_crop;
imgGray=rgb2gray(img_crop);
bw=im2bw(img_crop,graythresh(imgGray));
axes(handles.axes3);
imshow(bw);
bw2=edu_imgcrop(bw);
axes(handles.axes4);
imshow(bw2);
handles.bw2=bw2;
guidata(hObject,handles);
%---ExecutesonbuttonpressinpbExtract.
functionpbExtract_Callback(hObject,eventdata,handles)
bw2=handles.bw2;
charvec=edu_imgresize(bw2);
axes(handles.axes5);
plotchar(charvec);
handles.charvec=charvec;
guidata(hObject,handles);
%---ExecutesonbuttonpressinpbRecognize.
functionpbRecognize_Callback(hObject,eventdata,handles)
charvec=handles.charvec;
selected_net=get(handles.editNN,'string');
selected_net=evalin('base',selected_net);
result=sim(selected_net,charvec);
[val,num]=max(result);
set(handles.editResult,'string',mod(num,10));
%---ExecutesonbuttonpressinpbNN.
functionpbNN_Callback(hObject,eventdata,handles)
functioneditNN_Callback(hObject,eventdata,handles)
%---Executesduringobjectcreation,aftersettingallproperties.
functioneditNN_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
functioneditResult_Callback(hObject,eventdata,handles)
%---Executesduringobjectcreation,aftersettingallproperties.
functioneditResult_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
edu_imgcrop.m
functionbw2=edu_imgcrop(bw)
%求图像的边界
[y2tempx2temp]=size(bw);
x1=1;
y1=1;
x2=x2temp;
y2=y2temp;
%寻找左侧空白空间
cntB=1;
while(sum(bw(:
cntB))==y2temp)
x1=x1+1;
tB=cntB+1;
end
%寻找右侧空白空间
cntB=1;
while(sum(bw(cntB,:
))==x2temp)
y1=y1+1;
tB=cntB+1;
end
%寻找上边空白空间
cntB=x2temp;
while(sum(bw(:
cntB))==y2temp)
x2=x2-1;
tB=cntB-1;
end
%寻找下边空白空间
cntB=y2temp;
while(sum(bw(cntB,:
))==x2temp)
y2=y2-1;
tB=cntB-1;
end
%将图像裁剪到边缘
bw2=imcrop(bw,[x1,y1,(x2-x1),(y2-y1)]);
edu_imgresize.m
functionlett=edu_imgresize(bw2)
%此功能将采取裁剪的二进制图像,并将其改为5×7
%单个向量中的特征表示。
bw_7050=imresize(bw2,[70,50]);
fort=1:
7
fort2=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、运行效果截图:
第一步:
读取原图,并显示
第二步:
选择图像并显示
第三步:
预处理(二值化、查找边界、裁剪图片)
第四步:
特征提取
第五步:
显示数字(运行Simulink模型)
四、算法分析
(1)Simulink模型
sim函数用来运行Simulink模型。
需要注意的是,用户无法控制其仿真过程(例如暂停、继续),一旦运行就会直到达到结束条件为止——这一点和通过模型窗口界面运行仿真不同。
五、心得体会
通过这次的课程设计,我对Matlab有了一定的了解,刚开始做的时候有点不知所措,主要是因为平时不够努力,书上的知识了解得不够多,课下没有及时地复习。
这次作业我和组员商量后选择了手写体数字识别,做作业之前上网查了很多资料,通过网络了解了一些关于数字识别方面的知识,通过课本也了解了一些,经过不断地努力我和我的组员一起完成了这次作业。
虽然作业完成了,但也有一些缺陷,由于时间比较紧迫,所以希望以后有时间能自己再完善一下。
我相信只要能坚持到底就能成功。
六、程序资料清单和源代码
电子档打包发送到FTP。