博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习一个] Matlab GUI 学习笔记 Ⅰ
阅读量:4556 次
发布时间:2019-06-08

本文共 2742 字,大约阅读时间需要 9 分钟。

Matlab GUI 学习笔记 Ⅰ

1. Foreword


  • Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强大功能。因为选修了这1个学分的 Matlab GUI 设计,亦有人表达了对的一些情绪,便写上一些 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

万事的起源。

实现效果 :
394393-20180428231700769-1548637917.gif

3.2.1 打开图片

  • 选择文件(夹)
  • 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 保存图片

  • 选择文件(夹)
  • 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

实现效果 :

394393-20180428231910262-1722177617.gif

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

  • 实现效果:
    394393-20180428233030238-244360153.gif
  • 使用imrotata()函数
  • Code : ResultImage = imrotate(InputImage,90);

3.5 Scale

  • 实现效果:
    394393-20180428233423656-1284323851.gif
  • 使用resize()函数
  • Code : ResultImage=imresize(InputImage,1.5);

3.6 Clipping

个人认为最难的部分。

最终实现效果:
394393-20180428224716963-183073279.gif

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

实现效果:

394393-20180430081903698-1712543364.gif

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

你可能感兴趣的文章
异步加载JS的方法。
查看>>
golang-gorm框架支持mysql json类型
查看>>
【tool】白盒测试
查看>>
图论其一:图的存储
查看>>
20180923-WebService
查看>>
z变换
查看>>
Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数
查看>>
Spring基础2
查看>>
【灵异短篇】这个夜晚有点凉
查看>>
一点小问题
查看>>
pytest 10 skip跳过测试用例
查看>>
MVC身份验证及权限管理
查看>>
It was not possible to find any compatible framework version
查看>>
nodejs概述
查看>>
关于8.0.15版本的mysql下载与安装
查看>>
Redis主从复制看这篇就够了
查看>>
部署和调优 2.3 tomcat中JDK安装
查看>>
洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth 题解
查看>>
(4.20)SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧...
查看>>
基本数据类型(数字和字符串)
查看>>