使用MATLAB从图片中提取曲线数据

 用MATLAB 2017b GUI写的一款小工具。

无论是课堂、会议上随手拍的照片,还是阅读文献的截图,很快可以提取到曲线的原始数据点作为学习研究的参考。


主要思路是:

1)预处理:裁剪选区、透视变换(交互式点击四个角点)

      % 得到以坐标轴为边界的矩形图像

2)坐标变换:输入X、Y轴起始坐标,选择坐标类型(可选择线性坐标系或者对数坐标系);

     % 将像素坐标转换为图片坐标

3)点击目标曲线上任一点自动识别颜色并分割,灰度图像直接阈值分割;

     % 除目标曲线外全部清空

4)输入希望得到的数据点数,自动等间距捕捉曲线上的点;

     % 等间距扫描取相应点数

5)导出所捕获点的EXCEL数据表。

     % 所有数据点存储在EXCEL中

涉及到一些线性代数和数字图像的知识,基本都是经典的图像算法,为了交互友好自己添加了一些 “算子” 做成了Slider。

直接上例子:

(1)随手画的一张,测试透视变换、图像分割、去噪效果。

(2)测试目标颜色过滤效果。

(3)复杂曲线数据点生成测试。

(4)复杂曲线颜色过滤测试

 

处理结果比对:

(1)

 

(2)

 

 点击选择蓝色曲线所得结果。

(3)

 

(4)

 

 以下是Matlab GUI代码。

