数字信号与图像处理姓名:学号:年级:专业:学院:指导教师:二O一六年1月1基于MATLABGUI的数字图像处理方法摘要:基于数字信号处理原理,在数字滤波器设计理论和Matlab编程技术及其GUI图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理GUI软件,界面操作简单方便。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单、更加符合科技人员对数学表达式的书写格式,而且可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。关键词:MATLABGUI;数字图像处理;图形用户界面1MATLAB的图像处理工具概述MATLAB提供了多种图像处理函数,涵盖了图像处理的包括近期研究成果在内的几乎所有的技术方法,图像处理工具箱函数有噪和退化图像的恢复、图形绘制、图形的代数与逻辑运算、图形几何变换、图像增强、图像复原、二值分析、小波分析和分形几何。在工程实际应用中灰度与二值图像的形态学运算;结构元素创建与处理;基于边缘的处理;色彩映射表操作;色彩空间变换;图像类型与类型转换;以及图形用户界面设计等。2应用matlab工具箱进行图像分析处理应用matlab的Gui文件对图片进行灰度处理,亮度处理,放大处理,翻转处理,噪声处理,图像二值化,图像直方图、频谱图,滤波器,图像腐蚀,创建索引图像,RGB转HSV,RGB转NTSC,RGB转YCBCR和图像通道处理。图1是GUI的最终设计界面,图2是工作时界面。图12图22.1图形处理方法介绍及其处理结果图3是原图像,以下是实现的源程序及相关功能的部分注解:globalim;%定义全局变量[name,path]=uigetfile({'*.jpg';'*.gif';'*.bmp'},'载入图像');ifisequal(name,0)|isequal(path,0)errordlg('没有选中文件','出错');return;elsex=imread([path,name]);%读取图片axes(handles.axes1);%使用第一个axesimshow(x);%显示图片handles.img=x;handles.noise_img=x;guidata(hObject,handles)end图3图4为图像处理方法按钮:3图42.2程序调试1)灰度处理由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:y=(handles.img(:,:,1));%当然也可以选择(:,:,2)或(:,:,3)imshow(y);但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为:y=rgb2gray(handles.img);imshow(y);这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下:ifisrgb(handles.img)y=rgb2gray(handles.img);imshow(y);elsemsgbox('这已经是灰度图像','转换失败');end如果原图是RGB,执行该操作的结果如图5:4图5如果原图本身已经是灰度图像了,执行该操作弹出如下图所示的提示对话框2)亮度处理用imadjust函数,其调用格式如下:g=imadust(f,[low_inhigh_in],[low_outhigh_out]),gamma)gamma表示映射性质,默认值是1表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如图所示的输入对话框:prompt={'输入参数1','输入参数2','输入gamma'};defans={'[00.7]','[01]','1'};p=inputdlg(prompt,'输入参数',1,defans);执行该操作,结果如下图:5图63)翻转上下翻转程序:axes(handles.axes2);x=(handles.img);ifisrgb(handles.img)fork=1:3y(:,:,k)=flipud(x(:,:,k));%上下翻转函数endimshow(y);elsex=(handles.img);y=flipud(x);imshow(y);end左右翻转程序:axes(handles.axes2);ifisrgb(handles.img)x=(handles.img);fork=1:3y(:,:,k)=fliplr(x(:,:,k));%左右翻转函数endimshow(y);elsex=(handles.img);y=fliplr(x);imshow(y);end任意角度翻转程序:axes(handles.axes2);prompt={'输入参数1:'};defans={'30'};p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});y=imrotate(handles.img,p1);imshow(y);图7上下翻转6图8左右翻转图9任意角度翻转4)噪声处理高斯噪声程序:axes(handles.axes2);prompt={'输入参数1:','输入参数2'};defans={'0','0.02'};p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});p2=str2num(p{2});y=imnoise(handles.img,'gaussian',p1,p2);imshow(y);handles.noise_img=y;guidata(hObject,handles);椒盐噪声程序:prompt={'输入参数1:'};%对话框的设置,用户输入的是字符串defans={'0.02'};%缺省值p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});%字符串转化为数值axes(handles.axes2);x=(handles.img);y=imnoise(x,'salt&pepper',p1);imshow(y);handles.noise_img=y;7guidata(hObject,handles);图10高斯噪声图11椒盐噪声5)直方图处理R直方图程序:set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(handles.img(:,:,1));%直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);G直方图程序:set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);ifisrgb(handles.img)x=imhist(handles.img(:,:,2));%直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);elsemsgbox('这是灰度图像','旋转失败');endB直方图程序:set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);ifisrgb(handles.img)x=imhist(handles.img(:,:,3));%直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);%axis([02550150000]);set(handles.axes2,'xtick',0:50:255);%set(handles.axes2,'ytick',0:2000:15000);elsemsgbox('这是灰度图像','旋转失败');end8图12R直方图图13G直方图图14B直方图6)二值图像二值图像程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能转换为二值图像','转换失败');elsej=im2bw(x);imshow(j);end9图15彩图不可二值化图16二值化图像7)图像腐蚀程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能进行图像腐蚀','失败');elsej=im2bw(x);se=eye(5);bw=bwmorph(j,'erode');imshow(bw);end图17图像腐蚀8)创建索引图像程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能创建索引图像','创建失败');else10y=grayslice(x,16);axes(handles.axes2);imshow(y,jet(16));end图18索引图像9)RGB转HSV、NTSC、YCBCRRGB转HSV程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)HSV=rgb2hsv(x);imshow(HSV);elsemsgbox('这是灰度图像,不能转换','转换失败');endRGB转NTSC程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)ntsc=rgb2ntsc(x);imshow(ntsc);elsemsgbox('这是灰度图像,不能转换','转换失败');endRGB转YCBCR程序:axes(handles.axes2);x=(handles.img);ifisrgb(x)ycbcr=rgb2ycbcr(x);imshow(ycbcr);elsemsgbox('这是灰度图像,不能转换','转换失败');end11图19RGB转HSV图像图20RGB转NTSC图像图21RGB转YCBCR程序3结论在理工科的专业应用背景下,用matlab进行相关计算与仿真编程的优势非常突出。特定的问题处理算法,我们通常都以M文件的文本形式给定最终的解决方案,自己设计的程序是在MATLAB环境下,用MATLAB语言编写的,这对于有安装MATLAB软件的计算机上运行并不存在什么问题,关键是一般的计算机很少有去安装MATLAB软件的,那么要在这些机子上运行该程序要怎么办呢,难道要先安装MATLAB软件,这显然太麻烦了,对于一个通用的,比较成熟的解决方案,我们当然期望它能应用到更多的场合,而.exe(可执行)文件可运行于所有的通用WINDOWS操作系统,为此,将M文件转换成.exe文件倒是个不错的想法。12参考文献[1]郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京;电子工业出版社.[2]程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南[M].北京