|
基于MATLAB GUI的数字图像措置系统
摘要:基于数字信号措置道理,在数字滤波器设计理论和Matlab 编程技术及其GUI 图形用户界面设计的基础上,开发了具有交互式特点的数字图像措置GUI软件,界面操作简单便利。
MATLAB既是一种直不雅观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用法式开发提供了最核心的数学和高级图形东西。按照它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。
MATLAB中集成了功能强大的图像措置东西箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单、更加符合科技人员对数学表达式的书写格式,而且可移植性好、可扩展性强,再加上此中有丰硕的图像措置函数,所以MATLAB在图像措置的应用中具有很大的优势。
关键词:MATLAB GUI;数字图像措置;图形用户界面
1 MATLAB的图像措置东西概述
MATLAB提供了多种图像措置函数,涵盖了图像措置的包罗近期研究成果在内的几乎所有的技术方式,图像措置东西箱函数有噪和退化图像的恢复、图形绘制、图形的代数与逻辑运算、图形几何变换、图像增强、图像复原、二值分析、小波分析和分形几何。在工程实际应用中灰度与二值图像的形态学运算;布局元素创建与措置;基于边缘的措置;色彩映射表操作;色彩空间变换;图像类型与类型转换;以及图形用户界面设计等。
2应用matlab东西箱进行图像分析措置
应用matlab的Gui文件对图片进行灰度措置,亮度措置,放大措置,翻转措置,噪声措置,图像二值化,图像直方图、频谱图,滤波器,图像腐蚀,创建索引图像,RGB转HSV,RGB转NTSC,RGB转YCBCR和图像通道措置。
图1 是GUI的最终设计界面,图2是工作时界面。
图1
图2
2.1图形措置方式介绍及其措置成果
图3是原图像,以下是实现的源法式及相关功能的部门注解:
global im; %定义全局变量
[name,path]=uigetfile({'*.jpg';'*.gif';'*.bmp'},'载入图像');
if isequal(name,0)|isequal(path,0)
errordlg('没有选中文件','犯错');
return;
else
x=imread([path,name]);%读取图片
axes(handles.axes1);%使用第一个axes
imshow(x);%显示图片
handles.img=x;
end
图3
图4为图像措置方式按钮:
图4
2.2法式调试
由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取此中的二维数据,实现方式法式为:
y=(handles.img(:,:,1)); %当然也可以选择(:,:,2) 或(:,:,3)
imshow(y);
但是这样的话,按照法式所选的分歧,图像数据也分歧,显示也就纷歧样。
另一种方式就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。法式为:
y=rgb2gray(handles.img);
imshow(y);
这个法式只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该法式时就会犯错,但是使用者在使用时有时并不知道这些,为了使该法式更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的法式如下:
if isrgb(handles.img)
y=rgb2gray(handles.img);
imshow(y);
else
msgbox('这已经是灰度图像','转换掉败');
end
如果原图是RGB,执行该操作的成果如图5:
图 5
如果原图本身已经是灰度图像了,执行该操作弹出如下图所示的提示对话框
用imadjust函数,其调用格式如下:
g=imadust(f,[low_in high_in],[low_out high_out]),gamma)
gamma 暗示映射性质,默认值是1 暗示线性映射。
由于该函数有五个参数需要输入,为了便操作户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_in high_in],[low_out high_out],gamma这五个参数,如下一组命令成立了如图所示的输入对话框:
prompt={'输入参数1','输入参数2','输入gamma'};
defans={'[0 0.7]','[0 1]','1'};
p=inputdlg(prompt,'输入参数',1,defans);
执行该操作,成果如下图:
图 6
上下翻转法式:axes(handles.axes2);
x=(handles.img);
if isrgb(handles.img)
for k=1:3
y(:,:,k)=flipud(x(:,:,k));%上下翻转函数
end
imshow(y);
else
x=(handles.img);
y=flipud(x);
imshow(y);
end
摆布翻转法式:axes(handles.axes2);
if isrgb(handles.img)
x=(handles.img);
for k=1:3
y(:,:,k)=fliplr(x(:,:,k));%摆布翻转函数
end
imshow(y);
else
x=(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 上下翻转
图 8 摆布翻转
图 9任意角度翻转
高斯噪声法式: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:'}; %对话框的设置,用户输入的是字符串
imshow(y);
handles.noise_img=y;
guidata(hObject,handles);
图10 高斯噪声
图11 椒盐噪声
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);
B直方图法式:set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
if isrgb(handles.img)
x=imhist(handles.img(:,:,3)); %直方图统计
x1=x(1:10:256);
horz=1:10:256;
bar(horz,x1);
%axis([0 255 0 150000]);
set(handles.axes2,'xtick',0:50:255);
%set(handles.axes2,'ytick',0:2000:15000);
else
msgbox('这是灰度图像','旋转掉败');
end
图12 R直方图
图13 G直方图
图14 B直方图
二值图像法式:axes(handles.axes2);
x=(handles.img);
if isrgb(x)
msgbox('这是彩色图像,不能转换为二值图像','转换掉败');
else
j=im2bw(x);
imshow(j);
end
图15 彩图不成二值化
图16 二值化图像
法式:axes(handles.axes2);
x=(handles.img);
if isrgb(x)
msgbox('这是彩色图像,不能进行图像腐蚀','掉败');
else
j=im2bw(x);
se=eye(5);
bw=bwmorph(j,'erode');
imshow(bw);
end
图17 图像腐蚀
法式:axes(handles.axes2);
x=(handles.img);
if isrgb(x)
msgbox('这是彩色图像,不能创建索引图像','创建掉败');
else
y=grayslice(x,16);
axes(handles.axes2);
imshow(y,jet(16));
end
图18 索引图像
RGB转HSV法式:axes(handles.axes2);
x=(handles.img);
if isrgb(x)
HSV=rgb2hsv(x);
imshow(HSV);
else
msgbox('这是灰度图像,不能转换','转换掉败');
end
RGB转NTSC法式:axes(handles.axes2);
x=(handles.img);
if isrgb(x)
ntsc=rgb2ntsc(x);
imshow(ntsc);
else
msgbox('这是灰度图像,不能转换','转换掉败');
end
RGB转YCBCR法式:axes(handles.axes2);
x=(handles.img);
图19 RGB转HSV图像
图20 RGB转NTSC图像
图21 RGB转YCBCR法式
3 结论
在理工科的专业应用布景下,用matlab 进行相关计算与仿真编程的优势非常突出。特定的问题措置算法,我们凡是都以M文件的文本形式给定最终的解决方案,本身设计的法式是在MATLAB环境下,用MATLAB语言编写的,这对于有安装MATLAB软件的计算机上运行并不存在什么问题,关键是一般的计算机很少有去安装MATLAB软件的,那么要在这些机子上运行该法式要怎么办呢,难道要先安装MATLAB软件,这显然太麻烦了,对于一个通用的,斗劲成熟的解决方案,我们当然期望它能应用到更多的场所,而.exe (可执行)文件可运行于所有的通用WINDOWS操作系统,为此,将M文件转换成.exe文件倒是个不错的想法。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|