MATLAB课程设计GUI图像处理.doc
《MATLAB课程设计GUI图像处理.doc》由会员分享,可在线阅读,更多相关《MATLAB课程设计GUI图像处理.doc(51页珍藏版)》请在咨信网上搜索。
目 录 1.设计目的…………………………………………………3 2.题目分析…………………………………………………3 3.总体设计…………………………………………………3 4.具体设计…………………………………………………5 5.结果分析…………………………………………………34 6.心得体会…………………………………………………34 7.附录代码…………………………………………………36 1、设计目的:综合运用MATLAB工具箱实现图像处理的GUI程序设计, 利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。 2、题目分析 利用matlab的GUI程序设计一个简单实用的图像处理程序。该程序应具备图像处理的常用功能,以满足用户的使用。现设计程序有以下基本功能: 1)图像的读取和保存。 2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。 3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。 4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。 5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。 6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。 7)额外功能。 3、总体设计 图一 软件的总体设计界面布局如上图所示,主要分为2个部分:显示区域与操作区域。 显示区域:显示载入原图,以及通过处理后的图像。 操作区域:通过功能键实现对图像的各种处理。 在截图中可见,左部为一系列功能按键如“还原”、“撤销”、“截图”等等 ;界面正中部分为图片显示部分,界面中下方为系列功能切换选择组。 设计完成后运行的软件界面如下: 图二 与图一先比,运行后的界面更为简洁。 利用“编辑”菜单可调出相应的功能键。例如: 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) 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 set(gcbo, 'Checked', 'on'); end 该段程序通过设置“图像翻转”功能键对应的句柄uipanel7中的“Visible”属性的开关来实现该功能键的显示隐藏。其他同理。 4.2图像的读取和保存。 (1)利用“文件”菜单中的“打开”、“保存为…”分别实现图片的读取与保存。 利用matlab中 “ uigetfile”、“imread” “imshow”实现图像文件的读取与显示: function openfile_Callback(hObject, eventdata, handles) % 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)在显示区域上显示图像。 (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); 实现对图像的保存。 (3)程序的退出。 function exit_Callback(hObject, eventdata, handles) % hObject handle to exit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc; close all; close(gcf); clear; 4.3对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。 运行程序后,通过“编辑”菜单中的“常用处理”选中“亮度调节” 在显示出相应的功能键后,通过载入读取图像,比并进行处理,效果如下: 亮度处理前: 亮度处理后: 实现程序段如下: % --- Executes on button press in radiobutton12. function radiobutton12_Callback(hObject, eventdata, handles) % hObject handle to radiobutton12 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton12 global T axes(handles.axes2); T=getimage; prompt={'调整倍数'}; defans={'1'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); y=imadjust(handles.img,[ ], [ ],p1); %亮度调节 imshow(y); handles.img=y; guidata(hObject,handles); 对比度处理前: 对比度处理后(增强3倍): 对比度减弱1.5倍后: 实现程序段如下: function uipanel10_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to uipanel10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case'增强' 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'}; p=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)函数来实现对图片某一区域的截取,截取的图片在右框中显示。结合“保存为…”,可把截图处理后的图片保存在指定路径。 实现程序段如下: % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; x=imcrop(handles.img); %截图 imshow(x); handles.img=x; guidata(hObject,handles); 4.5 图像转化为灰度图像。 由于在matlab中较多的图像处理函数支持对灰度图像进行处理,故对图像进行灰度转化十分必要。可利用rgb2gray(X)函数对其他图像进行灰度图像的转化。 转化实例如下: 实现程序段如下: % --- Executes on button press in radiobutton16. function radiobutton16_Callback(hObject, eventdata, handles) % hObject handle to radiobutton16 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton16 global T axes(handles.axes2); T=getimage; x=rgb2gray(handles.img); %RGBͼÏñת»»Îª»Ò¶ÈͼÏñ imshow(x); handles.img=x; guidata(hObject,handles); 4.6对图像进行放大和缩小整数倍的操作。 通过imresize(X,n,mode)函数对图像X进行放大或者缩小。N放大缩小倍数,mode为采用的方式。 通过处理后可发现保存的图片的比原图放大了(缩小了)。 实现的程序段如下: function uipanel9_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to uipanel9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case'最近邻插值' T=getimage; prompt={'输入参数:'}; defans={'2'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imresize(handles.img,p1,'nearest'); imshow(f); handles.img=f; guidata(hObject,handles); case'双线性插值' T=getimage; prompt={'输入参数:'}; defans={'1'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imresize(handles.img,p1,'bilinear'); imshow(f); handles.img=f; guidata(hObject,handles); end 4.7图像直方图统计和直方图均衡。 (1)通过histeq(X)函数实现直方图均衡。 因为此函数只能对灰度图像进行直方图均衡。故应先将彩图转为灰度图像。 在上一步的基础上对第二幅图进行直方图均衡: 直方图均衡实现程序段如下: % --- Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T axes(handles.axes2); T=getimage; h=histeq(handles.img); imshow(h); handles.img=h; guidata(hObject,handles); 关键部分:通过 h=histeq(handles.img)进行直方图均衡 (2)直方图统计。通过利用imhist(X)函数来实现直方图统计。 % --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); x=imhist(handles.img); %直方图统计 x1=x(1:10:256); horz=1:10:256; bar(horz,x1); axis([0 255 0 15000]); set(handles.axes2,'xtick',0:50:255); set(handles.axes2,'ytick',0:2000:15000); 注意:横纵坐标的范围应选取适当,否则,统计图表有可能超出范围。 4.8加入各种噪声,并通过几种滤波算法实现去噪。 (1)加入噪声。通过imnoise(I,type,parameters)来加入各种噪声。 加入椒盐噪声 加入高斯噪声: 加入乘性噪声: 实现程序段如下: function uipanel4_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to uipanel4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case '椒盐噪声' T=getimage; prompt={'数日椒盐噪声参数1:'}; defans={'0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imnoise(handles.img,'salt & pepper',p1); imshow(f); handles.img=f; guidata(hObject,handles); case '¸高斯噪声' T=getimage; prompt={'输入高斯噪声1:','输入高斯噪声2'}; defans={'0','0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); p2=str2num(p{2}); f=imnoise(handles.img,'gaussian',p1,p2); imshow(f); handles.img=f; guidata(hObject,handles); case '乘性噪声' T=getimage; prompt={'输入乘性噪声1:'}; defans={'0.02'}; p=inputdlg(prompt,'input',1,defans); p1=str2num(p{1}); f=imnoise(handles.img,'speckle',p1); imshow(f); handles.img=f; guidata(hObject,handles); end (2)滤除噪声(椒盐噪声)。 滤波前 中值滤波后 线性滤波后 自适应滤波后 实现程序段如下: function uipanel5_SelectionChangeFcn(hObject, eventdata, handles) %图像滤波 % hObject handle to uipanel5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global T str=get(hObject,'string'); axes(handles.axes2); switch str case '中值滤波' T=getimage; k=medfilt2(handles.img); imshow(k); handles.img=k; guidata(hObject,handles); case '线性滤波' T=getimage; h=[1 1 1;1 1 1;1 1 1]; H=h/9; i=double(handles.img); k=convn(i,h); imshow(k,[]); handles.img=k; guidata(hObject,handles); case '自适应滤波' T=getimage; k=wiener2(handles.img,[5,5]); imshow(k); handles.img=k; guidata(hObject,handles); end 低通滤波器滤波后 高通滤波器滤波后 实现程序如下: % --- Executes on button press in pushbutton14. function pushbutton14_Callback(hObject, eventdata, handles) % hObject handle to pushbutton14 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); y1=handles.img; f=double(y1); % 数据类型转换,matlab不支持图像的无符号整型的计算 g=fft2(f); % 傅里叶变换 g=fftshift(g); % 转换数据矩阵 [M,N]=size(g); nn=2; %二阶巴特沃斯低通滤波器 d0=50; %截止频率50 m=fix(M/2); n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数 result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); % 显示处理后的图像 % --- Executes on button press in pushbutton15. function pushbutton15_Callback(hObject, eventdata, handles) % hObject handle to pushbutton15 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); x=(handles.img); f=double(x); % 数据类型转换 k=fft2(f); % 傅里叶变换 g=fftshift(k); % 转换数据矩阵 [M,N]=size(g); nn=2; d0=25; %截止频率25 m=fix(M/2); n=fix(N/2); for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); % 计算高通滤波器传递函数 if d<=d0 h=0; else h=1; end result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); % 显示滤波处理后的图像 4.9还原 通过一个全局变量保存原始图像路径,在需要还原至原始图像时,重新读取该全局变量即可。 实现程序段如下: % --- Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global S %还原 axes(handles.axes2); y=imread(S); f=imshow(y); handles.img=y; guidata(hObject,handles); 4.10 撤销。 撤销上一步的操作。通过另设一个全局变量T保存是上一次操作后的图像。 实现程序段如下: --- Executes on button press in pushbutton11. function pushbutton11_Callback(hObject, eventdata, handles) % hObject handle to pushbutton11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axes(handles.axes2); %撤销 global T imshow(T); handles.img=T; guidata(hObject,handles); 该程序段只是简单的显示图像的功能,其中全局变量T中储存的是上一步操作处理后的图像信息。在以上的各段功能程序段中可见均有 “T=getimage;”,此句把当前操作前的图像,即上一次操作后的图像信息赋予全局变量T。 4.11 图像变形。 (1)图像翻转。实现图像的镜像翻转。 左右翻转: 上下翻转 实现程序如下: function uipanel7_SelectionChangeFcn(hObject, eventdata, handles) %图像翻转 % hObject handle to uipanel7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) str=get(hObject,'string'); axes(handles.axes2); global T switch str case '左右翻转' T=handles.img; f=fliplr(handles.img); imshow(f); handles.img=f; guidata(hObject,handles); case '上下翻转' T=handles.img; f=flipud(handles.img); imshow(f); handles.img=f; guidata(hObject,handles); end 程序关键部分:通过f=fliplr(handles.img); f=flipud(handles.img);分别实现左右镜像翻转与上下镜像翻转。 (2)图像旋转。 实现图像的逆时针旋转任意角度。 实现程序段如下: function pushbutton3_Cal- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 课程设计 GUI 图像 处理
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文