[学习一个] 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()定位显示axes
  • imshow()显示图片
  • 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.

原文地址:https://www.cnblogs.com/shy-/p/8969893.html

时间: 2024-10-12 20:10:55

[学习一个] Matlab GUI 学习笔记 Ⅰ的相关文章

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

具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣,就学习下. 推荐学习视频网页:http://www.taikr.com/ 虽然要钱不过有免费的. http://study.163.com/course/introduction.htm?courseId=1002818014  游戏特效 - Unity3d特效基础 - 入门到精通(免费)  ht

线程异步学习(基于java学习笔记)

一 基本概念的理解 1.1线程中断方法 --interrupt() 当调用一个线程的interrupt方法时候,线程并没有真的被中断,只是对其状态改变,线程会有一个boolean变量isInterrputed.有wait sleep方法会阻塞线程. wait 和sleep方法都会使得线程挂起,阻塞.区别是wait会释放资源,而sleep方法并不会释放资源.一旦执行wait方法后,线程立即被挂起,直到有其他线程调用资源的notify方法.具体参见博客,多线程资源争用问题: http://blog.

ScalersTalk成长会机器学习小组-深度学习第3次学习笔记

第九章 前言 什么是卷积 神经网络里卷积的目的 什么是池化 卷积和池化的强先验 前言 卷积网络也叫卷积神经网络(或者CNN),是一种特殊的深层的神经网络模型,它适合于时间序列数据的处理和图像数据处理. 这章内容主要讨论内容: 什么是卷积 使用卷积的动机 什么是池化 用于实践中的神经网络的几个变化卷积函数 卷积如何应用于各种维度不同的数据 讨论一些如何使卷积神经更有效率 补充内容: 卷积神经网络的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的, 另一方面同一层中某些神经元之间的连接的权

(转)Matlab深度学习工具试玩手册一:基本操作与迁移学习

原贴博客:https://blog.csdn.net/zfrycw/article/details/80633979 目录 前言 一.利用现成网络进行分类 二.构建简单的分类网络 三.迁移学习 前言 Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG系列)进行迁移学习.作为一个初学者,我粗浅地认为,对于深度学习,我们实际的操作步骤可以分三大块:数据集(包括载入图片,制作训练集验证集,送入网络前

关于如何学习一个框架的经验总结

1.怎么学习一个框架? 我认为有三个维度来说明:这个框架是为了解决什么问题而诞生的?这个框架的核心思想是什么?这个框架适合应用到哪些场景? 说到思想,我觉得编程的灵魂就是思想,没有思想的编程和咸鱼没什么区别,这里我六年来血与泪的总结 2.不要被框架拉着走,要做框架的主人 我发现我身边好多人都深陷于框架之中,包括我自己有一段时间也深陷其中(还好现在走出来了),都关注在这个框架怎么用,哪个牛X,熟不知还没等你熟练怎么用时,又一个新的框架出来,那时你又得学,一来二去你就被框架拉着走了 我觉得当你了解上

compass General 常用api学习[Sass和compass学习笔记]

compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 float 造成的内容问题,以前用clear 方法可以解决,通过查看Clearfix 的源码发现对与高版本的浏览器其实已经可以不用了 ? 1 2 3 4 @mixin clearfix {   overflow: hidden;   @include has-layout; } 用overflow 就可以了

分分钟教你学习一个新的框架--Photos FrameWork

相关链接:ios-深度解析二维码的生成与使用 swfit项目初体验Photo-Browser 一.点击查看大图 1.点击图片或按钮(点击查看大图按钮),modal出来一个控制器,显示大图片 2.怎么处理能让点击图片就能查看大图? 两种方法:1.给图片添加点按手势 2.给图片所在的view上添加 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2.1 添加点按手势 优点:适用于任何场景下,不受

统计学习基础(HGL的读书笔记)

统计学习:统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也成为统计机器人学习[1]. 统计学习分类:有监督学习与无监督学习[2]. 统计学习三要素:模型.策略与算法[1]. 统计学习的对象:统计学习的对象是数据.统计学习从数据出发,提取数据的特征,抽取数据的模型,发现数据中的指示,又回到对数据的分析与预测中去[1]. 统计学习的目的:建立输入与输出的关系,评价输入与输出的关系,即Y = f(X) + ε.其中输入变量X可以称为预测变量.自变量.属性

N天学习一个Linux命令之帮助命令:man

前言 工作中每天都在使用常用的命令和非常用的命令,忘记了用法或者参数,都会bing一下,然后如此循环.一直没有真正的系统的深入的去了解命令的用法,我决定打破它.以前看到有人,每天学习一个linux命令,我现在没有这么充足时间,我恐怕一周学习一个linux命令我都做不到,想想我还是N天学习一个linux命令吧,从现在开始算起. 用途 显示命令帮助文档以及用法 用法 man [options] [section] cmd 命令文档部分说明 The table below shows the sect