1 简介
2 部分代码
function varargout = Multi_GUI(varargin)
% 可使用guide查看各控件的句柄和回调函数位置;
% GUIDE v2.5;
% 初始化代码,请勿编辑
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Multi_GUI_OpeningFcn, ...
'gui_OutputFcn', @Multi_GUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1}) %%判断输入变量个数及是否为字符组
gui_State.gui_Callback = str2func(varargin{1});%%函数句柄
end
if nargout %%函数输出参数数目
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function Multi_GUI_OpeningFcn(hObject,~,handles,varargin)
set(groot,'defaultimageUserData',0);
set(groot,'defaultlineUserData',0);
handles.output = hObject;
guidata(hObject, handles);
function varargout = Multi_GUI_OutputFcn(~,~,handles)
varargout{1} = handles.output;
%曲线放大函数
function p_ButtonDownFcn(hObject,~)
if strcmp(get(gcf,'SelectionType'),'open')&&hObject.Children.UserData==0 %%strcmp比较两个字符串,同1异0; gcf返回当前figure;判断是否是双击 ;
hObject.Children.UserData=1;
S=get(0,'screensize');
F_z=figure('InnerPosition',[S(3)/20,S(4)/15,S(3)*0.9,S(4)*0.9],'Toolbar','none','Menubar', 'none','NumberTitle','Off','Name','放大视图');
p_f=hObject.Position;
P_f=hObject.Parent;
hObject.Parent=F_z;
set(gca,'Position',[0.05,0.05,0.9,0.9]);
F_z.DeleteFcn={@pZoom_DeleteFcn,hObject,P_f,p_f};
end
%放大窗口删除函数(曲线)
function pZoom_DeleteFcn(~,~,a,P_f,p_f)
a.Parent=P_f;
set(a,'Position',p_f);
a.Children.UserData=0;
%云图绘制函数
function nephogram(ax,data,CLim,target,unit,biaozhi)%(云图坐标区,云图数据,颜色范围矩阵,标题,曲线坐标区)
image(ax,data,'CDataMapping','scaled','ButtonDownFcn',{@a_Callback,target,unit,biaozhi});%显示AoP云图 直接和缩放颜色数据映射 scaled为默认
set(ax,'DataAspectRatioMode','manual','DataAspectRatio',[1 1 1]); %设置各个坐标轴数据值的相对比例
colormap(ax,jet);%色图矩阵默认
colorbar(ax);%差值填色图标尺
axis(ax,'off');%坐标轴无上下限
caxis(ax,CLim);%设置颜色条数值上下限
%单击图片后显示沿截线的分布的回调函数
function a_Callback(hObject,~,ax,Unit,biaozhi)%ax为曲线所在坐标区,Unit为纵轴单位
hObject.HandleVisibility='off'; %控件的句柄可访问性为不可访问
cla(hObject.Parent);%清除已有提示线
hObject.HandleVisibility='on'; %可以访问控件的句柄
if strcmp(get(gcf,'SelectionType'),'open')&&hObject.UserData==0%若为双击且尚未打开放大窗口,则放大该图片
hObject.UserData=1;
S=get(0,'screensize'); %屏幕尺寸
C0=hObject.CData; %所画图像中用到的数据
if any(~biaozhi(:)) %any判断向量中是否存在非零元素,biaozhi中是否有0
X=find(sum(1-biaozhi)~=0); %列求和,生成行向量
Y=find(sum(1-biaozhi,2)~=0); %行求和,生成列向量
hObject.Parent.XLim=[0.5 length(X)+0.5]; %
hObject.Parent.YLim=[0.5 length(Y)+0.5]; %
hObject.CData=C0(Y(1):Y(end),X(1):X(end)); %
end
[h,w]=size(hObject.CData); %h行数w列数
cm=colormap(hObject.Parent);
F_z=figure('Visible','off','InnerPosition',[S(3)/20,S(4)/15,S(3)*0.9,S(4)*0.9],'Colormap',cm,'Toolbar','none','Menubar', 'none','NumberTitle','Off','Name','放大视图');
ca=copyobj(hObject.Parent,F_z); %复制图形对象及其后代,复制hObject标识的一个或多个图形对象并返回新对象句柄或新对象数组。新图形对象是F_z指定的图形对象的子级
set(gca,'Position',[0.025,0.025,0.95,0.95]);
ca.Children.ButtonDownFcn={@a_Callback,ax,Unit,biaozhi};
ca.Children.UserData=1;
c=colorbar(ca);
ca.YAxis.Label.Units='pixels';
F_z.InnerPosition(3)=c.Position(3)*F_z.InnerPosition(3)+w/h*F_z.InnerPosition(4)+ca.TickLength(2)*F_z.InnerPosition(4)-ca.YAxis.Label.Extent(1);
ca.YAxis.Label.Units='data';
F_z.Visible='on';
F_z.DeleteFcn={@Copy_DeleteFcn,hObject,C0};
else
if ~isempty(ax.Children) %判断是否为非空
mark=ax.Children.UserData;
else
mark=0;
function popupmenu2_Callback(hObject,~,handles) %#ok<DEFNU>
switch get(hObject,'Value')
case 1
if isfield(handles,'p1')
nephogram(handles.axes3,handles.p1,[min(handles.p1(handles.p1~=0)),max(handles.p1(handles.p1~=0))],handles.axes4,[],handles.biaozhi)%(云图坐标区,云图数据,颜色范围矩阵,标题,曲线坐标区)
end
case 2
if isfield(handles,'p2')
nephogram(handles.axes3,handles.p2,[min(handles.p2(handles.p2~=0)),max(handles.p2(handles.p2~=0))],handles.axes4,[],handles.biaozhi)%(云图坐标区,云图数据,颜色范围矩阵,标题,曲线坐标区)
end
end
function pushbutton_save_Callback(~,~,handles) %#ok<DEFNU>
path=uigetdir([getenv('userprofile'),'\desktop'],'选择φ1和φ2数据的保存路径');
if path~=0
dlmwrite([path,'\phi1.txt'],handles.p1);
dlmwrite([path,'\phi2.txt'],handles.p2);
end
3 仿真结果
4 参考文献
[1]王永红, 陈维杰, 钟诗民,等. 相位解包裹技术及应用研究进展[J]. 测控技术, 2018, 037(012):1-7,16.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。