Matlab学习笔记(3)—GUI程序设计与图像处理基本操作

一.GUI程序设计
如果想要开始使用Matlab进行GUI编程,首先需要进入Matlab的GUI界面对GUI有一个基本的认识。
1.guide:创建或编辑UI文件

guide;% 会打开 GUIDE,这是一个 UI 设计环境。从“Quick Start”对话框中,您可以选
择打开以前创建的 UI 或使用其中一个模板创建新 UI
guide(filename);%在GUIDE中打开指定的 MATLAB® 图窗文件进行编辑。如果图窗文件不
在 MATLAB 路径上,请指定完整路径。一次只能打开一个 filename
guide(figs);%在 GUIDE 设计环境中使用单独的副本分别打开 figs 中的每个 Figure 对
象。如果要编辑 GUIDE 中已保存到变量的一个或多个预先存在的图窗,请使用此语法。


如上图所示,使用guide命令后,会出现GUI图形构件框和创建GUI程序

在出现的GUI图形界面里是Matlab公司为我们提供的相关构件,大家可以自己探索。设置好自己需要的图形构件后可以点击RUN则可以生成用户所要求的GUI界面。



可以使用对其设置使得所创建的图形构件进行对齐操作

2.关于GUI图形界面与GUI函数的练习
我们还可以改变图形构件的外观参数,注意Tag选项存放是该构件的标识符,用于程序可以识别出它所控制的是哪个按钮。

当按下UI界面的某一按钮构件后,会执行GUI程序下的callback函数


注意:用户插入callback函数的位置也有指定要求

练习一——构件如下GUI程序

滑动A和B滑块并显示计算出其加和
参考实现:
首先绘制出如下UI界面


注意将SLIDE构件中的MAX和MIN分别改为100和0


然后在就是在GUI程序中对应构件的callback处插入程序语句了

% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
%插入内容
a=get(handles.slider1,'value');%获取slide1当前的值
handles.myData1=a;%将a存入一个数据库中存储起来
guidata(hObject,handles);%将该数据存储好
b=get(handles.slider2,'value');%获取slider2当前的值value并赋予b
handles.myData2=b;
guidata(hObject,handles);
f=handles.myData2;%将myData2中的值赋于f
%b=get(handles.slider2,'value');
c=int16(a+f);%a+f后使用int16()函数变为整型变量
txt1=['A+B=',num2str(c)];%使用num2str()将数值抓换为字符串格式
set(handles.text8,'String',txt1);%使用set函数设置handles.text7中的String属性
%插入内容
% --- Executes during object creation, after setting all properties.
function slider1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end% --- Executes on slider movement.
function slider2_Callback(hObject, eventdata, handles)
% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
%插入内容
a=get(handles.slider1,'value');
handles.myData1=a;
guidata(hObject,handles);
b=get(handles.slider2,'value');
handles.myData2=b;
guidata(hObject,handles);
g=handles.myData1;
%a=get(handles.slider1,'value');
c=int16(g+b);
txt1=['A+B=',num2str(c)];
set(handles.text8,'String',txt1);
%插入内容
% --- Executes during object creation, after setting all properties.
function slider2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor',[.9 .9 .9]);
end

相关知识点:
1.存储UI构件的数据

guidata(obj,data);
data = guidata(obj);存储或检索 UI 数据
%如果 obj 是图窗,则 guidata(obj,data) 将指定的数据存储在其应用程序数据中;如
%果它是另一个组件,则存储在 obj 的父图窗的应用程序数据中。有关详细信息,请参阅
%guidata 如何管理数据。
%data = guidata(obj) 返回之前存储的数据,如果未存储任何内容,则返回空矩阵

2.int16():将数据转换为int16格式,整数

a=int16(c);%Convert fi object to signed 16-bit integer

3.num2str():将数值转换为字符串格式

s = num2str(A);%将数值数组转换为表示数字的字符数组。输出格式取决于原始值的量
%级。num2str 对使用数值为绘图添加标签和标题非常有用。
s = num2str(A,precision);%返回表示数字的字符数组,最大有效位数由 precision 指定。
s = num2str(A,formatSpec);%将 formatSpec 指定的格式应用到 A 所有元素。

程序执行效果:

接下来将GUI打包成exe格式,则可不依赖于matlab实现了,注意:有关使用神经网络构件的GUI程序打包成exe会出现问题
4.deploytool:打包GUI程序为exe

添加需要打包的程序

然后开始打包




二.图像处理基础操作
相关函数:
1.imread():从图形文件中读取图像

A = imread(filename);%从 filename 指定的文件读取图像,并从文件内容推断出其格
%式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。
A = imread(filename,fmt);%另外还指定具有 fmt 指示的标准文件扩展名的文件的格
%式。如果 imread 找不到具有 filename 指定的名称的文件,则会查找名为 filename.fmt 的文件。

