用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 componentsproperties (Access = public)Graph2DataUIFigure         matlab.ui.FigureTabGroup                   matlab.ui.container.TabGroupTab                        matlab.ui.container.TabCoordinateSystemPanel      matlab.ui.container.PanelX_StartEditFieldLabel      matlab.ui.control.LabelX_StartEditField           matlab.ui.control.NumericEditFieldX_EndEditFieldLabel        matlab.ui.control.LabelX_EndEditField             matlab.ui.control.NumericEditFieldY_EndEditFieldLabel        matlab.ui.control.LabelY_EndEditField             matlab.ui.control.NumericEditFieldY_StartEditFieldLabel      matlab.ui.control.LabelY_StartEditField           matlab.ui.control.NumericEditFieldXscaleTypeButtonGroup      matlab.ui.container.ButtonGroupLinearButton               matlab.ui.control.RadioButtonLogarithmicButton          matlab.ui.control.RadioButtonYscaleTypeButtonGroup      matlab.ui.container.ButtonGroupLinearButton_2             matlab.ui.control.RadioButtonLogarithmicButton_2        matlab.ui.control.RadioButtonClearAllButton             matlab.ui.control.ButtonPrepareImagePanel          matlab.ui.container.PanelCropButton                 matlab.ui.control.ButtonLoadButton                 matlab.ui.control.ButtonPerspectiveButton          matlab.ui.control.ButtonTab2                       matlab.ui.container.TabUndoButton                 matlab.ui.control.ButtonColorSegmentationPanel     matlab.ui.container.PanelTargetButton               matlab.ui.control.ButtonH_FactorSliderLabel        matlab.ui.control.LabelH_FactorSlider             matlab.ui.control.SliderS_FactorSliderLabel        matlab.ui.control.LabelS_FactorSlider             matlab.ui.control.SliderV_FactorSliderLabel        matlab.ui.control.LabelV_FactorSlider             matlab.ui.control.SliderGraySegmentationPanel      matlab.ui.container.PanelThresholdingButton         matlab.ui.control.ButtonFactorSliderLabel          matlab.ui.control.LabelFactorSlider               matlab.ui.control.SliderCleanButton                matlab.ui.control.ButtonRefreshButton              matlab.ui.control.ButtonTab3                       matlab.ui.container.TabGetDataPanel               matlab.ui.container.PanelSaveAsButton               matlab.ui.control.ButtonPointNumberEditFieldLabel  matlab.ui.control.LabelPointNumberEditField       matlab.ui.control.NumericEditFieldPlotButton                 matlab.ui.control.ButtonPleaseenteranINTEGERLabel  matlab.ui.control.LabelUIAxes                     matlab.ui.control.UIAxesVersion1020200301CopyrightC2020Haotian_WAllrightsreservedLabel  matlab.ui.control.Labelendproperties (Access = public)Image % DescriptionImage_hsvImage_targetImage_target_hsvrowcolx_target % Descriptiony_targetxOriginalyOriginalxFinalyFinaldataendmethods (Access = private)% Button pushed function: CleanButtonfunction 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: ClearAllButtonfunction ClearAllButtonPushed(app, event)app.Image = [];   % Clear Image  imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Button pushed function: CropButtonfunction CropButtonPushed(app, event)app.Image = imcrop(app.Image);close;imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Value changed function: FactorSliderfunction 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_FactorSliderfunction 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),:);endapp.Image_target = hsv2rgb(app.Image_target_hsv);imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Button pushed function: LoadButtonfunction 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: PerspectiveButtonfunction 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: PlotButtonfunction PlotButtonPushed(app, event)% app.X_StartEditField.Value% app.X_EndEditField.Value% app.Y_StartEditField.Value% app.Y_EndEditField.Value% app.PointNumberEditField.Valueweight = 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 == 0for i = 1:1:weightcolum = app.Image(:,i);index = sort(find(colum == 0));if isempty(index) == 0app.xOriginal = [app.xOriginal i];app.yOriginal = [app.yOriginal index(1)+floor(length(index)/2)];endendelsefor i = 1:interval:weightcolum = app.Image(:,i);index = sort(find(colum == 0));if isempty(index) == 0app.xOriginal = [app.xOriginal i];app.yOriginal = [app.yOriginal index(1)+floor(length(index)/2)];endendendapp.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: PointNumberEditFieldfunction PointNumberEditFieldValueChanged(app, event)value = app.PointNumberEditField.Value;end% Button pushed function: RefreshButtonfunction RefreshButtonPushed(app, event)app.Image = app.Image_target;end% Value changed function: S_FactorSliderfunction 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),:);endapp.Image_target = hsv2rgb(app.Image_target_hsv);imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Button pushed function: SaveAsButtonfunction 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: TargetButtonfunction 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),:);endapp.Image_target = hsv2rgb(app.Image_target_hsv);imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Button pushed function: ThresholdingButtonfunction 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: UndoButtonfunction UndoButtonPushed(app, event)imshow(app.Image,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Value changed function: V_FactorSliderfunction 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),:);endapp.Image_target = hsv2rgb(app.Image_target_hsv);imshow(app.Image_target,'Parent',app.UIAxes,'InitialMagnification','fit','border','tight');end% Value changed function: X_EndEditFieldfunction X_EndEditFieldValueChanged(app, event)value = app.X_EndEditField.Value;end% Value changed function: X_StartEditFieldfunction X_StartEditFieldValueChanged(app, event)value = app.X_StartEditField.Value;     end% Selection changed function: XscaleTypeButtonGroupfunction XscaleTypeButtonGroupSelectionChanged(app, event)selectedButton = app.XscaleTypeButtonGroup.SelectedObject;end% Value changed function: Y_EndEditFieldfunction Y_EndEditFieldValueChanged(app, event)value = app.Y_EndEditField.Value;end% Value changed function: Y_StartEditFieldfunction Y_StartEditFieldValueChanged(app, event)value = app.Y_StartEditField.Value;     end% Selection changed function: YscaleTypeButtonGroupfunction YscaleTypeButtonGroupSelectionChanged(app, event)selectedButton = app.YscaleTypeButtonGroup.SelectedObject;endend% App initialization and constructionmethods (Access = private)% Create UIFigure and componentsfunction createComponents(app)% Create Graph2DataUIFigureapp.Graph2DataUIFigure = uifigure;app.Graph2DataUIFigure.Color = [0.9412 0.9412 0.9412];app.Graph2DataUIFigure.Position = [300 50 960 750];app.Graph2DataUIFigure.Name = 'Graph2Data';% Create TabGroupapp.TabGroup = uitabgroup(app.Graph2DataUIFigure);app.TabGroup.Position = [1 631 960 120];% Create Tabapp.Tab = uitab(app.TabGroup);app.Tab.Title = 'Tab';app.Tab.BackgroundColor = [0.9412 0.9412 0.9412];% Create CoordinateSystemPanelapp.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_StartEditFieldLabelapp.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_StartEditFieldapp.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_EndEditFieldLabelapp.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_EndEditFieldapp.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_EndEditFieldLabelapp.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_EndEditFieldapp.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_StartEditFieldLabelapp.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_StartEditFieldapp.Y_StartEditField = uieditfield(app.CoordinateSystemPanel, 'numeric');app.Y_StartEditField.ValueChangedFcn = createCallbackFcn(app, @Y_StartEditFieldValueChanged, true);app.Y_StartEditField.Position = [361 44 58 22];% Create XscaleTypeButtonGroupapp.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 LinearButtonapp.LinearButton = uiradiobutton(app.XscaleTypeButtonGroup);app.LinearButton.Text = 'Linear';app.LinearButton.Position = [1 34 57 15];app.LinearButton.Value = true;% Create LogarithmicButtonapp.LogarithmicButton = uiradiobutton(app.XscaleTypeButtonGroup);app.LogarithmicButton.Text = 'Logarithmic';app.LogarithmicButton.Position = [1 13 86 15];% Create YscaleTypeButtonGroupapp.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_2app.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_2app.LogarithmicButton_2 = uiradiobutton(app.YscaleTypeButtonGroup);app.LogarithmicButton_2.Text = 'Logarithmic';app.LogarithmicButton_2.Position = [1 13 86 15];% Create ClearAllButtonapp.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 PrepareImagePanelapp.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 CropButtonapp.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 LoadButtonapp.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 PerspectiveButtonapp.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 Tab2app.Tab2 = uitab(app.TabGroup);app.Tab2.Title = 'Tab2';% Create UndoButtonapp.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 ColorSegmentationPanelapp.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 TargetButtonapp.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_FactorSliderLabelapp.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_FactorSliderapp.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_FactorSliderLabelapp.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_FactorSliderapp.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_FactorSliderLabelapp.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_FactorSliderapp.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 GraySegmentationPanelapp.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 ThresholdingButtonapp.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 FactorSliderLabelapp.FactorSliderLabel = uilabel(app.GraySegmentationPanel);app.FactorSliderLabel.VerticalAlignment = 'center';app.FactorSliderLabel.Position = [130 31 39 15];app.FactorSliderLabel.Text = 'Factor';% Create FactorSliderapp.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 CleanButtonapp.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 RefreshButtonapp.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 Tab3app.Tab3 = uitab(app.TabGroup);app.Tab3.Title = 'Tab3';% Create GetDataPanelapp.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 SaveAsButtonapp.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 PointNumberEditFieldLabelapp.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 PointNumberEditFieldapp.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 PlotButtonapp.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 PleaseenteranINTEGERLabelapp.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 UIAxesapp.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_WAllrightsreservedLabelapp.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.';endendmethods (Access = public)% Construct appfunction app = Graph2Data% Create and configure componentscreateComponents(app)% Register the app with App DesignerregisterApp(app, app.Graph2DataUIFigure)if nargout == 0clear appendend% Code that executes before app deletionfunction delete(app)% Delete UIFigure when app is deleteddelete(app.Graph2DataUIFigure)endend
end

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

