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:
  1. [ReadImageFileName,ReadImagePathName,ReadImageFilterIndex] = uigetfile({'*.jpg;*.png;*.tif','ImageFile(*.jpg;*.png;*.tif)';...
  2. '*.jpg','JPEGImageFile(*.jpg)';'*.*','AllFile(*.*)'},'ReadImage',...
  3. 'MultiSelect','off',...
  4. 'C:\Users\Public\Pictures\Sample Pictures');
  5. FirstImageFullPath = fullfile(ReadImagePathName,ReadImageFileName);
  6. InputImage=imread(FirstImageFullPath);

3.2.2 保存图片

  • uigetdir 选择文件(夹)
  • imwrite()保存文件
  • Code:
  1. [SaveImagePathName] = uigetdir('C:\Users\Public\Pictures\Sample Pictures','请选择文件夹');
  2. filepath=fullfile(SaveImagePathName,'result.jpg');
  3. imwrite(ResultImage,filepath,'jpg');

3.2.3 显示图片

  • axes()定位显示axes
  • imshow()显示图片
  • Code:
  1. axes(findobj('tag', 'axes1'));
  2. InputImage=imread(FirstImageFullPath);
  3. imshow(InputImage);

3.3 Transition

实现效果 :

3.3.1 平移

  • imdilate()函数实现图像平移
  • Code:
  1. se=translate(strel(1),[100,100]);
  2. ResultImage=imdilate(InputImage,se);

3.3.2 用户交互

  • inputdlg()函数打开对话框与用户交互
  • 根据获得的返回值设置参数
  • 后文函数中涉及到用户交互部分略去
  • Code:
  1. defaulta={'100'};
  2. 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语句嵌套判断切换按钮标题:
  1. now = get(hObject,'String');
  2. if now == '剪切'
  3. set(hObject,'String','确定');
  4. else
  5. set(hObject,'String','剪切');
  6. end

3.6.2 剪切图像

  • 使用imrect()创建图像选区

    e.g.imrect(句柄,选区大小);
  • getPosition()获得位置
  • imcrop()剪辑图像
  • Code:
  1. h=imrect(handles.axes1, [10 10 100 100]);
  2. pos=getPosition(h);
  3. ResultImage=imcrop(InputImage, pos);

3.6.3 其他功能

  • getAPI()获得函数句柄
  • addNewPositionCallback()添加监听器
  • makeConstrainToRectFcn()监听器事件
  1. api = iptgetapi(h);
  2. api.addNewPositionCallback(@(p) title(mat2str(p,3))); %标题显示选区大小
  3. fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim'));
  4. 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 学习笔记 Ⅰ的更多相关文章

  1. Matlab GUI学习总结

    从简单的例子说起吧.   创建Matlab GUI界面通常有两种方式:   1,使用 .m 文件直接动态添加控件     2.  使用 GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合 ...

  2. Matlab 进阶学习记录

    最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal  =  proposal_config('image_means', ...

  3. [0403]学习一个——苟(简单Java开发)

    学习一个--苟 1. 开发目的 拜读了某神犇的blog,感到了自身深深的不足.蒟蒻如我,决定提高一蛤自身的姿势水平,学习一个,使用Java重写用GreatestLanguage写的某小说网站的抓取器. ...

  4. 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?

    具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...

  5. Java学习之AWT GUI编程

    Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...

  6. Java学习之Swing Gui编程

    Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...

  7. 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin

    原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...

  8. 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】

    最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...

  9. FPGA一个博客学习

    FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM

随机推荐

  1. Locust 分布式测试

    转:http://www.testclass.net/locust/distributed/ 参考:官方文档 分布式运行Locust 一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器 ...

  2. 【转载】unittest参数化(paramunittest)

    前言 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 前面讲数据驱动的时候,用ddt可以解决多组数据传入,自动生成多个测试用例.本篇继续介绍 ...

  3. linux下卸载mysql(rpm)

    linux下卸载mysql 查看是否安装了mysql的组件 rpm –qa |grep –I mysql 卸载前关闭mysql服务 service mysql status service mysql ...

  4. 使用SpringBoot的优势。

    Spring Boot 让开发变得更简单 Spring Boot 对开发效率的提升是全方位的,我们可以简单做一下对比: 在没有使用 Spring Boot 之前我们开发一个 web 项目需要做哪些工作 ...

  5. windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2

    windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2 1.官网下载python3.6.2https://www.python.org/ftp/p ...

  6. linux 3

    -- Linux -- 开心的一天 vi    所有的 unix like 系统都会内置 vi 文本编辑器 vim 较多使用的,可以主动的以字体颜色辨别语法的正确性,方便程序设计 vi/vim 的使用 ...

  7. AtCoder Beginner Contest 044 B - 美しい文字列 / Beautiful Strings

    Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement Let w be a string cons ...

  8. 利用Oracle GoldenGate记录源系统所有表的操作

    通过goldengate,可以实现目标表和源表不同结构之间的实时复制,包括记录源系统所有表的变更操作,供ETL或其它审计系统使用. 记录信息包括表名.操作时间.操作SCN,事务标记,操作类型到一个流水 ...

  9. css相关知识点

    一.CSS的引入方式 1.1 css的介绍 HTML:超文本标记语言.从语义的角度描述页面结构. CSS:层叠样式表.从审美的角度负责页面样式. JS:JavaScript .从交互的角度描述页面行为 ...

  10. Git 常用命令列表

    1 常用 $ git remote add origin git@github.com:yeszao/dofiler.git # 配置远程git版本库 $ git pull origin master ...