2.imshow():显示图像

imshow(I);%在图窗中显示灰度图像 I。imshow 使用图像数据类型的默认显示范围,并优
%化图窗、坐标区和图像对象属性以便显示图像
imshow(I,[low high]);%显示灰度图像 I,以二元素向量 [low high] 形式指定显示范围。
imshow(RGB);%在图窗中显示真彩色图像 RGB。
imshow(BW);%在图窗中显示二值图像 BW。对于二值图像,imshow 将值为 0(零)的像素
%显示为黑色,将值为 1 的像素显示为白色



3.imtool():启动图像编辑器

imtool(I);%displays the grayscale image I in the Image Viewer app, using
%the default display range of the image data type.

图像的基本运算


5.immultiply():对图像做乘法

Z = immultiply(X,Y);%使得一个图像X点乘以另一个图像Y或点乘一个常数,结果为Z,
%注意:若Y为图像,则需与X相同尺寸大小


6.imadd():对图像做加法

Z = imadd(X,Y);%使得一个图像X的各项于图像Y的对应各项相加,或使其相加一个常数项
%Y,输出为Z


7.imhist():显示图像的直方图

[counts,binLocations] = imhist(I);%显示图像直方图,并返回counts(有多少个像素
bins),并返回binLocations(返回每个bins里的数目)。


8.histeq():使用直方图均衡增强对比度

J = histeq(I,n);%变换灰度图像 I,以使输出灰度图像 J 具有 n 个 bin 的直方图大致
%平坦。当 n 远小于 I 中的离散灰度级数时,J 的直方图更平坦。
J = histeq(I);%变换灰度图像 I,以使输出灰度图像 J 的直方图具有 64 个 bin 且大致平坦


9.imrotate():旋转图像

J = imrotate(I,angle);%旋转I图像angle角度


10.imwrite():将图像写入图形文件中

