基于MATLAB-GUI的数字图像处理
[*]概述
图形用于界面(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。
图1用户功能界面
2.控件设计及程序实现
2.1 打开图片,保存图片,退出。拖拽三个个按钮放在合适的位置,双击按钮修改字体大小、颜色等,在function Open_Callback(hObject, eventdata, handles)函数下添加如下程序即可完成打开图片控件功能。
=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif;*gif;*Image files'},'');
if isequal(filename,0)| |isequal(filepath,0)
return;
end
str =;
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');
=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
图2.1 打开一幅图
2.2.灰度变换按钮。
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。
在function Rgb2gray_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成灰度变化功能。
global x
axes(handles.axes2)
y=rgb2gray(x);
imshow(y);
图2.2 灰度变化图
2.3 图像增强。
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。可通过按钮“图像增强”或者滑块改变改变图像的强度。
在function Increase_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成图像增强按钮
global x
x1=imadjust(x,,,0.5);
axes(handles.axes2)
imshow(x1);
图2.3.1图像增强
在function Untitled_4_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成图像增强滑块
global x
value = get(handles.slider, 'Value');
x1=imadjust(x,,,'value');
axes(handles.axes2)
imshow(x1);
图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);
图2.4 噪声抑制效果图
2.5 统计直方图按钮
先读取一幅图片显示在左边区域,通过按钮将灰度图显示在右边域。用户通过该按钮显示图片的统计直方图。在function Compression_Callback(hObject, eventdata, handles)函数下添加如下代码即可完成。
global x
h=rgb2gray(x);
axes(handles.axes2);
imhist(h);
图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
图2.6.1 Robrets检测
图2.6.2 Soble检测
图2.6.3 Canny检测
图2.6.4 Log检测
图2.6.5 Perwitt检测
页:
[1]