[GUI] 使用MATLAB从图片中提取曲线数据相关推荐

  1. 利用matlab从图片中提取曲线坐标数据

    目录 0.引言 1.思路详解与分析 2.MATLAB程序 0.引言   在读文献的时,经常遇到这样的情况:文章里提出的方法好有趣啊,好想拿文中用的数据来试试看看能不能得到相近的结果,可是文中只有根据原 ...

  2. 图片中提取曲线的办法

    介绍背景 文章中的图片上有多个曲线,数据已经丢失,想要图片上的一个周期的数据. 这个图片分两种: 1,已经转化成图片了,图片格式的,没办法,只能一步步解决. 2,另一种从别的软件里拷贝出来直接粘贴到w ...

  3. GateData Graph Digitizrer 图片中原始曲线数据提取——科研利器

    GateData Graph Digitizrer 介绍 获取图片 曲线数据提取 介绍 首先先来介绍一款科研利器GateData Graph Digitizrer 这款软件可以将论文.或者纸质的图表数 ...

  4. getdata提取曲线数据_Origin如何从图表中获取数据

    点击上方"蓝字",一起愉快的玩耍吧!Origin如何从图表中获取数据01图片分析软件安装 一.GetData Graph Digitizer安装 使用范围: 1.需要引用别人文章中 ...

  5. java索引图片,索引从图片中提取像素数据的代码的错误

    我使用Python Imaging Library和Numpy运行以下代码,从图片中的特定感兴趣区域中提取像素数据 . 以下代码应该采用尺寸w乘以h的多张图片,切割宽度a(水平)和b(垂直)的边距,并 ...

  6. matlab r如何看曲线图,MATLAB 提取图片中的曲线数据重新画图

    注意: 本代码是由[MATLAB R2015b win 32位]编写. 先上代码:%% 清空变量 clear all; clc; %% 取点之后趋势是对的,也就是点与点之间的比例是对的,但是每个点的真 ...

  7. 【Matlab】访问提取时序数据

    使用 ToWorkspace 工具从 Simulink 直接转移过来的数据为时序数据,可以直接使用 plot(X) 绘图,如下图所示.但无法直接与列向量数据放在一起画图,因此需要先进行数据的提取. 访 ...

  8. MATLAB如何提取曲线原始数据

    无论是在工作上或是学习中,相信有不少朋友会碰到这类情况 参加学术研讨会,演讲者展示的数据曲线,很感兴趣,想了解曲线背后的原始数据.于是拍了照片,但是不知道如何从这张照片中提取原始数据 做汽车系统仿真, ...

  9. matlab cell转double_MATLAB处理数据,掌握这7个小技巧就够了

    最近一段时间,工作上花了不少时间用MATLAB处理工厂下线的数据,数据庞大不说,复杂度也高,各种推算和统计 所以今天我打算总结一下,平时我在用MATLAB做数据分析时常用的几个小技巧 正好全国大学生数 ...

