《 MATLAB 实践 》
课程设计
学生姓名:
学
号:
专业班级:
指导教师:
二○○ 年 3 月 1 日
1 / 52
目
录
1.设计目的…………………………………………………3
2.题目分析…………………………………………………3
3.总体设计…………………………………………………3
4.具体设计…………………………………………………5
5.结果分析…………………………………………………34
6.心得体会…………………………………………………34
7.附录代码…………………………………………………36
2 / 52
1、设计目的:综合运用 MATLAB 工具箱实现图像处理的 GUI 程序设计, 利用
MATLAB 图像处理工具箱,设计和实现自己的 Photoshop 。
2、题目分析
利用 matlab 的 GUI 程序设计一个简单实用的图像处理程序。该程序应具备
图像处理的常用功能,以满足用户的使用。现设计程序有以下基本功能:
1)图像的读取和保存。
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,
显示和对比变换前后的图像。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该
选择区域。
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行
放大和缩小整数倍的操作,并保存,比较几种插值的效果。
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的
效果。
6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。
7)额外功能。
3、总体设计
3 / 52
软件的总体设计界面布局如上图所示,主要分为 2 个部分:显示区域与操作区域。
图一
显示区域:显示载入原图,以及通过处理后的图像。
操作区域:通过功能键实现对图像的各种处理。
在截图中可见,左部为一系列功能按键如“还原”、“撤销”、“截图”等等 ;界
面正中部分为图片显示部分,界面中下方为系列功能切换选择组。
设计完成后运行的软件界面如下:
图二
与图一先比,运行后的界面更为简洁。
利用“编辑”菜单可调出相应的功能键。例如:
4 / 52
4、具体设计
现介绍各个功能模块的功能与实现。
4.1 菜单栏的设计。
通过 Menu Editor 创建如下菜单,通过以下菜单来控制显示或隐藏功能按键
以“编辑”菜单中“图像变形”中的“图像翻转”为例说明实现用户界面功能键
“图像翻转”的显示与隐藏。
实现该功能的程序段如下:
function tuxiangfanzhuan_Callback(hObject, eventdata, handles)
% hObject
handle to tuxiangfanzhuan (see GCBO)
% eventdata
reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
5 / 52
set(handles.uipanel7,'Visible','on');
if strcmp(get(gcbo, 'Checked'),'on')
set(handles.uipanel7,'Visible','on');
set(gcbo, 'Checked', 'off');
set(handles.uipanel7,'Visible','off');
else
end
set(gcbo, 'Checked', 'on');
该段程序通过设置“图像翻转”功能键对应的句柄 uipanel7 中的“Visible”属
性的开关来实现该功能键的显示隐藏。其他同理。
4.2 图像的读取和保存。
(1)利用“文件”菜单中的“打开”、“保存为…”分别实现图片的读取
与保存。
利用matlab中 “ uigetfile”、“imread” “imshow”实现图像文件的读取与
显示:
function openfile_Callback(hObject, eventdata, handles)
6 / 52
% hObject
handle to openfile (see GCBO)
% eventdata
reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图
像');
if isequal(filename,0)|isequal(pathname,0)
errordlg('没有选中文件','出错');
return;
else
file=[pathname,filename];
global S
%设置一个全局变量S,保存初始图像路径,以便之后的还原操作
S=file;
x=imread(file);
set(handles.axes1,'HandleVisibility','ON');
axes(handles.axes1);
imshow(x);
set(handles.axes1,'HandleVisibility','OFF');
axes(handles.axes2);
imshow(x);
handles.img=x;
guidata(hObject,handles);
end
程序关键部分:
通过[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载
入图像')选择相应路径打开的图像;通过file=[pathname,filename];
x=imread(file); 读取选中的图像;最后,通过imshow(x)在显示区域上显示图
像。
7 / 52
(2)图像保存。
利用“uiputfile”、“imwrite”函数实现图像文件的保存。
function save_Callback(hObject, eventdata, handles)
% hObject
handle to save (see GCBO)
% eventdata
reserved - to be defined in a future version of MATLAB
% handles
structure with handles and user data (see GUIDATA)
[sfilename ,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保
存图像文件','untitled.jpg');
if ~isequal([sfilename,sfilepath],[0,0])
sfilefullname=[sfilepath ,sfilename];
imwrite(handles.img,sfilefullname);
else
msgbox('你按了取消键','保存失败');
end
程序关键部分:
通[sfilename ,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'
保存图像文件','untitled.jpg')选择图像文件保存的路径与格式;然后,通过
sfilefullname=[sfilepath ,sfilename];
imwrite(handles.img,sfilefullname); 实现对图像的保存。
8 / 52