1/53《MATLAB实践》课程设计学生姓名:##############学号:#######专业班级:########指导教师:############二○一一年3月6日2/53目录1.设计目的…………………………………………………32.题目分析…………………………………………………33.总体设计…………………………………………………34.具体设计…………………………………………………55.结果分析…………………………………………………346.心得体会…………………………………………………347.附录代码…………………………………………………363/531、设计目的:综合运用MATLAB工具箱实现图像处理的GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop。2、题目分析利用matlab的GUI程序设计一个简单实用的图像处理程序。该程序应具备图像处理的常用功能,以满足用户的使用。现设计程序有以下基本功能:1)图像的读取和保存。2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。7)额外功能。3、总体设计4/53图一软件的总体设计界面布局如上图所示,主要分为2个部分:显示区域与操作区域。显示区域:显示载入原图,以及通过处理后的图像。操作区域:通过功能键实现对图像的各种处理。在截图中可见,左部为一系列功能按键如“还原”、“撤销”、“截图”等等;界面正中部分为图片显示部分,界面中下方为系列功能切换选择组。设计完成后运行的软件界面如下:5/53图二与图一先比,运行后的界面更为简洁。利用“编辑”菜单可调出相应的功能键。例如:6/534、具体设计现介绍各个功能模块的功能与实现。4.1菜单栏的设计。通过MenuEditor创建如下菜单,通过以下菜单来控制显示或隐藏功能按键以“编辑”菜单中“图像变形”中的“图像翻转”为例说明实现用户界面功能键“图像翻转”的显示与隐藏。实现该功能的程序段如下:functiontuxiangfanzhuan_Callback(hObject,eventdata,handles)%hObjecthandletotuxiangfanzhuan(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)7/53set(handles.uipanel7,'Visible','on');ifstrcmp(get(gcbo,'Checked'),'on')set(handles.uipanel7,'Visible','on');set(gcbo,'Checked','off');set(handles.uipanel7,'Visible','off');elseset(gcbo,'Checked','on');end该段程序通过设置“图像翻转”功能键对应的句柄uipanel7中的“Visible”属性的开关来实现该功能键的显示隐藏。其他同理。4.2图像的读取和保存。(1)利用“文件”菜单中的“打开”、“保存为…”分别实现图片的读取与保存。利用matlab中“uigetfile”、“imread”“imshow”实现图像文件的读取与显示:functionopenfile_Callback(hObject,eventdata,handles)8/53%hObjecthandletoopenfile(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');ifisequal(filename,0)|isequal(pathname,0)errordlg('没有选中文件','出错');return;elsefile=[pathname,filename];globalS%设置一个全局变量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)在显示区域上显示图像。9/53(2)图像保存。利用“uiputfile”、“imwrite”函数实现图像文件的保存。functionsave_Callback(hObject,eventdata,handles)%hObjecthandletosave(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg');if~isequal([sfilename,sfilepath],[0,0])sfilefullname=[sfilepath,sfilename];imwrite(handles.img,sfilefullname);elsemsgbox('你按了取消键','保存失败');end程序关键部分:通[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg')选择图像文件保存的路径与格式;然后,通过sfilefullname=[sfilepath,sfilename];imwrite(handles.img,sfilefullname);实现对图像的保存。10/53(3)程序的退出。functionexit_Callback(hObject,eventdata,handles)%hObjecthandletoexit(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)clc;closeall;close(gcf);clear;4.3对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。运行程序后,通过“编辑”菜单中的“常用处理”选中“亮度调节”在显示出相应的功能键后,通过载入读取图像,比并进行处理,效果如下:亮度处理前:11/53亮度处理后:实现程序段如下:%---Executesonbuttonpressinradiobutton12.functionradiobutton12_Callback(hObject,eventdata,handles)%hObjecthandletoradiobutton12(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%Hint:get(hObject,'Value')returnstogglestateofradiobutton12globalTaxes(handles.axes2);T=getimage;prompt={'调整倍数'};defans={'1'};p=inputdlg(prompt,'input',1,defans);12/53p1=str2num(p{1});y=imadjust(handles.img,[],[],p1);%亮度调节imshow(y);handles.img=y;guidata(hObject,handles);对比度处理前:对比度处理后(增强3倍):对比度减弱1.5倍后:13/53实现程序段如下:functionuipanel10_SelectionChangeFcn(hObject,eventdata,handles)%hObjecthandletouipanel10(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)globalTstr=get(hObject,'string');axes(handles.axes2);switchstrcase'增强'T=getimage;prompt={'输入参数:'};defans={'1'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=immultiply(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);case'减弱'T=getimage;prompt={'输入参数:'};defans={'1'};14/53p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=imdivide(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);end该程序段主要通过f=immultiply(handles.img,p1);p=inputdlg(prompt,'input',1,defans);分别实现图像对比度的增强与减弱。4.4用鼠标选取图像感兴趣区域,显示和保存该选择区域。通过imcrop(x)函数来实现对图片某一区域的截取,截取的图片在右框中显示。结合“保存为…”,可把截图处理后的图片保存在指定路径。实现程序段如下:%---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)15/53globalTaxes(handle