www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wp2ddeno.m
function varargout = wp2ddeno(option,varargin) %WP2DDENO Wavelet packets 2-D de-noising. % VARARGOUT = WP2DDENO(OPTION,VARARGIN) % M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96. % Last Revision 08-May-2012. % Copyright 1995-2012 The MathWorks, Inc. % Memory Blocks of stored values. %================================ % MB1 (main window). %------------------- n_param_anal = 'WP2D_Par_Anal'; ind_img_name = 1; ind_wav_name = 2; % ind_lev_anal = 3; ind_ent_anal = 4; ind_ent_par = 5; ind_img_size = 6; % ind_img_t_name = 7; % ind_act_option = 8; ind_thr_val = 9; % nb1_stored = 9; % MB2 (main window). %------------------- n_wp_utils = 'WP_Utils'; % ind_tree_lin = 1; % ind_tree_txt = 2; % ind_type_txt = 3; % ind_sel_nodes = 4; % ind_gra_area = 5; ind_nb_colors = 6; % nb2_stored = 6; % MB1 (local). %------------- n_misc_loc = ['MB1_' mfilename]; ind_sav_menus = 1; ind_status = 2; ind_win_caller = 3; ind_axe_datas = 4; ind_hdl_datas = 5; % ind_cfsMode = 6; nbLOC_1_stored = 6; % MB2 (local). %------------- n_thrDATA = 'thrDATA'; ind_value = 1; nbLOC_2_stored = 1; if ~isequal(option,'create') , win_denoise = varargin{1}; end switch option case 'create' % Get Globals. %------------- [Def_Btn_Height,Y_Spacing,Def_FraBkColor] = ... mextglob('get','Def_Btn_Height','Y_Spacing','Def_FraBkColor'); % Calling figure. %---------------- win_caller = varargin{1}; % Window initialization. %---------------------- win_name = getWavMSG('Wavelet:wp1d2dRF:NamWinDenoWP_2D'); [win_denoise,pos_win,win_units,str_win_denoise,pos_frame0] = ... wfigmngr('create',win_name,'','ExtFig_CompDeno', ... {mfilename,'cond'},1,1,0); set(win_denoise,'UserData',win_caller); if nargout>0 , varargout{1} = win_denoise; end % Add Help Item. %---------------- wfighelp('addHelpItem',win_denoise, ... getWavMSG('Wavelet:commongui:HLP_DenoProc'),'DENO_PROCEDURE'); wfighelp('addHelpItem',win_denoise, ... getWavMSG('Wavelet:commongui:HLP_AvailMeth'),'COMP_DENO_METHODS'); % Menu construction for current figure. %-------------------------------------- m_save = wfigmngr('getmenus',win_denoise,'save'); sav_menus(1) = uimenu(m_save,... 'Label',getWavMSG('Wavelet:commongui:DenoImg'), ... 'Position',1, ... 'Enable','Off', ... 'Callback', ... [mfilename '(''save_synt'',' ... str_win_denoise ');'] ... ); sav_menus(2) = uimenu(m_save,... 'Label',getWavMSG('Wavelet:commongui:Str_Decomp'), ... 'Position',2, ... 'Enable','Off', ... 'Callback', ... [mfilename '(''save_dec'',' ... str_win_denoise ');'] ... ); m_file = get(m_save,'Parent'); pos = get(m_save,'Position'); m_gen = uimenu(m_file,... 'Label',getString(message('Wavelet:commongui:GenerateMATLABDenoise')), ... 'Position',pos+1, ... 'Enable','Off', ... 'Separator','Off', ... 'Callback', ... ['wsaveprocess(''wp2ddeno'',' ... str_win_denoise ');'] ... ); wtbxappdata('set',win_denoise,'M_GenCode',m_gen); % Begin waiting. %--------------- wwaiting('msg',win_denoise,getWavMSG('Wavelet:commongui:WaitInit')); % Getting variables from wp2dtool figure memory block. %----------------------------------------------------- WP_Tree = wtbxappdata('get',win_caller,'WP_Tree'); depth = treedpth(WP_Tree); [Img_Name,Wav_Name,Img_Size,Ent_Nam,Ent_Par] = ... wmemtool('rmb',win_caller,n_param_anal, ... ind_img_name,ind_wav_name, ... ind_img_size, ... ind_ent_anal,ind_ent_par); vis_UTCOLMAP = wtbxappdata('get',win_caller,'vis_UTCOLMAP'); wtbxappdata('set',win_denoise,'vis_UTCOLMAP',vis_UTCOLMAP); % General graphical parameters initialization. %-------------------------------------------- dy = Y_Spacing; % Command part of the window. %============================ % Data, Wavelet and Level parameters. %------------------------------------ xlocINI = pos_frame0([1 3]); ytopINI = pos_win(4)-dy; toolPos = utanapar('create_copy',win_denoise, ... {'xloc',xlocINI,'top',ytopINI},... {'n_s',{Img_Name,Img_Size},'wav',Wav_Name,'lev',depth} ... ); % Entropy parameters. %-------------------- ytopENT = toolPos(2)-4*dy; toolPos = utentpar('create_copy',win_denoise, ... {'xloc',xlocINI,'top',ytopENT,... 'ent',{Ent_Nam,Ent_Par}} ... ); % Global De-noising tool. %------------------------ ytopTHR = toolPos(2)-4*dy; utthrwpd('create',win_denoise,'toolOPT','wpdeno2', ... 'xloc',xlocINI,'top',ytopTHR ... ); % Adding colormap GUI. %--------------------- pop_pal_caller = cbcolmap('get',win_caller,'pop_pal'); prop_pal = get(pop_pal_caller,{'String','Value','UserData'}); utcolmap('create',win_denoise, ... 'xloc',xlocINI, ... 'bkcolor',Def_FraBkColor, ... 'enable','on'); pop_pal_loc = cbcolmap('get',win_denoise,'pop_pal'); set(pop_pal_loc,'String',prop_pal{1},'Value',prop_pal{2}, ... 'UserData',prop_pal{3}); set(win_denoise,'Colormap',get(win_caller,'Colormap')); cbcolmap('Visible',win_denoise,vis_UTCOLMAP); % Axes construction. %=================== % General graphical parameters initialization. %-------------------------------------------- bdx = 0.08*pos_win(3); ecx = 0.04*pos_win(3); bdy = 0.06*pos_win(4); % ecy = 0.03*pos_win(4); y_graph = 2*Def_Btn_Height+dy; h_graph = pos_frame0(4)-y_graph; w_graph = pos_frame0(1); % Building axes for original image. %---------------------------------- x_axe = bdx; w_axe = (w_graph-ecx-3*bdx/2)/2; h_axe = (h_graph-3*bdy)/2; y_axe = y_graph+h_graph-h_axe-bdy; cx_ori = x_axe+w_axe/2; cy_ori = y_axe+h_axe/2; cx_den = cx_ori+w_axe+ecx; cy_den = cy_ori; [w_used,h_used] = wpropimg(Img_Size,w_axe,h_axe,'pixels'); pos_axe = [cx_ori-w_used/2 cy_ori-h_used/2 w_used h_used]; axe_datas(1) = axes('Parent',win_denoise,... 'Units',win_units,... 'Position',pos_axe,... 'Box','On'); % Displaying original image. %--------------------------- Img_Anal = get(wp2ddraw('r_orig',win_caller),'CData'); hdl_datas = [NaN NaN]; hdl_datas(1) = image([1 Img_Size(1)],[1,Img_Size(2)],Img_Anal,... 'Parent',axe_datas(1)); wtitle(getWavMSG('Wavelet:commongui:OriImg'),'Parent',axe_datas(1)); % Building axes for de-noised image. %----------------------------------- pos_axe = [cx_den-w_used/2 cy_den-h_used/2 w_used h_used]; xylim = get(axe_datas(1),{'XLim','YLim'}); axe_datas(2) = axes('Parent',win_denoise,... 'Units',win_units,... 'Position',pos_axe,... 'Visible','off',... 'Box','On',... 'XLim',xylim{1},... 'YLim',xylim{2}); % Initializing threshold. %------------------------ [valTHR,maxTHR,cfs] = ... wp2ddeno('compute_GBL_THR',win_denoise,win_caller); utthrwpd('setThresh',win_denoise,[0,valTHR,maxTHR]); % Displaying perfos. %------------------- x_axe = bdx; y_axe = y_graph+bdy; pos_axe_perfo = [x_axe y_axe w_axe h_axe]; x_axe = bdx+w_axe+ecx; y_axe = y_graph+bdy; pos_axe_histo = [x_axe y_axe w_axe h_axe]; utthrwpd('displayPerf',win_denoise,pos_axe_perfo,pos_axe_histo,cfs); % Memory blocks update. %---------------------- utthrwpd('set',win_denoise,'handleORI',hdl_datas(1)); wmemtool('ini',win_denoise,n_misc_loc,nbLOC_1_stored); wmemtool('wmb',win_denoise,n_misc_loc, ... ind_sav_menus,sav_menus, ... ind_status,0, ... ind_win_caller,win_caller, ... ind_axe_datas,axe_datas, ... ind_hdl_datas,hdl_datas ... ); wmemtool('ini',win_denoise,n_thrDATA,nbLOC_2_stored); % Axes attachment. %----------------- axe_cmd = axe_datas; dynvtool('init',win_denoise,[],axe_cmd,[],[1 1]); % Setting units to normalized. %----------------------------- wfigmngr('normalize',win_denoise); set(win_denoise,'Visible','On'); % End waiting. %------------- wwaiting('off',win_denoise); case 'denoise' wp2ddeno('clear_GRAPHICS',win_denoise); % Waiting message. %----------------- wwaiting('msg',win_denoise,getWavMSG('Wavelet:commongui:WaitCompute')); % Getting memory blocks. %----------------------- [axe_datas,hdl_datas] = wmemtool('rmb',win_denoise,n_misc_loc, ... ind_axe_datas,ind_hdl_datas); win_caller = wmemtool('rmb',win_denoise,n_misc_loc,ind_win_caller); WP_Tree = wtbxappdata('get',win_caller,'WP_Tree'); Img_Size = wmemtool('rmb',win_caller,n_param_anal,ind_img_size); % De-noising depending on the selected thresholding mode. %-------------------------------------------------------- [numMeth,meth,threshold,sorh] = utthrwpd('get_GBL_par',win_denoise); %#ok<ASGLU> thrParams = {sorh,'nobest',threshold,1}; [C_Img,C_Tree] = wpdencmp(WP_Tree,thrParams{:}); C_Data = []; % Displaying de-noised image. %---------------------------- img_deno = hdl_datas(2); if ~ishandle(img_deno) xylim = get(axe_datas(1),{'XLim','YLim'}); img_deno = image([1 Img_Size(1)],[1,Img_Size(2)],... wd2uiorui2d('d2uint',C_Img),'Parent',axe_datas(2)); set(axe_datas(2),'XLim',xylim{1},'YLim',xylim{2}); hdl_datas(2) = img_deno; utthrwpd('set',win_denoise,'handleTHR',hdl_datas(2)); wmemtool('wmb',win_denoise,n_misc_loc,ind_hdl_datas,hdl_datas); else set(img_deno,'CData',wd2uiorui2d('d2uint',C_Img)); end set(findobj(axe_datas(2)),'Visible','on'); wtitle(getWavMSG('Wavelet:commongui:DenoImg'),'Parent',axe_datas(2)); % Memory blocks update. %---------------------- wmemtool('wmb',win_denoise,n_thrDATA,ind_value, ... {C_Img,C_Tree,C_Data,threshold}); wp2ddeno('enable_menus',win_denoise,'on'); % End waiting. %------------- wwaiting('off',win_denoise); case 'compute_GBL_THR' win_caller = varargin{2}; pause(0.01) [numMeth,meth] = utthrwpd('get_GBL_par',win_denoise); %#ok<ASGLU> WP_Tree = wtbxappdata('get',win_caller,'WP_Tree'); [valTHR,maxTHR,cfs] = wthrmngr('wp2ddenoGBL',meth,WP_Tree); if nargout==1 varargout = {valTHR}; else varargout = {valTHR,maxTHR,cfs}; end case 'update_GBL_meth' wp2ddeno('clear_GRAPHICS',win_denoise); win_caller = wmemtool('rmb',win_denoise,n_misc_loc,ind_win_caller); valTHR = wp2ddeno('compute_GBL_THR',win_denoise,win_caller); utthrwpd('update_GBL_meth',win_denoise,valTHR); case 'clear_GRAPHICS' % Disable save Menus. %-------------------- wp2ddeno('enable_menus',win_denoise,'off'); % Get Handles. %------------- axe_datas = wmemtool('rmb',win_denoise,n_misc_loc,ind_axe_datas); % Setting the de-noised coefs axes invisible. %-------------------------------------------- axe_deno = axe_datas(2); if strcmpi(get(axe_deno,'Visible'),'on') set(findobj(axe_deno),'Visible','off'); wtitle(getWavMSG('Wavelet:commongui:OriImg'),'Parent',axe_datas(1)); drawnow end case 'enable_menus' enaVal = varargin{2}; sav_menus = wmemtool('rmb',win_denoise,n_misc_loc,ind_sav_menus); m_gen = wtbxappdata('get',win_denoise,'M_GenCode'); set([sav_menus,m_gen],'Enable',enaVal); utthrwpd('enable_tog_res',win_denoise,enaVal); if strncmpi(enaVal,'on',2) , status = 1; else status = 0; end wmemtool('wmb',win_denoise,n_misc_loc,ind_status,status); case 'save_synt' win_caller = wmemtool('rmb',win_denoise,n_misc_loc,ind_win_caller); wname = wmemtool('rmb',win_caller,n_param_anal,ind_wav_name); thrDATA = wmemtool('rmb',win_denoise,n_thrDATA,ind_value); X = round(thrDATA{1}); valTHR = thrDATA{4}; utguidiv('save_img',getWavMSG('Wavelet:commongui:Sav_Deno_Img'), ... win_denoise,X,'wname',wname,'valTHR',valTHR); case 'save_dec' % Testing file. %-------------- [filename,pathname,ok] = utguidiv('test_save',win_denoise, ... '*.wp2',getWavMSG('Wavelet:wp1d2dRF:SaveWP2D')); if ~ok, return; end % Begin waiting. %-------------- wwaiting('msg',win_denoise,getWavMSG('Wavelet:commongui:WaitSaveDec')); % Getting Analysis values. %------------------------- win_caller = wmemtool('rmb',win_denoise,n_misc_loc,ind_win_caller); map = cbcolmap('get',win_caller,'self_pal'); if isempty(map) nb_colors = wmemtool('rmb',win_caller,n_wp_utils,ind_nb_colors); map = pink(nb_colors); %#ok<NASGU> end data_name = wmemtool('rmb',win_caller,n_param_anal,ind_img_name); %#ok<NASGU> thrDATA = wmemtool('rmb',win_denoise,n_thrDATA,ind_value); tree_struct = thrDATA{2}; %#ok<NASGU> valTHR = thrDATA{4}; %#ok<NASGU> % Saving file. %-------------- [name,ext] = strtok(filename,'.'); if isempty(ext) || isequal(ext,'.') ext = '.wp2'; filename = [name ext]; end saveStr = {'tree_struct','map','data_name','valTHR'}; wwaiting('off',win_denoise); try save([pathname filename],saveStr{:}); catch %#ok<CTCH> errargt(mfilename,getWavMSG('Wavelet:commongui:SaveFail'),'msg'); end case 'close' [status,win_caller] = wmemtool('rmb',win_denoise,n_misc_loc,... ind_status,ind_win_caller); if status==1 % Test for Updating. %-------------------- status = wwaitans({win_denoise,getWavMSG('Wavelet:wp1d2dRF:WinDenoWP_2D')},... getWavMSG('Wavelet:commongui:UpdateSI'),2,'cancel'); end switch status case 1 wwaiting('msg',win_denoise,getWavMSG('Wavelet:commongui:WaitCompute')); thrDATA = wmemtool('rmb',win_denoise,n_thrDATA,ind_value); valTHR = thrDATA{4}; wmemtool('wmb',win_caller,n_param_anal,ind_thr_val,valTHR); hdl_datas = wmemtool('rmb',win_denoise,n_misc_loc,ind_hdl_datas); img_deno = hdl_datas(2); wp2dmngr('return_deno',win_caller,status,img_deno); wwaiting('off',win_denoise); case 0 , wp2dmngr('return_deno',win_caller,status); end if nargout>0 , varargout{1} = status; end otherwise errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg'); error(message('Wavelet:FunctionArgVal:Invalid_ArgVal')); end