最新文章

  1. Linux新增开放端口
  2. 【Ubuntu 16】源码包安装Apache Httpd
  3. 目标文件里面到底有什么(1)?
  4. C语言高级编程:利用堆栈溢出修改函数返回地址
  5. mysql 热块_mysql 优化
  6. 基于Ubuntu环境使用docker搭建对于中文识别的chineseocr_lite项目
  7. linux没有interface文件,Linux下interface文件修改
  8. C++高质量编程点滴
  9. CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析
  10. delphi 汉字的编码 转换
  11. 5.Ray-Handler之ToReadHandler编写
  12. arcgis server缓存路径修改
  13. 大数据丨网络爬虫技术总结
  14. nmake 环境变量配置
  15. 七牛sdk 上传视频 - 前端
  16. Win10极限精简版Tiny10发布:仅占C盘4.3GB
  17. mysql:InnoDB关键特性:自适应哈希索引(AHI)
  18. 网页webp格式转换成jpg方法
  19. 全栈必备 存储基础
  20. PyScripter的下载

热门文章

  1. 各大硬核应用渠道开放平台SDK文档地址
  2. C++中模板的特化与偏特化
  3. ASIFT算法过程实现 --- 配置避坑指南
  4. Layui form 表单验证lay-verify
  5. android外接USB扫码器应用闪退,外接U盘正常的情况
  6. 统计学三大相关系数之Pearson相关系数、Spearman相关系数
  7. javamail解析邮件,内容重复
  8. MAC 升级php 到7.1
  9. 高中信息技术教资科目三总结
  10. 自定义ListVIew添加上下更多项