www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/dw3dtool.m
function varargout = dw3dtool(varargin) %DW3DTOOL Discrete wavelet 3D tool. % VARARGOUT = DW3DTOOL(VARARGIN) % Last Modified by GUIDE v2.5 24-Oct-2009 13:25:49 % % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Feb-2003. % Last Revision: 10-Jun-2013. % Copyright 1995-2013 The MathWorks, Inc. % $Revision: 1.1.6.11 $ $Date: 2013/07/05 04:30:09 $ %*************************************************************************% % BEGIN initialization code - DO NOT EDIT % % ---------------------------------------- % %*************************************************************************% gui_Singleton = 0; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @dw3dtool_OpeningFcn, ... 'gui_OutputFcn', @dw3dtool_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 %*************************************************************************% % END initialization code - DO NOT EDIT % %*************************************************************************% %*************************************************************************% % BEGIN Opening Function % % ---------------------- % % --- Executes just before dw3dtool is made visible. % %*************************************************************************% function dw3dtool_OpeningFcn(hObject,eventdata,handles,varargin) %#ok<VANUS> % This function has no output args, see OutputFcn. % Choose default command line output for dw3dtool handles.output = hObject; % Update handles structure guidata(hObject, handles); %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% % TOOL INITIALISATION Introduced manualy in the automatic generated code % %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% Init_Tool(hObject,eventdata,handles); %*************************************************************************% % END Opening Function % %*************************************************************************% %*************************************************************************% % BEGIN Output Function % % --------------------- % % --- Outputs from this function are returned to the command line. % %*************************************************************************% function varargout = dw3dtool_OutputFcn(hObject,eventdata,handles) % varargout cell array for returning output args (see VARARGOUT); % Get default command line output from handles structure varargout{1} = handles.output; %*************************************************************************% % END Output Function % %*************************************************************************% %=========================================================================% % BEGIN Callback Functions % % ------------------------ % %=========================================================================% function Pus_CloseWin_Callback(hObject,eventdata,handles) %#ok<DEFNU> status = tst_Save(eventdata,handles); if isequal(status,-1) , return; end dw3dtool_Win_DeleteFcn(hObject,eventdata,handles) %-------------------------------------------------------------------------- function dw3dtool_Win_DeleteFcn(hObject,eventdata,handles) hFig = handles.output; % s = dbstack; % pus_Call = any(strcmp({s(:).name},'Pus_CloseWin_Callback')); % if ~pus_Call , tst_Save(eventdata,handles); end try figChild = wfigmngr('getWinPROP',hFig,'FigChild'); figChild = figChild(ishandle(figChild)); delete(figChild); end %#ok<*TRYNC> delete(hFig); %-------------------------------------------------------------------------- function status = tst_Save(eventdata,handles) hFig = handles.output; status = 0; hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus'); m_save = hdl_Menus.m_save; ena_Save = get(m_save,'Enable'); if isequal(lower(ena_Save),'on') status = wwaitans({hFig,getWavMSG('Wavelet:divGUIRF:III_D_Analysis')},... getWavMSG('Wavelet:commongui:QUEST_Save_Dec'),2,'Cancel'); switch status case -1 , return; case 1 wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); save_FUN(m_save,eventdata,handles,'dec') wwaiting('off',hFig); otherwise end end %-------------------------------------------------------------------------- function Load_Data_Callback(hObject,eventdata,handles,varargin) % Get figure handle. %------------------- hFig = handles.output; typeLOAD = varargin{1}; switch typeLOAD case 'load' [filename,pathname] = uigetfile( ... {'*.mat','MAT-files (*.mat)'; ... '*.*', 'All Files (*.*)'}, ... getWavMSG('Wavelet:divGUIRF:Pick_a_file'), 'Untitled.mat'); %#ok<NASGU> ok = ~isequal(filename,0); if ~ok, return; end err = 0; try Data = whos('-file',filename); nbData = length(Data); Okdata = false(1,nbData); idxVar = 0; for k = 1:nbData DS = Data(k).size; nbdim = length(DS); if nbdim>2 nbdim = nbdim-length(find(DS==1)); if nbdim==3 Okdata(k) = 1; idxVar = k; end end if Okdata(k) , NameVar = Data(k).name; break; end end if idxVar>0 S = load(filename); else err = 1; end catch err = 1; end if ~err && isfield(S,NameVar) X = S.(NameVar); X = squeeze(X); if min(size(X))<5 , err = 1; end else err = 1; end if err uiwait(warndlg(getWavMSG('Wavelet:divGUIRF:Invalid_3D'), ... getWavMSG('Wavelet:divGUIRF:Load_3D'),'modal')) return; end [~,Data_Name] = fileparts(filename); case 'import' [dataInfos,X,ok] = wtbximport('3d'); if ~ok, return; end Data_Name = dataInfos.name; case 'demo' filename = varargin{2}; level = varargin{3}; cbanapar('set',hFig,'lev',level); S = load(filename); fn = fieldnames(S); if isfield(S,'X') , X = S.('X'); else X = S.(fn{1}); end [~,Data_Name] = fileparts(filename); X = squeeze(X); end sX = size(X); % Cleaning. %---------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitClean')); % Clean Axes. %------------ HDL_Axes = [... handles.Axe_ORI;handles.Axe_APP;handles.Axe_DET; ... handles.Axe_AAA;handles.Axe_AAD; ... handles.Axe_DDD;handles.Axe_DAD;handles.Axe_ADD; ... handles.Axe_DDA;handles.Axe_DAA;handles.Axe_ADA]; Children = allchild(HDL_Axes); delete(cat(1,Children{:})); % Clean UIC. %------------ hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus'); m_save = hdl_Menus.m_save; m_exp_data = hdl_Menus.m_exp_data; Hdl_to_Disable = [... m_save,m_exp_data, ... handles.Txt_Slice_ORIENT,handles.Pop_Slice_ORIENT,... handles.Txt_SLICE_Rec,handles.Sli_SLICE_Rec,handles.Edi_SLICE_Rec, ... handles.Txt_SLICE_Cfs,handles.Sli_SLICE_Cfs,handles.Edi_SLICE_Cfs,... handles.Pus_SLICE_MOV, ... handles.Pop_LEV_DISP,handles.Txt_LEV_DISP, ... handles.Txt_3D_DISP,handles.Pop_3D_DISP ... ]; Hdl_to_Enable = [handles.Pus_Decompose,]; set([Hdl_to_Disable,Hdl_to_Enable],'Enable','Off'); % Setting GUI values and Analysis parameters. %-------------------------------------------- max_lev_anal = 8; levm = wmaxlev(min(sX),'haar'); levmax = min(levm,max_lev_anal); curlev = cbanapar('get',hFig,'lev'); cbanapar('set',hFig, ... 'lev',{'String',int2str((1:levmax)'),'Value',min(levmax,curlev)} ... ); wtbxappdata('set',hFig,'ORI_Data',X,'SizeOfData',sX,'Slice_ORIENT','Z'); n_s = [Data_Name ' (' , int2str(sX(2)) 'x' int2str(sX(1)) ... 'x' int2str(sX(3)) ')']; set(handles.Edi_Data_NS,'String',n_s); % Display the original data. %--------------------------- Axe_ORI = handles.Axe_ORI; dimstr = ['[' int2str(sX) ']']; image(X(:,:,1),'Parent',Axe_ORI); title('Z = 1','Parent',Axe_ORI); xlabel({getWavMSG('Wavelet:divGUIRF:Final_Title_1'),dimstr},'Parent',Axe_ORI) dynvtool('init',hFig,[],Axe_ORI,[],[1 1],'','','','int'); % Clean Tool. %------------ set(Hdl_to_Enable,'Enable','On'); set(handles.Pop_Slice_ORIENT,'Value',3); set(handles.Pop_3D_DISP,'Value',1); set(handles.Sli_SLICE_Rec,'Value',0); wtbxappdata('set',hFig,'Sli_Rec_VAL',0); set(handles.Edi_SLICE_Rec,'String','1'); set(handles.Sli_SLICE_Cfs,'Value',0); wtbxappdata('set',hFig,'Sli_Cfs_VAL',0); set(handles.Edi_SLICE_Cfs,'String','1'); % End waiting. %------------- wwaiting('off',hFig); % Demo case. %----------- if isequal(typeLOAD,'demo') Pus_Decompose_Callback(handles.Pus_Decompose,eventdata,handles); set(handles.Pop_3D_DISP,'Value',2); Pop_3D_DISP_Callback(handles.Pop_3D_DISP,eventdata,handles) end %-------------------------------------------------------------------------- function Pus_Decompose_Callback(hObject,eventdata,handles,varargin) hFig = handles.output; nbIN = length(varargin); if nbIN<1 , X = wtbxappdata('get',hFig,'ORI_Data'); end % Cleaning. %---------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); % Decomposition. %--------------- [wname,level] = cbanapar('get',hFig,'wav','lev'); wname_Y = getWname(handles.Pop_Wav_Fam_Y,handles.Pop_Wav_Num_Y); wname_Z = getWname(handles.Pop_Wav_Fam_Z,handles.Pop_Wav_Num_Z); Pop_ExtM = handles.Pop_ExtM; lst = get(Pop_ExtM,'String'); extMode = lst{get(Pop_ExtM,'Value')}; wdec = wavedec3(X,level,{wname,wname_Y,wname_Z},'mode',extMode); wtbxappdata('set',hFig,'wdec',wdec); % Clean Tool. %------------ StrPOP = int2str((1:level)'); set(handles.Pop_LEV_DISP,'String',StrPOP,'Value',level) levDISP = level; sizeDEC = wdec.sizes; nbSliceREC = sizeDEC(end,3); nbSliceCFS = sizeDEC(end-levDISP,3); set(handles.Txt_SLICE_Rec,'String', ... getWavMSG('Wavelet:divGUIRF:Txt_SLICE_Rec','Z',nbSliceREC)); set(handles.Sli_SLICE_Rec,'Value',0,'UserData',sizeDEC); wtbxappdata('set',hFig,'Sli_Rec_VAL',0); set(handles.Edi_SLICE_Rec,'UserData',sizeDEC); set(handles.Txt_SLICE_Cfs,'String', ... getWavMSG('Wavelet:divGUIRF:Txt_SLICE_Cfs','Z',nbSliceCFS)); set(handles.Sli_SLICE_Cfs,'Value',0,'UserData',sizeDEC); wtbxappdata('set',hFig,'Sli_Cfs_VAL',0); LstPOP = cell(1,2*level + 4); LstPOP(1) = {getWavMSG('Wavelet:commongui:Str_None');}; LstPOP(2) = {getWavMSG('Wavelet:divGUIRF:Final_Title_1');}; LstPOP(3) = {'----------'}; idx = 3; for j = 1:level idx = idx+1; levstr = int2str(j); LstPOP{idx} = sprintf('APP %s',levstr); end idx = idx+1; LstPOP(idx) = {'----------'}; for j = 1:level idx = idx+1; LstPOP{idx} = getWavMSG('Wavelet:divGUIRF:DET_from',j); end idx = idx+1; LstPOP(idx) = {'----------'}; for j = 1:level idx = idx+1; LstPOP{idx} = sprintf('DET %1.0f',j); end set(handles.Txt_3D_DISP,'Enable','On'); set(handles.Pop_3D_DISP,'String',LstPOP,'Value',1,'UserData',1); % Compute Decomposition Components. %---------------------------------- Compute_Dec_Components(handles) % Display Analysis. %------------------ Display_Analysis(handles); Add_OR_Del_SaveAPPMenu(hFig,level) % End waiting. %------------- hdl_Menus = wtbxappdata('get',hFig,'hdl_Menus'); m_save = hdl_Menus.m_save; m_exp_data = hdl_Menus.m_exp_data; Hdl_to_Enable = [handles.Pus_Decompose,m_save,m_exp_data,... handles.Txt_Slice_ORIENT,handles.Pop_Slice_ORIENT,... handles.Txt_SLICE_Rec,handles.Sli_SLICE_Rec,handles.Edi_SLICE_Rec, ... handles.Txt_SLICE_Cfs,handles.Sli_SLICE_Cfs,handles.Edi_SLICE_Cfs,... handles.Pus_SLICE_MOV, ... handles.Pop_LEV_DISP,handles.Txt_LEV_DISP, ... handles.Txt_3D_DISP,handles.Pop_3D_DISP ... ]; set(Hdl_to_Enable,'Enable','On'); wwaiting('off',hFig); %------------------------------------------------------------------------- function Pus_SLICE_MOV_Callback(hObject,eventdata,handles) %#ok<DEFNU> hFig = handles.output; m_File = wfindobj(hFig,'type','uimenu','tag','figMenuFile'); btn_Close = handles.Pus_CloseWin; set([m_File,btn_Close],'Enable','Off'); % Wwaiting. %---------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); tmp = get(handles.Pop_Slice_ORIENT,{'Value','String'}); orient = tmp{2}{tmp{1}}; switch orient case 'X' , perm = [3 2 1]; case 'Y' , perm = [3 1 2]; case 'Z' , perm = [1 2 3]; end idxSize = perm(3); X = wtbxappdata('get',hFig,'ORI_Data'); typeCompo = {'AAA','AAD','ADA','ADD','DAA','DAD','DDA','DDD'}; level = get(handles.Pop_LEV_DISP,'Value'); L = wtbxappdata('get',hFig,'LowComp'); H = wtbxappdata('get',hFig,'HighComp'); sX = size(X); dimstrX = ['[' int2str(sX) ']']; sL = size(L); dimstrL = ['[' int2str(sL) ']']; sH = size(H); dimstrH = ['[' int2str(sH) ']']; X = permute(X,perm); L = permute(L,perm); H = permute(H,perm); Y = cell(1,8); sY = zeros(8,3); for k = 1:8 type = typeCompo{k}; Y{k} = wtbxappdata('get',hFig,[type 'Comp']); sY(k,:) = size(Y{k}); Y{k} = permute(Y{k},perm); end Axe_ORI = handles.Axe_ORI; Axe_APP = handles.('Axe_APP'); Axe_DET = handles.('Axe_DET'); axe_IND = zeros(1,8); for k = 1:8 type = typeCompo{k}; axe_IND(k) = handles.(['Axe_' type]); end for j = 1:sX(idxSize) orientSTR = [orient ' = ' int2str(j)]; set(handles.Edi_SLICE_Rec,'String',int2str(j),'UserData',j); slide_Val = (j-1)/(sX(idxSize)-1); set(handles.Sli_SLICE_Rec,'Value',slide_Val); wtbxappdata('set',hFig,'Sli_Rec_VAL',slide_Val); image(X(:,:,j),'Parent',Axe_ORI); xlabel({getWavMSG('Wavelet:divGUIRF:Final_Title_1'),dimstrX},'Parent',Axe_ORI) title(orientSTR,'Parent',Axe_ORI); pause(0.01) imagesc(L(:,:,j),'Parent',Axe_APP); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_APP',level),dimstrL},'Parent',Axe_APP) title(orientSTR,'Parent',Axe_APP); imagesc(abs(H(:,:,j)),'Parent',Axe_DET); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_DET',level),dimstrH},'Parent',Axe_DET) title(orientSTR,'Parent',Axe_DET); pause(0.01) end for j = 1:sY(1,idxSize) set(handles.Edi_SLICE_Cfs,'String',int2str(j),'UserData',j); slide_Val = (j-1)/(sY(1,idxSize)-1); set(handles.Sli_SLICE_Cfs,'Value',slide_Val); orientSTR = [orient ' = ' int2str(j)]; for k = 1:8 type = typeCompo{k}; dimstr = ['[' int2str(sY(k,:)) ']']; imagesc(abs(Y{k}(:,:,j)),'Parent',axe_IND(k)); str1 = getWavMSG('Wavelet:divGUIRF:Xlab_3D_CFS',type,level); xlabel({str1,dimstr},'Parent',axe_IND(k)) if rem(k,2) title(orientSTR,'Parent',axe_IND(k)) pause(0.05) end end end % Show Decompositions. %--------------------- axe_CMD = [handles.('Axe_ORI'),handles.('Axe_APP'),handles.('Axe_DET')]; axe_ACT = []; dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int'); % End waiting. %------------- set([m_File,btn_Close],'Enable','On'); wwaiting('off',hFig); %------------------------------------------------------------------------- function Pop_3D_DISP_Callback(hObject,eventdata,handles) hFig = handles.output; v = get(hObject,'Value')-1; if v==0; return; end % Cleaning. %---------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); u = get(hObject,'UserData'); levDEC = get(handles.Pop_Lev,'Value'); if v==1 , type = 'A'; lev = 0; Final_Title = getWavMSG('Wavelet:divGUIRF:Final_Title_1'); elseif v==2 set(hObject,'Value',u); wwaiting('off',hFig); return elseif 2<v && v<=2+levDEC type = 'A'; lev = v-2; Final_Title = getWavMSG('Wavelet:divGUIRF:Final_Title_2',lev); elseif v == 3+levDEC set(hObject,'Value',u); wwaiting('off',hFig); return elseif 3+levDEC<v && v<=3+2*levDEC % Components at all levels different from AAA type = 'D'; lev = v-3-levDEC; Final_Title = getWavMSG('Wavelet:divGUIRF:Final_Title_3',lev); elseif v==4+2*levDEC set(hObject,'Value',u); wwaiting('off',hFig); return elseif 4+2*levDEC<v % Components at the same level different from AAA type = 'S'; lev = v-4-2*levDEC; Final_Title = getWavMSG('Wavelet:divGUIRF:Final_Title_4',lev); end fig = open('disp3dwin.fig'); fig_Handles = guihandles(fig); Sli_E = fig_Handles.Sli_E; Sli_A = fig_Handles.Sli_A; Edi_E = fig_Handles.Edi_EL; Edi_A = fig_Handles.Edi_AZ; set(fig,'Name',getWavMSG('Wavelet:divGUIRF:Disp3D_Name')); uic = wfindobj(fig,'type','uicontrol'); tag = get(uic,'tag'); idx = strcmp(tag,'Txt_AZI'); set(uic(idx),'String',getWavMSG('Wavelet:divGUIRF:Azimuth')); idx = strcmp(tag,'text8'); set(uic(idx),'String',getWavMSG('Wavelet:divGUIRF:Elevation')); idx = strcmp(tag,'Pus_CloseWin'); set(uic(idx),'String',getWavMSG('Wavelet:commongui:Str_Close')); try wfigmngr('modify_FigChild',hFig,fig) wdec = wtbxappdata('get',hFig,'wdec'); map = pink(255); switch type case {'A','D'} , XR = waverec3(wdec,type,lev); if any(type=='D') , XR = abs(XR); end case 'S', XR = waverec3(wdec,'A',lev-1) - waverec3(wdec,'A',lev); XR = abs(XR); end colormap(map) % sD = size(XR); % Cvals = round(linspace(1,sD(3),6)); % try % phandles = contourslice(XR,[],[],Cvals,8); % SetView(gca,Sli_A,Sli_E,Edi_A,Edi_E,-37.5,30); axis tight; % set(phandles,'LineWidth',2) % title(sprintf('Wait Computing ... %s','1')) % pause(0.05) % catch %#ok<*CTCH> % wwaiting('off',hFig); % end try Ds = smooth3(XR); hiso = patch(isosurface(Ds,5),'FaceColor',[1,.75,.65], ... 'EdgeColor','none'); title(getWavMSG('Wavelet:commongui:WaitCompute')) pause(0.05) catch %#ok<*CTCH> Finish_3D_DISP(hFig,hObject); end try hcap = patch(isocaps(XR,5),'FaceColor','interp','EdgeColor','none'); colormap(map) title(getWavMSG('Wavelet:commongui:WaitCompute')) pause(1) SetView(gca,Sli_A,Sli_E,Edi_A,Edi_E,45.5,30); axis tight; daspect([1,1,.4]) title(getWavMSG('Wavelet:commongui:WaitCompute')) pause(0.05) catch Finish_3D_DISP(hFig,hObject); end try % Add Lighting lightangle(305,30); set(gcf,'Renderer','zbuffer'); lighting phong isonormals(Ds,hiso) set(hcap,'AmbientStrength',.6) set(hiso,'SpecularColorReflectance',0,'SpecularExponent',50) SetView(gca,Sli_A,Sli_E,Edi_A,Edi_E,215,30); axis tight; title(getWavMSG('Wavelet:commongui:WaitCompute')) pause(0.05) box on catch Finish_3D_DISP(hFig,hObject); end a = gca; v = get(a,'View'); title(getWavMSG('Wavelet:commongui:WaitCompute')) for k = 1:2:20 try SetView(a,Sli_A,Sli_E,Edi_A,Edi_E,v(1)+k,v(2)+k); axis tight; pause(0.1); catch Finish_3D_DISP(hFig,hObject); end end title(Final_Title) catch Finish_3D_DISP(hFig,hObject); end Finish_3D_DISP(hFig,hObject); %------------------------------------------------------------------------- function Finish_3D_DISP(hFig,hObject) % Reset the Popup to "None" set(hObject,'Value',1); wwaiting('off',hFig); %------------------------------------------------------------------------- function SetView(Axe,Sli_A,Sli_E,Edi_A,Edi_E,ValA,ValE) if ValE>180 , ValE = ValE-360; elseif ValE<-180 , ValE = ValE+360; end if ValA>180 , ValA = ValA-360; elseif ValA<-180 , ValA = ValA+360; end set(Sli_A,'Value',ValA); set(Sli_E,'Value',ValE); set(Edi_A,'String',sprintf('%5.1f',ValA)); set(Edi_E,'String',sprintf('%5.1f',ValE)); set(Axe,'View',[ValA,ValE]); %=========================================================================% % END Callback Functions % %=========================================================================% %=========================================================================% % BEGIN Callback Menus % % -------------------- % %=========================================================================% function demo_FUN(hObject,eventdata,handles,numDEM) %#ok<DEFNU> switch numDEM case 1 , filename = 'wmri.mat'; level = 2; case 2 , filename = 'holeinsphere.mat'; level = 2; case 3 , filename = 'column.mat'; level = 3; case 4 , filename = 'movemask.mat'; level = 2; case 5 , filename = 'movecrt128.mat'; level = 3; case 6 , filename = 'knee.mat'; level = 4; end Load_Data_Callback(hObject,eventdata,handles,'demo',filename,level) %------------------------------------------------------------------------- function save_FUN(hObject,eventdata,handles,lastarg) % Get figure handle. %------------------- hFig = handles.output; % Get Data to save. %------------------ switch lastarg case 'dec' strTIT = getWavMSG('Wavelet:divGUIRF:III_D_SaveDEC'); SaveStr = {'wdec'}; case 'app' strTIT = getWavMSG('Wavelet:divGUIRF:III_D_SaveAPP'); levToSave = get(hObject,'Position'); SaveStr = {'X'}; end % Testing file. %-------------- [filename,pathname,ok] = utguidiv('test_save',hFig,'*.mat',strTIT); if ~ok, return; end % Begin waiting. %-------------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitSave')); % Getting Data to Save. %--------------------- wdec = wtbxappdata('get',hFig,'wdec'); if isequal(lastarg,'app') X = waverec3(wdec,'A',levToSave); %#ok<NASGU> end % Saving file. %-------------- [name,ext] = strtok(filename,'.'); if isempty(ext) || isequal(ext,'.') ext = '.mat'; filename = [name ext]; end try save([pathname filename],SaveStr{:}); catch ME %#ok<NASGU> errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg'); end wwaiting('off',hFig); %-------------------------------------------------------------------------% function Export_Callback(hObject,eventdata,handles) %#ok<DEFNU> hFig = handles.output; wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitExport')); dec_3D = wtbxappdata('get',hFig,'wdec'); wtbxexport(dec_3D,'name','dec_3D', ... 'title',getWavMSG('Wavelet:commongui:Str_Decomp')); wwaiting('off',hFig); %-------------------------------------------------------------------------- %=========================================================================% % END Callback Menus % %=========================================================================% %=========================================================================% % BEGIN Tool Initialization % % ------------------------- % %=========================================================================% function Init_Tool(hObject,eventdata,handles) % WTBX -- Install DynVTool %------------------------- dynvtool('Install_V3',hObject,handles); % WTBX -- Initialize GUIDE Figure. %--------------------------------- wfigmngr('beg_GUIDE_FIG',hObject); % WTBX -- Install ANAPAR FRAME %----------------------------- wnameDEF = 'db1'; maxlevDEF = 5; levDEF = 2; utanapar('Install_V3_CB',hObject,'maxlev',maxlevDEF,'deflev',levDEF); cbanapar('set',hObject,'wav',wnameDEF,'lev',levDEF); % WTBX -- Install COLORMAP FRAME %------------------------------- utcolmap('Install_V3',hObject,'Enable','On'); default_nbcolors = 255; cbcolmap('set',hObject,'pal',{'pink',default_nbcolors}) %------------------------------------------------------------------------- % TOOL INITIALISATION %------------------------------------------------------------------------- % UIMENU INSTALLATION %-------------------- hdl_Menus = Install_MENUS(hObject,handles); wtbxappdata('set',hObject,'hdl_Menus',hdl_Menus); %------------------------------------------------ set(hObject,'DefaultAxesXTick',[],'DefaultAxesYTick',[]) %------------------------------------------------------------- % Keep Slice Movie enabled during DYNV Zoom. %------------------------------------------- wtbxappdata('set',hObject,'Keep_DynV_Enabled',handles.Pus_SLICE_MOV); % WTBX -- Terminate GUIDE Figure. %-------------------------------- wfigmngr('end_GUIDE_FIG',hObject,mfilename); %=========================================================================% % END Tool Initialization % %=========================================================================% %=========================================================================% % BEGIN Internal Functions % % ------------------------ % %=========================================================================% function hdl_Menus = Install_MENUS(hFig,handles) m_files = wfigmngr('getmenus',hFig,'file'); m_close = wfigmngr('getmenus',hFig,'close'); cb_close = [mfilename '(''Pus_CloseWin_Callback'',gcbo,[],guidata(gcbo));']; set(m_close,'Callback',cb_close); m_Load_Data = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:Load_Data'), ... 'Position',1,'Enable','On', ... 'Callback', ... [mfilename '(''Load_Data_Callback'',gcbo,[],guidata(gcbo),''load'');'] ... ); m_save = uimenu(m_files,... 'Label',getWavMSG('Wavelet:commongui:Str_Save'),'Position',2, 'Enable','Off' ... ); uimenu(m_save,... 'Label',getWavMSG('Wavelet:dw2dRF:Lab_Decomposition'), ... 'Position',1, 'Enable','On', ... 'Callback',[mfilename '(''save_FUN'',gcbo,[],guidata(gcbo),''dec'');'] ... ); Men_Save_APP = uimenu(m_save,... 'Label',getWavMSG('Wavelet:commongui:Approximations'), ... 'Position',2, 'Enable','On', ... 'Tag','Men_Save_APP' ... ); uimenu(Men_Save_APP,... 'Label',getWavMSG('Wavelet:dw2dRF:AppLevX',1), ... 'Position',1, ... 'Callback',[mfilename '(''save_FUN'',gcbo,[],guidata(gcbo),''app'');'] ... ); m_demo = uimenu(m_files,'Label',getWavMSG('Wavelet:divGUIRF:Example_Anal'),... 'Position',3,'Separator','Off','Tag','Examples'); uimenu(m_files, ... 'Label',getWavMSG('Wavelet:commongui:Import_Data'), ... 'Position',4,'Enable','On' ,'Separator','On','Tag','Import', ... 'Callback', ... [mfilename '(''Load_Data_Callback'',gcbo,[],guidata(gcbo),''import'');'] ... ); m_exp_data = uimenu(m_files, ... 'Label',getWavMSG('Wavelet:divGUIRF:Lab_ExportDec'),'Position',5, ... 'Enable','Off','Separator','Off','Tag','Export',... 'Callback',[mfilename '(''Export_Callback'',gcbo,[],guidata(gcbo));'] ... ); demoPar = {... getWavMSG('Wavelet:divGUIRF:DW3D_Ex1'),'db1',2; ... getWavMSG('Wavelet:divGUIRF:DW3D_Ex2'),'db1',2; ... getWavMSG('Wavelet:divGUIRF:DW3D_Ex3'),'db1',3; ... getWavMSG('Wavelet:divGUIRF:DW3D_Ex4'),'db1',2; ... getWavMSG('Wavelet:divGUIRF:DW3D_Ex5'),'db1',3; ... getWavMSG('Wavelet:divGUIRF:DW3D_Ex6'),'db1',4 ... }; nbDEM = size(demoPar,1); for k = 1:nbDEM strNUM = int2str(k); action = [mfilename '(''demo_FUN'',gcbo,[],guidata(gcbo),' strNUM ');']; demoSET = getWavMSG('Wavelet:divGUIRF:Example_3D',demoPar{k,1:3}); uimenu(m_demo,'Label',demoSET,'Callback',action); end hdl_Menus = struct('m_files',m_files,'m_close',m_close,... 'm_Load_Data',m_Load_Data,... 'm_save',m_save,'m_demo',m_demo,'m_exp_data',m_exp_data); % Add Help for Tool. %------------------ %------------------------------------------------------------------------- %=========================================================================% % END Internal Functions % %=========================================================================% %------------------------------------------------------------------------- function Pop_ExtM_Callback(hObject, eventdata, handles) %#ok<DEFNU> %------------------------------------------------------------------------- function Pop_Wav_Num_Y_Callback(hObject, eventdata, handles) %#ok<DEFNU> Pop_Wav_Fam = handles.Pop_Wav_Fam_Y; Pop_Wav_Num = handles.Pop_Wav_Num_Y; cbanapar('cba_num',gcbf,[Pop_Wav_Fam Pop_Wav_Num]) %------------------------------------------------------------------------- function Pop_Wav_Fam_Y_Callback(hObject,eventdata,handles) %#ok<*INUSL,DEFNU> Pop_Wav_Fam = handles.Pop_Wav_Fam_Y; Pop_Wav_Num = handles.Pop_Wav_Num_Y; cbanapar('cba_fam',gcbf,[Pop_Wav_Fam Pop_Wav_Num]) %------------------------------------------------------------------------- function Pop_Wav_Num_Z_Callback(hObject,eventdata,handles) %#ok<*INUSD,DEFNU> Pop_Wav_Fam = handles.Pop_Wav_Fam_Z; Pop_Wav_Num = handles.Pop_Wav_Num_Z; cbanapar('cba_num',gcbf,[Pop_Wav_Fam Pop_Wav_Num]) %------------------------------------------------------------------------- function Pop_Wav_Fam_Z_Callback(hObject,eventdata,handles) %#ok<DEFNU> Pop_Wav_Fam = handles.Pop_Wav_Fam_Z; Pop_Wav_Num = handles.Pop_Wav_Num_Z; cbanapar('cba_fam',gcbf,[Pop_Wav_Fam Pop_Wav_Num]) %------------------------------------------------------------------------- function Pop_LEV_DISP_Callback(hObject,eventdata,handles) %#ok<DEFNU> % Begin waiting. %-------------- hFig = handles.output; wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); % Compute Decomposition Components. %---------------------------------- Compute_Dec_Components(handles) % Display Analysis. %------------------ Display_Analysis(handles) % End waiting. %------------- wwaiting('off',hFig); %------------------------------------------------------------------------- function Display_Analysis(handles) hFig = handles.output; % Begin waiting. %-------------- wwaiting('msg',hFig,getWavMSG('Wavelet:commongui:WaitCompute')); sliceVAL = 1; level = get(handles.Pop_LEV_DISP,'Value'); tmp = get(handles.Pop_Slice_ORIENT,{'Value','String'}); orient = tmp{2}{tmp{1}}; switch orient case 'X' , perm = [3 2 1]; case 'Y' , perm = [3 1 2]; case 'Z' , perm = [1 2 3]; end idxSize = perm(3); orientSTR = [orient ' = ' int2str(sliceVAL)]; wdec = wtbxappdata('get',hFig,'wdec'); sizeDEC = wdec.sizes; levDISP = get(handles.Pop_LEV_DISP,'Value'); nbSliceREC = sizeDEC(end,idxSize); nbSliceCFS = sizeDEC(end-levDISP,idxSize); set(handles.Txt_SLICE_Rec,'String', ... getWavMSG('Wavelet:divGUIRF:Txt_SLICE_Rec',orient,nbSliceREC)); set(handles.Sli_SLICE_Rec,'Value',0,'UserData',sizeDEC); wtbxappdata('set',hFig,'Sli_Rec_VAL',0); set(handles.Edi_SLICE_Rec,'String',int2str(sliceVAL),'UserData',sliceVAL); set(handles.Txt_SLICE_Cfs,'String', ... getWavMSG('Wavelet:divGUIRF:Txt_SLICE_Cfs',orient,nbSliceCFS)); set(handles.Sli_SLICE_Cfs,'Value',0,'UserData',sizeDEC); wtbxappdata('set',hFig,'Sli_Cfs_VAL',0); set(handles.Edi_SLICE_Cfs,'String',int2str(sliceVAL),'UserData',sliceVAL); X = wtbxappdata('get',hFig,'ORI_Data'); sX = size(X); dimstr = ['[' int2str(sX) ']']; X = permORIENT(X,perm); Axe_ORI = handles.('Axe_ORI'); imagesc(X(:,:,sliceVAL),'Parent',Axe_ORI); xlabel({getWavMSG('Wavelet:divGUIRF:Final_Title_1'),dimstr},'Parent',Axe_ORI) title(orientSTR,'Parent',Axe_ORI); Y = wtbxappdata('get',hFig,'LowComp'); sY = size(Y); dimstr = ['[' int2str(sY) ']']; Y = permORIENT(Y,perm); Axe_APP = handles.('Axe_APP'); imagesc(Y(:,:,sliceVAL),'Parent',Axe_APP); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_APP',level),dimstr},'Parent',Axe_APP) title(orientSTR,'Parent',Axe_APP); Y = wtbxappdata('get',hFig,'HighComp'); sY = size(Y); dimstr = ['[' int2str(sY) ']']; Y = permORIENT(Y,perm); Axe_DET = handles.('Axe_DET'); imagesc(abs(Y(:,:,sliceVAL)),'Parent',Axe_DET); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_DET',level),dimstr},'Parent',Axe_DET) title(orientSTR,'Parent',Axe_DET); typeCompo = {'AAA','AAD','ADA','ADD','DAA','DAD','DDA','DDD'}; axe_IND = zeros(1,8); for k = 1:8 type = typeCompo{k}; Y = wtbxappdata('get',hFig,[type 'Comp']); sY = size(Y); dimstr = ['[' int2str(sY) ']']; Y = permORIENT(Y,perm); axe_IND(k) = handles.(['Axe_' type]); imagesc(abs(Y(:,:,sliceVAL)),'Parent',axe_IND(k)); str1 = getWavMSG('Wavelet:divGUIRF:Xlab_3D_CFS',type,level); xlabel({str1,dimstr},'Parent',axe_IND(k)) if rem(k,2) title(orientSTR,'Parent',axe_IND(k)); end end % Show Decompositions. %--------------------- axe_CMD = [handles.('Axe_ORI'),handles.('Axe_APP'),handles.('Axe_DET')]; axe_ACT = []; dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int'); % End waiting. %------------- wwaiting('off',hFig); %------------------------------------------------------------------------- function SLICE_Rec_Callback(hObject,eventdata,handles) %#ok<DEFNU> hFig = handles.output; type_Call = get(hObject,'Style'); type_Call = lower(type_Call(1:3)); tmp = get(handles.Pop_Slice_ORIENT,{'Value','String'}); orient = tmp{2}{tmp{1}}; switch orient case 'X' , perm = [3 2 1]; case 'Y' , perm = [3 1 2]; case 'Z' , perm = [1 2 3]; end idxSize = perm(3); sX = wtbxappdata('get',hFig,'SizeOfData'); old_Slide_VAL = wtbxappdata('get',hFig,'Sli_Rec_VAL'); max_Slice_VAL = sX(idxSize); switch type_Call case 'sli' cur_slide_Val = get(hObject,'Value'); delta = cur_slide_Val-old_Slide_VAL; if delta>0 sliceVAL = ceil(cur_slide_Val*(max_Slice_VAL-1)+1); elseif delta<0 sliceVAL = floor(cur_slide_Val*(max_Slice_VAL-1)+1); else return; end cur_slide_Val = (sliceVAL-1)/(max_Slice_VAL-1); ok = true; case 'edi' val = str2double(get(hObject,'String')); if ~isnan(val) val = round(val); ok = (1<=val) && (val<=max_Slice_VAL); else ok = false; end if ok set(hObject,'String',int2str(val),'UserData',val) cur_slide_Val = (val-1)/(max_Slice_VAL-1); sliceVAL = val; else val = get(hObject,'UserData'); set(hObject,'String',int2str(val)) end end if ~ok , return; end set(handles.Sli_SLICE_Rec,'Value',cur_slide_Val); wtbxappdata('set',hFig,'Sli_Rec_VAL',cur_slide_Val); set(handles.Edi_SLICE_Rec,'String',int2str(sliceVAL),'UserData',sliceVAL); X = wtbxappdata('get',hFig,'ORI_Data'); L = wtbxappdata('get',hFig,'LowComp'); H = wtbxappdata('get',hFig,'HighComp'); sX = size(X); dimstrX = ['[' int2str(sX) ']']; sL = size(L); dimstrL = ['[' int2str(sL) ']']; sH = size(H); dimstrH = ['[' int2str(sH) ']']; X = permORIENT(X,perm); L = permORIENT(L,perm); H = permORIENT(H,perm); level = get(handles.Pop_LEV_DISP,'Value'); orientSTR = [orient ' = ' int2str(sliceVAL)]; Axe_ORI = handles.Axe_ORI; image(X(:,:,sliceVAL),'Parent',Axe_ORI); xlabel({getWavMSG('Wavelet:divGUIRF:Final_Title_1'),dimstrX},'Parent',Axe_ORI) title(orientSTR,'Parent',Axe_ORI); pause(0.01) Axe_APP = handles.('Axe_APP'); imagesc(L(:,:,sliceVAL),'Parent',Axe_APP); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_APP',level),dimstrL},'Parent',Axe_APP) title(orientSTR,'Parent',Axe_APP); Axe_DET = handles.('Axe_DET'); imagesc(abs(H(:,:,sliceVAL)),'Parent',Axe_DET); xlabel({getWavMSG('Wavelet:divGUIRF:Xlab_3D_DET',level),dimstrH},'Parent',Axe_DET) title(orientSTR,'Parent',Axe_DET); pause(0.01) % Show Decompositions. %--------------------- typeCompo = {'AAA','AAD','ADA','ADD','DAA','DAD','DDA','DDD'}; axe_IND = zeros(1,8); for k = 1:8 type = typeCompo{k}; axe_IND(k) = handles.(['Axe_' type]); end axe_CMD = [handles.('Axe_ORI'),handles.('Axe_APP'),handles.('Axe_DET')]; axe_ACT = []; dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int'); %------------------------------------------------------------------------- function SLICE_Cfs_Callback(hObject,eventdata,handles) %#ok<DEFNU> hFig = handles.output; type_Call = get(hObject,'Style'); type_Call = lower(type_Call(1:3)); tmp = get(handles.Pop_Slice_ORIENT,{'Value','String'}); orient = tmp{2}{tmp{1}}; switch orient case 'X' , perm = [3 2 1]; case 'Y' , perm = [3 1 2]; case 'Z' , perm = [1 2 3]; end Y = wtbxappdata('get',hFig,'AAAComp'); sY = size(Y); idxSize = perm(3); level = get(handles.Pop_LEV_DISP,'Value'); old_Slide_VAL = wtbxappdata('get',hFig,'Sli_Cfs_VAL'); max_Slice_VAL = sY(idxSize); switch type_Call case 'sli' cur_slide_Val = get(hObject,'Value'); delta = cur_slide_Val-old_Slide_VAL; if delta>0 sliceVAL = ceil(cur_slide_Val*(max_Slice_VAL-1)+1); elseif delta<0 sliceVAL = floor(cur_slide_Val*(max_Slice_VAL-1)+1); else return; end cur_slide_Val = (sliceVAL-1)/(max_Slice_VAL-1); ok = true; case 'edi' val = str2double(get(hObject,'String')); tmp = get(handles.Sli_SLICE_Cfs,{'Value','UserData'}); if ~isnan(val) val = round(val); nbSlice = tmp{2}(end-level,idxSize); ok = (1<=val) && (val<=nbSlice); else ok = false; end if ok set(hObject,'String',int2str(val),'UserData',val) cur_slide_Val = (val-1)/(nbSlice-1); sliceVAL = val; else val = get(hObject,'UserData'); set(hObject,'String',int2str(val)) end end if ~ok , return; end set(handles.Sli_SLICE_Cfs,'Value',cur_slide_Val); wtbxappdata('set',hFig,'Sli_Cfs_VAL',cur_slide_Val); set(handles.Edi_SLICE_Cfs,'String',int2str(sliceVAL),'UserData',sliceVAL); orientSTR = [orient ' = ' int2str(sliceVAL)]; dimstr = ['[' int2str(sY) ']']; typeCompo = {'AAA','AAD','ADA','ADD','DAA','DAD','DDA','DDD'}; axe_IND = zeros(1,8); for k = 1:8 type = typeCompo{k}; Y = wtbxappdata('get',hFig,[type 'Comp']); Y = permORIENT(Y,perm); axe_IND(k) = handles.(['Axe_' type]); imagesc(abs(Y(:,:,sliceVAL)),'Parent',axe_IND(k)); str1 = getWavMSG('Wavelet:divGUIRF:Xlab_3D_CFS',type,level); xlabel({str1,dimstr},'Parent',axe_IND(k)) if rem(k,2) title(orientSTR,'Parent',axe_IND(k)); end pause(0.01) end % Show Decompositions. %--------------------- axe_CMD = [handles.('Axe_ORI'),handles.('Axe_APP'),handles.('Axe_DET')]; axe_ACT = []; dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int'); %------------------------------------------------------------------------- function Pop_Slice_ORIENT_Callback(hObject,eventdata,handles) %#ok<DEFNU> Display_Analysis(handles); %------------------------------------------------------------------------- function Y = permORIENT(Y,perm) Y = permute(Y,perm); %------------------------------------------------------------------------- function Compute_Dec_Components(handles) hFig = handles.output; wdec = wtbxappdata('get',hFig,'wdec'); level = get(handles.Pop_LEV_DISP,'Value'); Y = waverec3(wdec,'A',level); wtbxappdata('set',hFig,'LowComp',Y); Y = waverec3(wdec,'D',level); wtbxappdata('set',hFig,'HighComp',Y); typeCompo = {'AAA','AAD','ADA','ADD','DAA','DAD','DDA','DDD'}; for k = 1:8 type = typeCompo{k}; Y = waverec3(wdec,['C' type],level); wtbxappdata('set',hFig,[type 'Comp'],Y); end %------------------------------------------------------------------------- function wname = getWname(Pop_Wav_Fam,Pop_Wav_Num) wf = get(Pop_Wav_Fam,{'Style','String','Value'}); if isequal(wf{1},'edit') fam = wf{2}; else if iscell(wf{2}) fam = wf{2}{wf{3}}; else fam = wf{2}(wf{3},:); end end fam = deblank(fam); wf = get(Pop_Wav_Num,{'Style','String','Value'}); if ~isequal(wf{1},'edit') strn = wf{2}; if ~isempty(strn) if iscell(strn) strn = deblank(strn{wf{3}}); else strn = deblank(strn(wf{3},:)); end if strcmp(strn,'no') , strn = ''; end else strn = ''; end else strn = deblank(wf{2}); if strcmp(strn,'no') , strn = ''; end end wname = [fam strn]; %------------------------------------------------------------------------- function Add_OR_Del_SaveAPPMenu(win_tool,Level_Anal) % Add or Delete Save APP-Menu %------------------------------ Men_Save_APP = findobj(win_tool,'Type','uimenu','Tag','Men_Save_APP'); child = get(Men_Save_APP,'Children'); delete(child); cb_STR = [mfilename '(''save_FUN'',gcbo,[],guidata(gcbo),''app'');']; for k = 1:Level_Anal labSTR = getWavMSG('Wavelet:commongui:App',k); uimenu(Men_Save_APP,'Label',labSTR,'Position',k, ... 'Callback',cb_STR ... ); end %-------------------------------------------------------------------------