• [学习一个] 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:UsersPublicPicturesSample Pictures');
         FirstImageFullPath = fullfile(ReadImagePathName,ReadImageFileName); 
        InputImage=imread(FirstImageFullPath);
    

    3.2.2 保存图片

    • uigetdir 选择文件(夹)
    • imwrite()保存文件
    • Code:
    [SaveImagePathName] = uigetdir('C:UsersPublicPicturesSample 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.

  • 相关阅读:
    drf项目部署到腾讯云
    ruby的DIR.pwd
    ruby+selenium-webdriver测试
    ruby
    ruby类对象和对象
    ruby的实例变量
    ruby在类中访问@,类外访问调用方法
    ruby中=>是什么意思
    ruby
    css content属性
  • 原文地址:https://www.cnblogs.com/shy-/p/8969893.html
Copyright © 2020-2023  润新知