[学习一个] Matlab GUI 学习笔记 Ⅰ
Matlab GUI 学习笔记 Ⅰ
1. Foreword
- Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强大功能。因为选修了这1个学分的 Matlab GUI 设计,亦有人表达了对Previous Matlab Blog的一些情绪,便写上一些 Matlab GUI 编程学习的心得。
- 标题虽为Matlab GUI 学习笔记 Ⅰ,亦可成为称为图像处理技术应用实践 - 课程设计 1 指北。
- 本文所用环境为 Matlab R2018a 中文版。
2. Task
- 自学Matlab GUI编程,设计并实现一个图像空间变换系统。
- 要求:
- 能对图像进行平移、旋转、缩放、剪切、投影、仿射、变换以及各种复合变换;
- 能将各种变换后结果保存为图像文件;
- 各种变换可以采用按钮或者菜单的方式进行;
- 变换时的用户可以自行设置简单的变换参数。
3. Function
3.1 Create
- 在命令行窗口中输入
guide
选择新建 GUI 标签 Blank GUI(Default) - 中文版汉化的比较完整,左侧工具条中所有选项对应的控件都有其中文名称。
- 在面板上右击 -> 检查器 -> Name 即可修改窗体标题
- 主要用到AXES、BUTTON控件
3.2 File
万事的起源。
实现效果 :
3.2.1 打开图片
- uigetdir 选择文件(夹)
imread()
读入图像- Code:
[ReadImageFileName,ReadImagePathName,ReadImageFilterIndex] = uigetfile({'*.jpg;*.png;*.tif','ImageFile(*.jpg;*.png;*.tif)';...
'*.jpg','JPEGImageFile(*.jpg)';'*.*','AllFile(*.*)'},'ReadImage',...
'MultiSelect','off',...
'C:\Users\Public\Pictures\Sample Pictures');
FirstImageFullPath = fullfile(ReadImagePathName,ReadImageFileName);
InputImage=imread(FirstImageFullPath);
3.2.2 保存图片
- uigetdir 选择文件(夹)
imwrite()
保存文件- Code:
[SaveImagePathName] = uigetdir('C:\Users\Public\Pictures\Sample Pictures','请选择文件夹');
filepath=fullfile(SaveImagePathName,'result.jpg');
imwrite(ResultImage,filepath,'jpg');
3.2.3 显示图片
axes()
定位显示axesimshow()
显示图片- Code:
axes(findobj('tag', 'axes1'));
InputImage=imread(FirstImageFullPath);
imshow(InputImage);
3.3 Transition
实现效果 :
3.3.1 平移
imdilate()
函数实现图像平移- Code:
se=translate(strel(1),[100,100]);
ResultImage=imdilate(InputImage,se);
3.3.2 用户交互
inputdlg()
函数打开对话框与用户交互- 根据获得的返回值设置参数
- 后文函数中涉及到用户交互部分略去
- Code:
defaulta={'100'};
a=inputdlg('请输入x轴参数','',1,defaulta);
3.4 rotate
- 实现效果:
- 使用
imrotata()
函数 - Code :
ResultImage = imrotate(InputImage,90);
3.5 Scale
- 实现效果:
- 使用
resize()
函数 - Code :
ResultImage=imresize(InputImage,1.5);
3.6 Clipping
个人认为最难的部分。
最终实现效果:
3.6.1 按钮交互
get(hObject,'String');
返回值为按钮的标题set(hObject,'String','ChangeToTitle');
改变按钮的标题- 使用if语句嵌套判断切换按钮标题:
now = get(hObject,'String');
if now == '剪切'
set(hObject,'String','确定');
else
set(hObject,'String','剪切');
end
3.6.2 剪切图像
- 使用
imrect()
创建图像选区
e.g.imrect(句柄,选区大小); getPosition()
获得位置imcrop()
剪辑图像- Code:
h=imrect(handles.axes1, [10 10 100 100]);
pos=getPosition(h);
ResultImage=imcrop(InputImage, pos);
3.6.3 其他功能
getAPI()
获得函数句柄addNewPositionCallback()
添加监听器makeConstrainToRectFcn()
监听器事件
api = iptgetapi(h);
api.addNewPositionCallback(@(p) title(mat2str(p,3))); %标题显示选区大小
fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim'));
api.setPositionConstraintFcn(fcn); %防止选区超出axes范围
3.7 Projection
实现效果:
3.7.1 提问框交互
questdlg(Title,Text,choice,...,DafaultChoice)
提问框函数- Code :
s = questdlg('请选择投影方式','参数','垂直','水平','垂直水平','垂直');
3.7.2 投影
- 见书。
- 参考
3.8 Affine & Transformation & ... & Postscript
No longer.
[学习一个] Matlab GUI 学习笔记 Ⅰ的更多相关文章
- Matlab GUI学习总结
从简单的例子说起吧. 创建Matlab GUI界面通常有两种方式: 1,使用 .m 文件直接动态添加控件 2. 使用 GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合 ...
- Matlab 进阶学习记录
最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal = proposal_config('image_means', ...
- [0403]学习一个——苟(简单Java开发)
学习一个--苟 1. 开发目的 拜读了某神犇的blog,感到了自身深深的不足.蒟蒻如我,决定提高一蛤自身的姿势水平,学习一个,使用Java重写用GreatestLanguage写的某小说网站的抓取器. ...
- 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?
具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...
- Java学习之AWT GUI编程
Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...
- Java学习之Swing Gui编程
Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...
- 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...
- 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】
最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...
- FPGA一个博客学习
FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM
随机推荐
- 编程中的链式调用:Scala示例
编程中的链式调用与Linux Shell 中的管道类似.Linux Shell 中的管道 ,会将管道连接的上一个程序的结果, 传递给管道连接的下一个程序作为参数进行处理,依次串联起N个实用程序形成流水 ...
- PIVOT(透视转换)和UNPIVOT(逆透视转换)
一.原数据状态 二.手动写透视转换1 三.手动写透视转换2 四.PIVOT(透视转换)和UNPIVOT(逆透视转换)详细使用 使用标准SQL进行透视转换和逆视转换 --行列转换 create tabl ...
- SEO三种职位类型:编辑型SEO、技术型SEO、营销型SEO详解
SEO三种职位类型:编辑型SEO.技术型SEO.营销型SEO详解 网站SEO优化作为营销端的服务之一,这些年也呈现出日新月异的格局.一改过去游兵散将式的小作坊生产模式,不断有力量强大的公司团体加入到这 ...
- Linux下MySQL远程链接配置
配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...
- 怎样从外网访问内网Tomcat?
本地安装了一个Tomcat,只能在局域网内访问,怎样从外网也能访问到本地的Tomcat呢?本文将介绍具体的实现步骤. 准备工作 安装并启动Tomcat 默认安装的Tomcat端口是8080. 实现步骤 ...
- Python进阶【第四篇】函数
一.变量 变量是记录一系列状态变化的量 1.变量分为可变类型与不可变类型——可变 与不可变是根据变量在内存中占据的位置 可变类型:列表list[ ].字典dicta{ } 不可变类型:字符串str.数 ...
- MyEclipse中项目运行时发生了Tomcat报错:[java.lang.OutOfMemoryError: PermGen space]
Tomcat内存溢出,异常信息如下: 十一月 26, 2017 1:52:26 下午 org.apache.catalina.core.ContainerBase$ContainerBackgroun ...
- GMIS 2017 大会陈雨强演讲:机器学习模型,宽与深的大战
https://blog.csdn.net/starzhou/article/details/72819374 2017-05-27 19:15:36 GMIS 2017 10 0 5 ...
- RedisLive安装
环境安装 Python2.7 [root@ ~]# yum install -y readline readline-devel [root@ ~]# yum install sqlite-devel ...
- spring使用@Autowired为抽象父类注入依赖
有时候为了管理或者避免不一致性,希望具体服务统一继承抽象父类,同时使用@Autowired为抽象父类注入依赖.搜了了网上,有些解决方法实现实在不敢恭维,靠子类去注入依赖,那还有什么意义,如下: 父类: ...