您的当前位置:首页正文

数字图像处理课程设计报告

2020-05-28 来源:星星旅游
 《数字图像处理》课程设计报告

数字图像处理

课程设计报告

姓 名: 宋东洋、祁飞、冯登科

学 号: 20137750342、20137750336、20137750309

班 级: 软件开发 .NET 3班

设计题目: 手写体数字识别

教 师: 庞海波老师

提交日期: 2015年12月25日

一、设计内容:

- 1 -

《数字图像处理》课程设计报告

主题:《手写体数字识别》

详细说明:读入手写体数字图片,选择要识别的数字然后通过寻找数字边界将图像裁剪的边缘,然后生成裁剪后图像的二进制图像,并将其转换成5﹡7的图像,然后进行特征提取,运行Simulink模型识别数字。 二、现实意义:

手写体数字的识别有着非常广泛的应用(如:邮政编码、统计报表、财务报表、银行票据等等). 三、涉及知识内容: 1、边界查找 2、二值化 3、Simulink模型

四、实例分析及截图效果: (1)代码显示:

1、程序中定义图像变量说明

(1)S—------———--—-—-——--—---—----—----——————-——--—----—--———--——-—原图变量;

(2)img_crop———-—-----——--—-———--—-————--—-——----——-——-—--—-----选择的图象;

(3)imgGray—--————--—-—--—--———-——-----—-———-—-——--—---—------——灰度图像变量

- 2 -

《数字图像处理》课程设计报告

(4)BW-—-—-——---—-———-—-—--———-—--—-——------——--—-—-————--——-——--二值化图像;

(5)charvec-———-—-———-—-———--——---—-——--—-——-————--——--—---—-——-5*7图像变量;

2、实现代码:

Index。m

function varargout = charGUI(varargin) % Begin initialization code - DO NOT EDIT 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’, []); if nargin && ischar(varargin{1})

gui_State。gui_Callback = str2func(varargin{1}); end if nargout

- 3 -

《数字图像处理》课程设计报告

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code — DO NOT EDIT

% --- Executes just before charGUI is made visible.

function charGUI_OpeningFcn(hObject, eventdata, handles, varargin) load data;

assignin('base’,’net',net); handles。output = hObject; guidata(hObject, handles);

% --- Outputs from this function are returned to the command line。 function varargout = charGUI_OutputFcn(hObject, eventdata, handles) varargout{1} = handles。output;

% -—- Executes on button press in pbLoad。

function pbLoad_Callback(hObject, eventdata, handles)

[filename, pathname] = uigetfile({'*。bmp’;'*。jpg';’*。gif';’*.*’}, 'Pick an Image File');

- 4 -

《数字图像处理》课程设计报告

S = imread([pathname,filename]); axes(handles.axes1); imshow(S);

handles.S = S;

guidata(hObject, handles);

% --— Executes on button press in pbSelect.

function pbSelect_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);

% ——- Executes on button press in pbPreprocess.

function pbPreprocess_Callback(hObject, eventdata, handles) img_crop = handles.img_crop; imgGray = rgb2gray(img_crop);

- 5 -

《数字图像处理》课程设计报告

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);

% —-— Executes on button press in pbExtract。

function pbExtract_Callback(hObject, eventdata, handles) bw2 = handles。bw2; charvec = edu_imgresize(bw2); axes(handles.axes5); plotchar(charvec); handles.charvec = charvec; guidata(hObject, handles);

% —-- Executes on button press in pbRecognize.

function pbRecognize_Callback(hObject, eventdata, handles) charvec = handles。charvec;

selected_net = get(handles。editNN,'string’);

- 6 -

《数字图像处理》课程设计报告

selected_net = evalin('base’,selected_net); result = sim(selected_net,charvec); [val, num] = max(result);

set(handles.editResult, 'string',mod(num,10));

% -—— Executes on button press in pbNN。

function pbNN_Callback(hObject, eventdata, handles)

function editNN_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties。 function editNN_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,’BackgroundColor'), get(0,’defaultUicontrolBackgroundColor’)) set(hObject,'BackgroundColor’,'white’); end

function editResult_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties。 function editResult_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,

- 7 -

《数字图像处理》课程设计报告

'defaultUicontrolBackgroundColor’))

set(hObject,'BackgroundColor',’white’); end

edu_imgcrop.m

function bw2 = edu_imgcrop(bw) % 求图像的边界

[y2temp x2temp] = size(bw); x1=1; y1=1; x2=x2temp; y2=y2temp;

% 寻找左侧空白空间 cntB=1;

while (sum(bw(:,cntB))==y2temp) x1=x1+1; cntB=cntB+1; end

% 寻找右侧空白空间

- 8 -

《数字图像处理》课程设计报告

cntB=1;

while (sum(bw(cntB,:))==x2temp) y1=y1+1; cntB=cntB+1; end

% 寻找上边空白空间 cntB=x2temp;

while (sum(bw(:,cntB))==y2temp) x2=x2-1; cntB=cntB—1; end

% 寻找下边空白空间 cntB=y2temp;

while (sum(bw(cntB,:))==x2temp) y2=y2-1; cntB=cntB—1; end

% 将图像裁剪到边缘

bw2=imcrop(bw,[x1,y1,(x2—x1),(y2-y1)]);

- 9 -

《数字图像处理》课程设计报告

edu_imgresize。m

function lett = edu_imgresize(bw2)

% 此功能将采取裁剪的二进制图像,并将其改为5×7 % 单个向量中的特征表示. 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、运行效果截图:

第一步:读取原图,并显示

- 10 -

《数字图像处理》课程设计报告

第二步:选择图像并显示

- 11 -

《数字图像处理》课程设计报告

第三步:预处理(二值化、查找边界、裁剪图片)

第四步: 特征提取

- 12 -

《数字图像处理》课程设计报告

第五步:显示数字(运行Simulink模型)

四、算法分析 (1)Simulink模型

sim函数用来运行Simulink模型.需要注意的是,用户无法

- 13 -

《数字图像处理》课程设计报告

控制其仿真过程(例如暂停、继续),一旦运行就会直到达到结束条件为止—-这一点和通过模型窗口界面运行仿真不同。

五、心得体会

通过这次的课程设计,我对Matlab有了一定的了解,刚开始做的时候有点不知所措,主要是因为平时不够努力,书上的知识了解得不够多,课下没有及时地复习。这次作业我和组员商量后选择了手写体数字识别,做作业之前上网查了很多资料,通过网络了解了一些关于数字识别方面的知识,通过课本也了解了一些,经过不断地努力我和我的组员一起完成了这次作业。虽然作业完成了,但也有一些缺陷,由于时间比较紧迫,所以希望以后有时间能自己再完善一下。我相信只要能坚持到底就能成功。 六、程序资料清单和源代码

电子档打包发送到FTP。

- 14 -

因篇幅问题不能全部显示,请点此查看更多更全内容