imwrite(A,filename);%将图像数据 A 写入 filename 指定的文件,并从扩展名推断出文件格式。imwrite 在当前文件夹中创建新文件。输出图像的位深取决于 A 的数据类型和文件格式。对于大多数格式来说:
如果 A 属于数据类型 uint8,则 imwrite 输出 8 位值。
如果 A 属于数据类型 uint16 且输出文件格式支持 16 位数据(JPEG、PNG 和 TIFF),则 imwrite 将输出 16 位的值。如果输出文件格式不支持 16 位数据,则 imwrite 返回错误。
如果 A 是灰度图像或者属于数据类型 double 或 single 的 RGB 彩色图像,则 imwrite 假设动态范围是 [0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
如果 A 属于 logical 数据类型,则 imwrite 会假定数据为二值图像并将数据写入位深为 1 的文件(如果格式允许)。BMP、PNG 或 TIFF 格式以输入数组形式接受二值图像。
如果 A 包含索引图像数据,则应另外指定 map 输入参数。


11.graythresh():使用 Otsu 方法计算全局图像阈值

T = graythresh(I);%使用 Otsu 方法 [1] 根据灰度图像 I 计算全局阈值 T。Otsu 方
%法选择一个阈值,使阈值化的黑白像素的类内方差最小化。全局阈值 T 可与 imbinarize
%结合使用以将灰度图像转换为二值图像

12.im2bw():基于阈值将图像转换为二值图像

BW = im2bw(I,level);%将灰度图像 I 转换为二值图像 BW,方法是将输入图像中亮度大
%于 level 的所有像素替换为值 1(白色),将所有其他像素替换为值 0(黑色)。
%此范围与图像的类的可能信号级别相关。因此,0.5 的 level 值对应于类的最小值和最大
%值之间的中等强度值。


13.imopen():开运算
开运算属于形态学图像处理bai,是先du腐蚀后膨胀,作用是:zhi可以使边界平滑,消除细小的尖刺,断开dao窄小的连接,保持面积大小不变等。

练习二—减小图像的亮度而不改变对比度

程序参考实现

clear;
I=imread('rice.png');
K=imadd(I,-20);%降低亮度而不改变对比度
subplot(2,2,1);
imhist(I);
subplot(2,2,2);
imshow(I);
J=imdivide(I,2);%改变亮度同时改变对比度
subplot(2,2,3);
imhist(K);
subplot(2,2,4);
imshow(K);

程序效果:

练习三—减小图像的亮度同时改变对比度

参考实现:

clear;
I=imread('rice.png');
K=imadd(I,-20);
subplot(2,2,1);
imhist(I);
subplot(2,2,2);
imshow(I);
J=imdivide(I,2);
subplot(2,2,3);
imhist(J);
subplot(2,2,4);
imshow(J);

程序效果:

练习四—自己构建增强对比度函数来增强图像的对比度

参考实现:
主程序:

clc;
clear;
I=imread('pout.tif');
Z=myOwnContrast(I,255,0);
subplot(1,2,1);
imshow(I);
%K=histeq(I); matlab自带增强对比度函数
subplot(1,2,2);
imshow(Z);

函数:

function Z=myOwnContrast(I,maxNew,minNew)
Z=uint8(zeros(size(I,1),size(I,2)));
for i=1:size(I,1)for j=1:size(I,2)Z(i,j)=((maxNew-minNew)/(max(max(I))-min(min(I))))*(I(i,j)-min(min(I)))...+minNew;end
end

程序效果:

练习三—不使用im2bw函数将图像转换成黑白图像

参考实现:

clc;
clear;
I=imread('pout.tif');
Z=uint8(zeros(size(I,1),size(I,2)));
%level=graythresh(I);
%Z=im2bw(I,level);for i=1:size(I,1)for j=1:size(I,2)if I(i,j)<=mean(mean(I))%以图像的均值作为阈值% if I(i,j)<=levelZ(i,j)=0;elseZ(i,j)=1;endendend
Z=logical(Z);
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imhist(I);
subplot(2,2,3);
imshow(Z)
subplot(2,2,4);
imhist(Z);

程序效果:

Matlab学习笔记(3)—GUI程序设计与图像处理基本操作相关推荐

  1. B站台湾大学郭彦甫|MATLAB 学习笔记|08 图像处理I Image Processing

    MATLAB学习笔记(08 图像处理I Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 08 1. 基本操作 读取图像 imread() 展示图像 imshow() ...

  2. 数字图像处理MATLAB学习笔记(五)

    数字图像处理MATLAB学习笔记(五) Color Image Processing 1 Color Image Representation in MATLAB 这里不多说了,彩色图片在计算机中以R ...

  3. B站台湾大学郭彦甫|MATLAB 学习笔记|09 图像处理II Image Processing

    MATLAB学习笔记(09 图像处理II Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 09 1. 提出问题 题目:如何找出图片中的米粒,并且确定他们的大小? 老师 ...

  4. B站台湾大学郭彦甫|MATLAB 学习笔记|07 Graphical user interface(GUI)设计

    MATLAB学习笔记(07 Graphical user interface(GUI)设计) 如果想获得更好浏览体验的朋友可以转到下面链接 07 (MATLAB R2021a版本提示GUIDE将在未来 ...

  5. 数字图像处理MATLAB学习笔记(一)

    数字图像处理MATLAB学习笔记(一) 灰度转换与空间滤波 本节主要使用Matlab语言进行灰度转换与空间滤波的使用 并对相关数学原理进行总结 1. Intensity Transformer Fun ...

  6. MATLAB学习笔记0:学习须知

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  7. MATLAB学习笔记2:MATLAB基础知识(下)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  8. MATLAB学习笔记5:绘图基础与数据可视化(中)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  9. MATLAB学习笔记3:MATLAB编程基础(前半)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

最新文章

  1. ubuntu14.04下出现libmysqlclient.so.20找不到问题
  2. 代码覆盖率工具 Istanbul 入门教程
  3. 2019知道c语言答案,2019年全国计算机二级C语言练习及答案四
  4. Java即时类| plus()方法与示例
  5. CV Code | 本周新出计算机视觉开源代码汇总(语义分割、目标检测、超分辨率、网络结构设计、训练策略等)...
  6. 超酷炫粒子背景插件—particles.js
  7. springboot之rabbitmq
  8. mac下安装mysql-pyhon_mac下安装MySQL-python模块
  9. Angular JS 列表修改
  10. ASPTODLL风火轮
  11. 中国首张5G电话卡推出,DMA基金会持续为5G助力。
  12. php怎么打印json数据,php输出json格式数据的例子
  13. 基于Xamarin移动测试云测试你的Android/iOS移动应用
  14. 一种APP和微信远程组态监控台达PLC的方案
  15. 微信小程序:动画效果集合
  16. firefox 邮箱分类过滤
  17. Unity 3D游戏五:打飞碟
  18. 数字图像/视频处理MATLAB基本操作
  19. 修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化
  20. Oracle Database 数据库

热门文章

  1. 「智子倒计时」成真?今年9月全面进入Wi-Fi 6时代
  2. Android之路-路漫漫其修远兮
  3. echarts 绘制 地图柱状图
  4. 健身用什么蓝牙耳机好、五款健身蓝牙耳机推荐
  5. Swift Intermediate Language
  6. js中报:TypeError: (intermediate value) is not a function错误
  7. 气压曲线软件 android,手机能当气压/海拔仪:Barometer Altimeter DashClock
  8. 追忆那些昙花一现的P2P平台
  9. Interview:算法岗位面试—11.14下午上海电***公司(国企)简单面试+技术一面之兴趣爱好、项目考察等
  10. 坚定融合网络 Qlogic心态开放广结伙伴