classdef Graph2Data < matlab.apps.AppBase

    % Properties that correspond to app components
    properties (Access = public)
        Graph2DataUIFigure         matlab.ui.Figure
        TabGroup                   matlab.ui.container.TabGroup
        Tab                        matlab.ui.container.Tab
        CoordinateSystemPanel      matlab.ui.container.Panel
        X_StartEditFieldLabel      matlab.ui.control.Label
        X_StartEditField           matlab.ui.control.NumericEditField
        X_EndEditFieldLabel        matlab.ui.control.Label
        X_EndEditField             matlab.ui.control.NumericEditField
        Y_EndEditFieldLabel        matlab.ui.control.Label
        Y_EndEditField             matlab.ui.control.NumericEditField
        Y_StartEditFieldLabel      matlab.ui.control.Label
        Y_StartEditField           matlab.ui.control.NumericEditField
        XscaleTypeButtonGroup      matlab.ui.container.ButtonGroup
        LinearButton               matlab.ui.control.RadioButton
        LogarithmicButton          matlab.ui.control.RadioButton
        YscaleTypeButtonGroup      matlab.ui.container.ButtonGroup
        LinearButton_2             matlab.ui.control.RadioButton
        LogarithmicButton_2        matlab.ui.control.RadioButton
        ClearAllButton             matlab.ui.control.Button
        PrepareImagePanel          matlab.ui.container.Panel
        CropButton                 matlab.ui.control.Button
        LoadButton                 matlab.ui.control.Button
        PerspectiveButton          matlab.ui.control.Button
        Tab2                       matlab.ui.container.Tab
        UndoButton                 matlab.ui.control.Button
        ColorSegmentationPanel     matlab.ui.container.Panel
        TargetButton               matlab.ui.control.Button
        H_FactorSliderLabel        matlab.ui.control.Label
        H_FactorSlider             matlab.ui.control.Slider
        S_FactorSliderLabel        matlab.ui.control.Label
        S_FactorSlider             matlab.ui.control.Slider
        V_FactorSliderLabel        matlab.ui.control.Label
        V_FactorSlider             matlab.ui.control.Slider
        GraySegmentationPanel      matlab.ui.container.Panel
        ThresholdingButton         matlab.ui.control.Button
        FactorSliderLabel          matlab.ui.control.Label
        FactorSlider               matlab.ui.control.Slider
        CleanButton                matlab.ui.control.Button
        RefreshButton              matlab.ui.control.Button
        Tab3                       matlab.ui.container.Tab
        GetDataPanel               matlab.ui.container.Panel
        SaveAsButton               matlab.ui.control.Button
        PointNumberEditFieldLabel  matlab.ui.control.Label
        PointNumberEditField       matlab.ui.control.NumericEditField
        PlotButton                 matlab.ui.control.Button
        PleaseenteranINTEGERLabel  matlab.ui.control.Label
        UIAxes                     matlab.ui.control.UIAxes
        Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel  matlab.ui.control.Label
    end

    properties (Access = public)
        Image % Description
        Image_hsv
        Image_target
        Image_target_hsv
        row
        col
        x_target % Description
        y_target
        xOriginal
        yOriginal
        xFinal
        yFinal
        data
    end

    methods (Access = private)

        % Button pushed function: CleanButton
        function CleanButtonPushed(app, event)
            imshow(app.Image_target);
            mask = roipoly(app.Image_target);
            close;
            [r_mask c_mask] = find(mask==1);
            app.Image_target(r_mask,c_mask,1)=255;
            app.Image_target(r_mask,c_mask,2)=255;
            app.Image_target(r_mask,c_mask,3)=255;
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: ClearAllButton
        function ClearAllButtonPushed(app, event)
            app.Image = [];   % Clear Image  
            imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: CropButton
        function CropButtonPushed(app, event)
            app.Image = imcrop(app.Image);
            close;
            imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Value changed function: FactorSlider
        function FactorSliderValueChanged(app, event)
            value = app.FactorSlider.Value;
            threshold = graythresh(app.Image)+app.FactorSlider.Value;
            app.Image_target = im2bw(app.Image,threshold);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Value changed function: H_FactorSlider
        function H_FactorSliderValueChanged(app, event)
            value = app.H_FactorSlider.Value;
            app.Image_hsv = rgb2hsv(app.Image);
            app.Image_target = 255*ones(size(app.Image));
            app.Image_target_hsv = rgb2hsv(app.Image_target);
            H = app.Image_hsv(:,:,1);
            S = app.Image_hsv(:,:,2);
            V = app.Image_hsv(:,:,3);
            [app.row, app.col] = ind2sub(size(app.Image_hsv),find(app.Image_hsv(:,:,1)>H(app.x_target,app.y_target)-app.H_FactorSlider.Value & app.Image_hsv(:,:,1)< H(app.x_target,app.y_target)+app.H_FactorSlider.Value & app.Image_hsv(:,:,2)>S(app.x_target,app.y_target)-app.S_FactorSlider.Value & app.Image_hsv(:,:,3)>V(app.x_target,app.y_target)-app.V_FactorSlider.Value));
            for i = 1 : length(app.row)
                app.Image_target_hsv(app.row(i),app.col(i),:) = app.Image_hsv(app.row(i),app.col(i),:);
            end
            app.Image_target = hsv2rgb(app.Image_target_hsv);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: LoadButton
        function LoadButtonPushed(app, event)
            [file,path] = uigetfile('*.jpg;*.jpeg;*.png');
            app.Image = imread(fullfile(path,file));
            imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: PerspectiveButton
        function PerspectiveButtonPushed(app, event)
            imshow(app.Image);
            %set(gcf,'outerposition',get(0,'screensize'));
            dot = ginput(4);
            weight = round(sqrt((dot(1,1)-dot(2,1))^2+(dot(1,2)-dot(2,2))^2));
            height = round(sqrt((dot(1,1)-dot(3,1))^2+(dot(1,2)-dot(3,2))^2));
            X=[dot(1,2) dot(1,2)+weight dot(1,2) dot(1,2)+weight];
            Y=[dot(1,1) dot(1,1) dot(1,1)+height dot(1,1)+height];
            base = [X(1) Y(1);X(2) Y(2);X(3) Y(3);X(4) Y(4)];
            tform = cp2tform(dot,base,'projective');
            app.Image = imtransform(app.Image,tform,'XData',[X(1) X(2)],'YData',[Y(1) Y(4)]);
            close;
            imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: PlotButton
        function PlotButtonPushed(app, event)
            % app.X_StartEditField.Value
            % app.X_EndEditField.Value
            % app.Y_StartEditField.Value
            % app.Y_EndEditField.Value
            % app.PointNumberEditField.Value
            weight = size(app.Image,2);
            height = size(app.Image,1);
            % number = round(app.PointNumberSlider.Value);
            interval = floor(weight/app.PointNumberEditField.Value);
            app.xOriginal = [];
            app.yOriginal = [];
            if interval == 0
                for i = 1:1:weight
                    colum = app.Image(:,i);
                    index = sort(find(colum == 0));
                    if isempty(index) == 0
                       app.xOriginal = [app.xOriginal i];
                       app.yOriginal = [app.yOriginal index(1)+floor(length(index)/2)];
                    end
                end
            else
                for i = 1:interval:weight
                    colum = app.Image(:,i);
                    index = sort(find(colum == 0));
                    if isempty(index) == 0
                       app.xOriginal = [app.xOriginal i];
                       app.yOriginal = [app.yOriginal index(1)+floor(length(index)/2)];
                    end
                end
            end
            app.yOriginal = height-app.yOriginal;
            app.xFinal = (app.xOriginal./weight).*(app.X_EndEditField.Value-app.X_StartEditField.Value)+app.X_StartEditField.Value;
            app.yFinal = (app.yOriginal./height).*(app.Y_EndEditField.Value-app.Y_StartEditField.Value)+app.Y_StartEditField.Value;
            plot(app.xFinal,app.yFinal,'.');
        end

        % Value changed function: PointNumberEditField
        function PointNumberEditFieldValueChanged(app, event)
            value = app.PointNumberEditField.Value;
        end

        % Button pushed function: RefreshButton
        function RefreshButtonPushed(app, event)
            app.Image = app.Image_target;
        end

        % Value changed function: S_FactorSlider
        function S_FactorSliderValueChanged(app, event)
            value = app.S_FactorSlider.Value;
            app.Image_hsv = rgb2hsv(app.Image);
            app.Image_target = 255*ones(size(app.Image));
            app.Image_target_hsv = rgb2hsv(app.Image_target);
            H = app.Image_hsv(:,:,1);
            S = app.Image_hsv(:,:,2);
            V = app.Image_hsv(:,:,3);
            [app.row, app.col] = ind2sub(size(app.Image_hsv),find(app.Image_hsv(:,:,1)>H(app.x_target,app.y_target)-app.H_FactorSlider.Value & app.Image_hsv(:,:,1)< H(app.x_target,app.y_target)+app.H_FactorSlider.Value & app.Image_hsv(:,:,2)>S(app.x_target,app.y_target)-app.S_FactorSlider.Value & app.Image_hsv(:,:,3)>V(app.x_target,app.y_target)-app.V_FactorSlider.Value));
            for i = 1 : length(app.row)
                app.Image_target_hsv(app.row(i),app.col(i),:) = app.Image_hsv(app.row(i),app.col(i),:);
            end
            app.Image_target = hsv2rgb(app.Image_target_hsv);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: SaveAsButton
        function SaveAsButtonPushed(app, event)
            app.data = [app.xFinal' app.yFinal'];
            xlswrite('C:\Users\BAR\Desktop\data_sheet_001.xlsx',app.data);
            winopen('C:\Users\BAR\Desktop\data_sheet_001.xlsx');
        end

        % Button pushed function: TargetButton
        function TargetButtonPushed(app, event)
            app.Image_hsv = rgb2hsv(app.Image);
            app.Image_target = 255*ones(size(app.Image));
            app.Image_target_hsv = rgb2hsv(app.Image_target);
            H = app.Image_hsv(:,:,1);
            S = app.Image_hsv(:,:,2);
            V = app.Image_hsv(:,:,3);
            imshow(app.Image);
            [app.y_target app.x_target] = ginput(1);
            app.x_target = round(app.x_target);
            app.y_target = round(app.y_target);
            close;
            [app.row, app.col] = ind2sub(size(app.Image_hsv),find(app.Image_hsv(:,:,1)>H(app.x_target,app.y_target)-app.H_FactorSlider.Value & app.Image_hsv(:,:,1)< H(app.x_target,app.y_target)+app.H_FactorSlider.Value & app.Image_hsv(:,:,2)>S(app.x_target,app.y_target)-app.S_FactorSlider.Value & app.Image_hsv(:,:,3)>V(app.x_target,app.y_target)-app.V_FactorSlider.Value));
            for i = 1 : length(app.row)
                app.Image_target_hsv(app.row(i),app.col(i),:) = app.Image_hsv(app.row(i),app.col(i),:);
            end
            app.Image_target = hsv2rgb(app.Image_target_hsv);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: ThresholdingButton
        function ThresholdingButtonPushed(app, event)
            threshold = graythresh(app.Image);
            app.Image_target = im2bw(app.Image,threshold);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Button pushed function: UndoButton
        function UndoButtonPushed(app, event)
            imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Value changed function: V_FactorSlider
        function V_FactorSliderValueChanged(app, event)
            value = app.V_FactorSlider.Value;
            app.Image_hsv = rgb2hsv(app.Image);
            app.Image_target = 255*ones(size(app.Image));
            app.Image_target_hsv = rgb2hsv(app.Image_target);
            H = app.Image_hsv(:,:,1);
            S = app.Image_hsv(:,:,2);
            V = app.Image_hsv(:,:,3);
            [app.row, app.col] = ind2sub(size(app.Image_hsv),find(app.Image_hsv(:,:,1)>H(app.x_target,app.y_target)-app.H_FactorSlider.Value & app.Image_hsv(:,:,1)< H(app.x_target,app.y_target)+app.H_FactorSlider.Value & app.Image_hsv(:,:,2)>S(app.x_target,app.y_target)-app.S_FactorSlider.Value & app.Image_hsv(:,:,3)>V(app.x_target,app.y_target)-app.V_FactorSlider.Value));
            for i = 1 : length(app.row)
                app.Image_target_hsv(app.row(i),app.col(i),:) = app.Image_hsv(app.row(i),app.col(i),:);
            end
            app.Image_target = hsv2rgb(app.Image_target_hsv);
            imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');
        end

        % Value changed function: X_EndEditField
        function X_EndEditFieldValueChanged(app, event)
            value = app.X_EndEditField.Value;
        end

        % Value changed function: X_StartEditField
        function X_StartEditFieldValueChanged(app, event)
            value = app.X_StartEditField.Value;     
        end

        % Selection changed function: XscaleTypeButtonGroup
        function XscaleTypeButtonGroupSelectionChanged(app, event)
            selectedButton = app.XscaleTypeButtonGroup.SelectedObject;
        end

        % Value changed function: Y_EndEditField
        function Y_EndEditFieldValueChanged(app, event)
            value = app.Y_EndEditField.Value;
        end

        % Value changed function: Y_StartEditField
        function Y_StartEditFieldValueChanged(app, event)
            value = app.Y_StartEditField.Value;     
        end

        % Selection changed function: YscaleTypeButtonGroup
        function YscaleTypeButtonGroupSelectionChanged(app, event)
            selectedButton = app.YscaleTypeButtonGroup.SelectedObject;
        end
    end

    % App initialization and construction
    methods (Access = private)

        % Create UIFigure and components
        function createComponents(app)

            % Create Graph2DataUIFigure
            app.Graph2DataUIFigure = uifigure;
            app.Graph2DataUIFigure.Color = [0.9412 0.9412 0.9412];
            app.Graph2DataUIFigure.Position = [300 50 960 750];
            app.Graph2DataUIFigure.Name = 'Graph2Data';

            % Create TabGroup
            app.TabGroup = uitabgroup(app.Graph2DataUIFigure);
            app.TabGroup.Position = [1 631 960 120];

            % Create Tab
            app.Tab = uitab(app.TabGroup);
            app.Tab.Title = 'Tab';
            app.Tab.BackgroundColor = [0.9412 0.9412 0.9412];

            % Create CoordinateSystemPanel
            app.CoordinateSystemPanel = uipanel(app.Tab);
            app.CoordinateSystemPanel.TitlePosition = 'centertop';
            app.CoordinateSystemPanel.Title = 'Coordinate   System';
            app.CoordinateSystemPanel.BackgroundColor = [0.9412 0.9412 0.9412];
            app.CoordinateSystemPanel.FontName = 'Microsoft YaHei UI';
            app.CoordinateSystemPanel.Position = [261 0 560 96];

            % Create X_StartEditFieldLabel
            app.X_StartEditFieldLabel = uilabel(app.CoordinateSystemPanel);
            app.X_StartEditFieldLabel.VerticalAlignment = 'center';
            app.X_StartEditFieldLabel.FontName = 'Microsoft YaHei UI';
            app.X_StartEditFieldLabel.Position = [21 48 46 15];
            app.X_StartEditFieldLabel.Text = 'X_Start';

            % Create X_StartEditField
            app.X_StartEditField = uieditfield(app.CoordinateSystemPanel, 'numeric');
            app.X_StartEditField.ValueChangedFcn = createCallbackFcn(app, @X_StartEditFieldValueChanged, true);
            app.X_StartEditField.Position = [81 44 58 22];

            % Create X_EndEditFieldLabel
            app.X_EndEditFieldLabel = uilabel(app.CoordinateSystemPanel);
            app.X_EndEditFieldLabel.VerticalAlignment = 'center';
            app.X_EndEditFieldLabel.FontName = 'Microsoft YaHei UI';
            app.X_EndEditFieldLabel.Position = [21 18 40 15];
            app.X_EndEditFieldLabel.Text = 'X_End';

            % Create X_EndEditField
            app.X_EndEditField = uieditfield(app.CoordinateSystemPanel, 'numeric');
            app.X_EndEditField.ValueChangedFcn = createCallbackFcn(app, @X_EndEditFieldValueChanged, true);
            app.X_EndEditField.Position = [81 14 58 22];

            % Create Y_EndEditFieldLabel
            app.Y_EndEditFieldLabel = uilabel(app.CoordinateSystemPanel);
            app.Y_EndEditFieldLabel.VerticalAlignment = 'center';
            app.Y_EndEditFieldLabel.FontName = 'Microsoft YaHei UI';
            app.Y_EndEditFieldLabel.Position = [301 18 40 15];
            app.Y_EndEditFieldLabel.Text = 'Y_End';

            % Create Y_EndEditField
            app.Y_EndEditField = uieditfield(app.CoordinateSystemPanel, 'numeric');
            app.Y_EndEditField.ValueChangedFcn = createCallbackFcn(app, @Y_EndEditFieldValueChanged, true);
            app.Y_EndEditField.Position = [361 14 58 22];

            % Create Y_StartEditFieldLabel
            app.Y_StartEditFieldLabel = uilabel(app.CoordinateSystemPanel);
            app.Y_StartEditFieldLabel.VerticalAlignment = 'center';
            app.Y_StartEditFieldLabel.FontName = 'Microsoft YaHei UI';
            app.Y_StartEditFieldLabel.Position = [301 48 45 15];
            app.Y_StartEditFieldLabel.Text = 'Y_Start';

            % Create Y_StartEditField
            app.Y_StartEditField = uieditfield(app.CoordinateSystemPanel, 'numeric');
            app.Y_StartEditField.ValueChangedFcn = createCallbackFcn(app, @Y_StartEditFieldValueChanged, true);
            app.Y_StartEditField.Position = [361 44 58 22];

            % Create XscaleTypeButtonGroup
            app.XscaleTypeButtonGroup = uibuttongroup(app.CoordinateSystemPanel);
            app.XscaleTypeButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @XscaleTypeButtonGroupSelectionChanged, true);
            app.XscaleTypeButtonGroup.BorderType = 'none';
            app.XscaleTypeButtonGroup.Title = 'XscaleType';
            app.XscaleTypeButtonGroup.FontName = 'Microsoft YaHei UI';
            app.XscaleTypeButtonGroup.Position = [151 2 123 74];

            % Create LinearButton
            app.LinearButton = uiradiobutton(app.XscaleTypeButtonGroup);
            app.LinearButton.Text = 'Linear';
            app.LinearButton.Position = [1 34 57 15];
            app.LinearButton.Value = true;

            % Create LogarithmicButton
            app.LogarithmicButton = uiradiobutton(app.XscaleTypeButtonGroup);
            app.LogarithmicButton.Text = 'Logarithmic';
            app.LogarithmicButton.Position = [1 13 86 15];

            % Create YscaleTypeButtonGroup
            app.YscaleTypeButtonGroup = uibuttongroup(app.CoordinateSystemPanel);
            app.YscaleTypeButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @YscaleTypeButtonGroupSelectionChanged, true);
            app.YscaleTypeButtonGroup.BorderType = 'none';
            app.YscaleTypeButtonGroup.Title = 'YscaleType';
            app.YscaleTypeButtonGroup.FontName = 'Microsoft YaHei UI';
            app.YscaleTypeButtonGroup.Position = [431 2 123 74];

            % Create LinearButton_2
            app.LinearButton_2 = uiradiobutton(app.YscaleTypeButtonGroup);
            app.LinearButton_2.Text = 'Linear';
            app.LinearButton_2.Position = [1 34 57 15];
            app.LinearButton_2.Value = true;

            % Create LogarithmicButton_2
            app.LogarithmicButton_2 = uiradiobutton(app.YscaleTypeButtonGroup);
            app.LogarithmicButton_2.Text = 'Logarithmic';
            app.LogarithmicButton_2.Position = [1 13 86 15];

            % Create ClearAllButton
            app.ClearAllButton = uibutton(app.Tab, 'push');
            app.ClearAllButton.ButtonPushedFcn = createCallbackFcn(app, @ClearAllButtonPushed, true);
            app.ClearAllButton.BackgroundColor = [1 1 1];
            app.ClearAllButton.FontName = 'Microsoft YaHei UI';
            app.ClearAllButton.Position = [901 12 52.625 54];
            app.ClearAllButton.Text = 'ClearAll';

            % Create PrepareImagePanel
            app.PrepareImagePanel = uipanel(app.Tab);
            app.PrepareImagePanel.TitlePosition = 'centertop';
            app.PrepareImagePanel.Title = 'Prepare  Image';
            app.PrepareImagePanel.BackgroundColor = [0.9412 0.9412 0.9412];
            app.PrepareImagePanel.FontName = 'Microsoft YaHei UI';
            app.PrepareImagePanel.Position = [1 0 261 96];

            % Create CropButton
            app.CropButton = uibutton(app.PrepareImagePanel, 'push');
            app.CropButton.ButtonPushedFcn = createCallbackFcn(app, @CropButtonPushed, true);
            app.CropButton.BackgroundColor = [1 1 1];
            app.CropButton.FontName = 'Microsoft YaHei UI';
            app.CropButton.Position = [91 12 51 54];
            app.CropButton.Text = 'Crop';

            % Create LoadButton
            app.LoadButton = uibutton(app.PrepareImagePanel, 'push');
            app.LoadButton.ButtonPushedFcn = createCallbackFcn(app, @LoadButtonPushed, true);
            app.LoadButton.BackgroundColor = [1 1 1];
            app.LoadButton.FontName = 'Microsoft YaHei UI';
            app.LoadButton.Position = [21 12 50 54];
            app.LoadButton.Text = 'Load';

            % Create PerspectiveButton
            app.PerspectiveButton = uibutton(app.PrepareImagePanel, 'push');
            app.PerspectiveButton.ButtonPushedFcn = createCallbackFcn(app, @PerspectiveButtonPushed, true);
            app.PerspectiveButton.BackgroundColor = [1 1 1];
            app.PerspectiveButton.FontName = 'Microsoft YaHei UI';
            app.PerspectiveButton.Position = [157 12 88 54];
            app.PerspectiveButton.Text = 'Perspective';

            % Create Tab2
            app.Tab2 = uitab(app.TabGroup);
            app.Tab2.Title = 'Tab2';

            % Create UndoButton
            app.UndoButton = uibutton(app.Tab2, 'push');
            app.UndoButton.ButtonPushedFcn = createCallbackFcn(app, @UndoButtonPushed, true);
            app.UndoButton.BackgroundColor = [1 1 1];
            app.UndoButton.FontName = 'Microsoft YaHei UI';
            app.UndoButton.Position = [811 11 59.5 55];
            app.UndoButton.Text = 'Undo';

            % Create ColorSegmentationPanel
            app.ColorSegmentationPanel = uipanel(app.Tab2);
            app.ColorSegmentationPanel.TitlePosition = 'centertop';
            app.ColorSegmentationPanel.Title = 'Color   Segmentation';
            app.ColorSegmentationPanel.FontName = 'Microsoft YaHei UI';
            app.ColorSegmentationPanel.Position = [341 0 341 96];

            % Create TargetButton
            app.TargetButton = uibutton(app.ColorSegmentationPanel, 'push');
            app.TargetButton.ButtonPushedFcn = createCallbackFcn(app, @TargetButtonPushed, true);
            app.TargetButton.BackgroundColor = [1 1 1];
            app.TargetButton.FontName = 'Microsoft YaHei UI';
            app.TargetButton.Position = [21 12 50 54];
            app.TargetButton.Text = 'Target';

            % Create H_FactorSliderLabel
            app.H_FactorSliderLabel = uilabel(app.ColorSegmentationPanel);
            app.H_FactorSliderLabel.HorizontalAlignment = 'right';
            app.H_FactorSliderLabel.FontName = 'Microsoft YaHei UI';
            app.H_FactorSliderLabel.Position = [95 51 56 15];
            app.H_FactorSliderLabel.Text = 'H_Factor';

            % Create H_FactorSlider
            app.H_FactorSlider = uislider(app.ColorSegmentationPanel);
            app.H_FactorSlider.Limits = [0 0.15];
            app.H_FactorSlider.MajorTicks = [];
            app.H_FactorSlider.MajorTickLabels = {};
            app.H_FactorSlider.ValueChangedFcn = createCallbackFcn(app, @H_FactorSliderValueChanged, true);
            app.H_FactorSlider.MinorTicks = [];
            app.H_FactorSlider.FontName = 'Microsoft YaHei UI';
            app.H_FactorSlider.Position = [165 57 157 3];
            app.H_FactorSlider.Value = 0.06;

            % Create S_FactorSliderLabel
            app.S_FactorSliderLabel = uilabel(app.ColorSegmentationPanel);
            app.S_FactorSliderLabel.HorizontalAlignment = 'right';
            app.S_FactorSliderLabel.FontName = 'Microsoft YaHei UI';
            app.S_FactorSliderLabel.Position = [95 31 54 15];
            app.S_FactorSliderLabel.Text = 'S_Factor';

            % Create S_FactorSlider
            app.S_FactorSlider = uislider(app.ColorSegmentationPanel);
            app.S_FactorSlider.Limits = [0.1 0.8];
            app.S_FactorSlider.MajorTicks = [];
            app.S_FactorSlider.MajorTickLabels = {};
            app.S_FactorSlider.ValueChangedFcn = createCallbackFcn(app, @S_FactorSliderValueChanged, true);
            app.S_FactorSlider.MinorTicks = [];
            app.S_FactorSlider.FontName = 'Microsoft YaHei UI';
            app.S_FactorSlider.Position = [165 37 155 3];
            app.S_FactorSlider.Value = 0.4;

            % Create V_FactorSliderLabel
            app.V_FactorSliderLabel = uilabel(app.ColorSegmentationPanel);
            app.V_FactorSliderLabel.HorizontalAlignment = 'right';
            app.V_FactorSliderLabel.FontName = 'Microsoft YaHei UI';
            app.V_FactorSliderLabel.Position = [95 11 55 15];
            app.V_FactorSliderLabel.Text = 'V_Factor';

            % Create V_FactorSlider
            app.V_FactorSlider = uislider(app.ColorSegmentationPanel);
            app.V_FactorSlider.Limits = [0 1];
            app.V_FactorSlider.MajorTicks = [];
            app.V_FactorSlider.MajorTickLabels = {};
            app.V_FactorSlider.ValueChangedFcn = createCallbackFcn(app, @V_FactorSliderValueChanged, true);
            app.V_FactorSlider.MinorTicks = [];
            app.V_FactorSlider.FontName = 'Microsoft YaHei UI';
            app.V_FactorSlider.Position = [165 17 156 3];
            app.V_FactorSlider.Value = 0.6;

            % Create GraySegmentationPanel
            app.GraySegmentationPanel = uipanel(app.Tab2);
            app.GraySegmentationPanel.TitlePosition = 'centertop';
            app.GraySegmentationPanel.Title = 'Gray   Segmentation';
            app.GraySegmentationPanel.FontName = 'Microsoft YaHei UI';
            app.GraySegmentationPanel.Position = [1 0 341 96];

            % Create ThresholdingButton
            app.ThresholdingButton = uibutton(app.GraySegmentationPanel, 'push');
            app.ThresholdingButton.ButtonPushedFcn = createCallbackFcn(app, @ThresholdingButtonPushed, true);
            app.ThresholdingButton.BackgroundColor = [1 1 1];
            app.ThresholdingButton.FontName = 'Microsoft YaHei UI';
            app.ThresholdingButton.Position = [19.5 13 91 54];
            app.ThresholdingButton.Text = 'Thresholding';

            % Create FactorSliderLabel
            app.FactorSliderLabel = uilabel(app.GraySegmentationPanel);
            app.FactorSliderLabel.VerticalAlignment = 'center';
            app.FactorSliderLabel.Position = [130 31 39 15];
            app.FactorSliderLabel.Text = 'Factor';

            % Create FactorSlider
            app.FactorSlider = uislider(app.GraySegmentationPanel);
            app.FactorSlider.Limits = [-0.2 0.2];
            app.FactorSlider.MajorTickLabels = {'', '', '', '', '', ''};
            app.FactorSlider.ValueChangedFcn = createCallbackFcn(app, @FactorSliderValueChanged, true);
            app.FactorSlider.Position = [168 37 162 3];

            % Create CleanButton
            app.CleanButton = uibutton(app.Tab2, 'push');
            app.CleanButton.ButtonPushedFcn = createCallbackFcn(app, @CleanButtonPushed, true);
            app.CleanButton.BackgroundColor = [1 1 1];
            app.CleanButton.FontName = 'Microsoft YaHei UI';
            app.CleanButton.Position = [701 11 52 55];
            app.CleanButton.Text = 'Clean';

            % Create RefreshButton
            app.RefreshButton = uibutton(app.Tab2, 'push');
            app.RefreshButton.ButtonPushedFcn = createCallbackFcn(app, @RefreshButtonPushed, true);
            app.RefreshButton.BackgroundColor = [1 1 1];
            app.RefreshButton.FontName = 'Microsoft YaHei UI';
            app.RefreshButton.Position = [891 11 59.5 55];
            app.RefreshButton.Text = 'Refresh';

            % Create Tab3
            app.Tab3 = uitab(app.TabGroup);
            app.Tab3.Title = 'Tab3';

            % Create GetDataPanel
            app.GetDataPanel = uipanel(app.Tab3);
            app.GetDataPanel.TitlePosition = 'centertop';
            app.GetDataPanel.Title = 'Get   Data';
            app.GetDataPanel.FontName = 'Microsoft YaHei UI';
            app.GetDataPanel.Position = [1 0 380 96];

            % Create SaveAsButton
            app.SaveAsButton = uibutton(app.GetDataPanel, 'push');
            app.SaveAsButton.ButtonPushedFcn = createCallbackFcn(app, @SaveAsButtonPushed, true);
            app.SaveAsButton.BackgroundColor = [1 1 1];
            app.SaveAsButton.FontName = 'Microsoft YaHei UI';
            app.SaveAsButton.Position = [301 12 60 54];
            app.SaveAsButton.Text = 'Save As';

            % Create PointNumberEditFieldLabel
            app.PointNumberEditFieldLabel = uilabel(app.GetDataPanel);
            app.PointNumberEditFieldLabel.VerticalAlignment = 'center';
            app.PointNumberEditFieldLabel.FontName = 'Microsoft YaHei UI';
            app.PointNumberEditFieldLabel.Position = [11 48 87 15];
            app.PointNumberEditFieldLabel.Text = 'Point Number';

            % Create PointNumberEditField
            app.PointNumberEditField = uieditfield(app.GetDataPanel, 'numeric');
            app.PointNumberEditField.ValueChangedFcn = createCallbackFcn(app, @PointNumberEditFieldValueChanged, true);
            app.PointNumberEditField.FontName = 'Microsoft YaHei UI';
            app.PointNumberEditField.Position = [111 44 90 22];

            % Create PlotButton
            app.PlotButton = uibutton(app.GetDataPanel, 'push');
            app.PlotButton.ButtonPushedFcn = createCallbackFcn(app, @PlotButtonPushed, true);
            app.PlotButton.BackgroundColor = [1 1 1];
            app.PlotButton.FontName = 'Microsoft YaHei UI';
            app.PlotButton.Position = [229 10 50 56];
            app.PlotButton.Text = 'Plot';

            % Create PleaseenteranINTEGERLabel
            app.PleaseenteranINTEGERLabel = uilabel(app.GetDataPanel);
            app.PleaseenteranINTEGERLabel.FontName = 'Microsoft YaHei UI';
            app.PleaseenteranINTEGERLabel.Position = [11 11 190 15];
            app.PleaseenteranINTEGERLabel.Text = 'Please enter an INTEGER. ';

            % Create UIAxes
            app.UIAxes = uiaxes(app.Graph2DataUIFigure);
            app.UIAxes.FontName = 'Consolas';
            app.UIAxes.MinorGridLineStyle = '-';
            app.UIAxes.GridColor = [0.8275 0.8275 0.8275];
            app.UIAxes.GridAlpha = 0.6;
            app.UIAxes.GridColorMode = 'manual';
            app.UIAxes.MinorGridAlpha = 0.2;
            app.UIAxes.Box = 'on';
            app.UIAxes.XColor = [0.8275 0.8275 0.8275];
            app.UIAxes.XColorMode = 'manual';
            app.UIAxes.YColor = [0.8275 0.8275 0.8275];
            app.UIAxes.YColorMode = 'manual';
            app.UIAxes.Color = [0.9412 0.9412 0.9412];
            app.UIAxes.XGrid = 'on';
            app.UIAxes.XMinorGrid = 'on';
            app.UIAxes.YGrid = 'on';
            app.UIAxes.YMinorGrid = 'on';
            app.UIAxes.Position = [2 2 960 630];

            % Create Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel = uilabel(app.Graph2DataUIFigure);
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.HorizontalAlignment = 'center';
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.VerticalAlignment = 'bottom';
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.FontName = 'Consolas';
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.FontSize = 11;
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.FontColor = [1 1 1];
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.Position = [511.5 736 449 15];
            app.Version1020200301CopyrightC2020Haotian_WAllrightsreservedLabel.Text = 'Version: 1.0 20200301; Copyright (C) 2020 Haotian_W All rights reserved.';
        end
    end

    methods (Access = public)

        % Construct app
        function app = Graph2Data

            % Create and configure components
            createComponents(app)

            % Register the app with App Designer
            registerApp(app, app.Graph2DataUIFigure)

            if nargout == 0
                clear app
            end
        end

        % Code that executes before app deletion
        function delete(app)

            % Delete UIFigure when app is deleted
            delete(app.Graph2DataUIFigure)
        end
    end
end

(部分测试图片来自互联网,侵删)  

猜你喜欢

转载自blog.csdn.net/BAR_WORKSHOP/article/details/104470763