- 概述
图形用于界面(Graphical User Interfaces,GUI)是提供人机交互的工具和方法。GUI是包含图形对象(如窗口、图标、菜单和文本)的用户界面。以某种方式选择或激活这些对象时,通常会引起动作或者发生变化。一个设计优秀的GUI能够非常直观的让用户知道如何操作MATLAB界面,并且了解设计者的开发意图。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB程序的GUI集成。这样可以使开发者不必理会一大堆烦杂的代码,简化程序,但是同样可以实现向决策者提供图文并茂的界面,甚至达到多媒体的效果。可以说MATLAB提供了一个简便的开发环境,可以让开发者快速上手,提高了开发者的工作效率。
- 完成任务
所谓的GUIDE就是图形用户界面开发环境(Graphical User Interface Development Environment),它向用户提供了一系列的创建用户图形界面的工具。这些工具大大简化了GUI设计和生成的过程。通过GUIDE完成一下任务:
1)用户可以通过菜单栏和按钮进行图像的读取,保存与退出。
2)设计图形用户界面,让用户能够通过按钮对图像进行灰度变化变成灰度图。
3)通过滑块,用户可以对图像的亮度进行调整
5) 通过按钮,用户可以查看图片的直方图。
6)能对图像加入各种椒盐噪声,并通过滤波法去除。
7)通过选项,用户可以查看图片的边缘检测图,界面中可供选择的检测方式有roberts、sobel、prewitt、log、canny五种,当用户选择orginal时显示原图。
三.设计过程
1.总体设计
通过GUIDE向导完成界面功能的布局,根据所需完成功能用户界面布局如下图1。
![9c0fc872d0aba04fa5d9195653dde1c2.png](https://i-blog.csdnimg.cn/blog_migrate/a68407546e6e5a2db2aa011426499dfe.png)
2.控件设计及程序实现
2.1 打开图片,保存图片,退出。拖拽三个个按钮放在合适的位置,双击按钮修改字体大小、颜色等,在function Open_Callback(hObject, eventdata, handles)函数下添加如下程序即可完成打开图片控件功能。
[filename,filepath]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif;*gif;*Image files'},'');
if isequal(filename,0)| |isequal(filepath,0)
return;
end
str =[filepath,filename];
x=imread(str);
axes(handles.axes1)
imshow(x);
在function Save_Callback(hObject, eventdata, handles)函数下添加如下程序即可完成保存图片控件功能。
global b
new_f_handle=figure('visible','off');
new_axes=copyobj(handles.axes2,new_f_handle); set(new_axes,'units','default','position','default');
[filename,pathname fileindex]=uiputfile({'*.jpg';'*.bmp';'*.png'},'save picture as');
if ~filename
return
else
file=strcat(pathname,filename);
switch fileindex
case 1
print(new_f_handle,'-djpeg',file);
case 2
print(new_f_handle,'-dbmp',file);
case 3
print(new_f_handle,'-dpng',file)
end
end
delete(new_f_handle);
在function Exit_Callback(hObject, eventdata, handles)函数下添加如下程序即可完成退出控件功能。
clc
close all
close(gcf)
clear
![574a0c7255157f2c17016f50bbeb2b8f.png](https://i-blog.csdnimg.cn/blog_migrate/c337b377395573d0ba524a822be2bc8e.png)
图2.1 打开一幅图
2.2.灰度变换按钮。
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。
在function Rgb2gray_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成灰度变化功能。
global x
axes(handles.axes2)
y=rgb2gray(x);
imshow(y);
![09b8911b8aed7547a61e19d0ada2dfd4.png](https://i-blog.csdnimg.cn/blog_migrate/3f3f5e6dfb25ac9465e30e1cd0da02c7.png)
图2.2 灰度变化图
2.3 图像增强。
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。可通过按钮“图像增强”或者滑块改变改变图像的强度。
在function Increase_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成图像增强按钮
global x
x1=imadjust(x,[0.3 0.7],[0 1],0.5);
axes(handles.axes2)
imshow(x1);
![16e92d7ffa6241cfcacef782e960be8b.png](https://i-blog.csdnimg.cn/blog_migrate/11ed0b6ad97d4f0ad0ca131b9e1ce019.png)
图2.3.1图像增强
在function Untitled_4_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成图像增强滑块
global x
value = get(handles.slider, 'Value');
x1=imadjust(x,[0.3 0.7],[0 1],'value');
axes(handles.axes2)
imshow(x1);
![5512695b913af9bcd924dcd7d3ffefb6.png](https://i-blog.csdnimg.cn/blog_migrate/2196d8f31cd4742098897397825c8726.png)
图2.3.2改变滑块图像
2.4 噪声抑制按钮
通过打开图片按钮打开一幅图片显示在左边区域,当用户点击噪声抑制时左边图显示家了椒盐噪声的图,右边区域显示噪声滤除后的图。在function Noise_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成。
global x
global p
y=rgb2gray(x);
p = imnoise(y,'salt & pepper',0.1); %加10%的椒盐
axes(handles.axes1);
imshow(p);
g=medfilt2(p);
axes(handles.axes2);
imshow(g);
![42c93337b6ee083387f95aa01d9530ca.png](https://i-blog.csdnimg.cn/blog_migrate/8457f6a24a7cd0808de9ed422faba19c.png)
图2.4 噪声抑制效果图
2.5 统计直方图按钮
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。用户通过该按钮显示图片的统计直方图。在function Compression_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成。
global x
h=rgb2gray(x);
axes(handles.axes2);
imhist(h);
![c373b40a58d13764fa6f8cb1d66c8887.png](https://i-blog.csdnimg.cn/blog_migrate/0b7f40879b7e4b65bc39ce40f4acc021.png)
图2.5 直方图显示
2.6 边缘检测选择
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。
用户选择选择不同的边缘检测方式,右侧显示不同的边缘图。
在function SlectchangeFuc_SelectionChangeFcn(hObject, eventdata, handles)函数下添加如下代码即可实现。
global x
global b
str=get(hObject,'string');
axes(handles.axes2);
y=rgb2gray(x);
dx=double(y);
switch str
case'Roberts'
R=edge(dx,'roberts');
imshow(R);
case'Sobel'
S=edge(dx,'sobel');
imshow(S);
case'Prewitt'
P=edge(dx,'prewitt');
imshow(P);
case'Log'
L=edge(dx,'log');
imshow(L);
case'Canny'
C=edge(dx,'canny');
imshow(C);
case'Orginal'
imshow(y);
end
![c0227e10a2a0a5740097cdc9da2be020.png](https://i-blog.csdnimg.cn/blog_migrate/078fb29fee0b2c9b8807b00133d6274c.png)
![50cdc4b9f929aa1515da95e151c14f77.png](https://i-blog.csdnimg.cn/blog_migrate/7eb4a69cb7c537fa147db718a2a77d32.png)
![89133891d853cb81345f90e2d30b96c8.png](https://i-blog.csdnimg.cn/blog_migrate/bb326315c39ce32a3ba92fe10845693b.png)
![07c1d79609be6ed12c15b5d4668b58aa.png](https://i-blog.csdnimg.cn/blog_migrate/391da14a1b350a614ea0c00be411a565.png)
![7c1cd941e2f438c49d43aa1ee90a96a1.png](https://i-blog.csdnimg.cn/blog_migrate/3e93192f40e6f05bc1b0542893c81bdf.png)