www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/cf2dtool.m

    function varargout = cf2dtool(option,varargin)
%CF2DTOOL Wavelet Coefficients Selection 2-D tool.
%   VARARGOUT = CF2DTOOL(OPTION,VARARGIN)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 10-Jun-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.12.4.18 $  $Date: 2013/07/05 04:29:35 $

% Test inputs.
%-------------
if nargin==0 , option = 'create'; end
[option,winAttrb] = utguidiv('ini',option,varargin{:});

% Default values.
%----------------
max_lev_anal = 8;
default_nbcolors = 255;
  
% Memory Blocs of stored values.
%===============================
% MB0.
%-----
n_membloc0 = 'MB0';
ind_sig    = 1;
ind_coefs  = 2;
ind_longs  = 3;
ind_first  = 4;
ind_last   = 5;
ind_sort   = 6;
ind_By_Lev = 7;
ind_sizes  = 8;
nb0_stored = 8;

% MB1.
%-----
n_membloc1   = 'MB1';
ind_img_name = 1;
ind_img_size = 2;
ind_wav_name = 3;
ind_lev_anal = 4;
ind_nbcolors = 5;
nb1_stored   = 4;

% MB2.
%-----
n_membloc2   = 'MB2';
ind_filename = 1;
ind_pathname = 2;
nb2_stored   = 2;

% MB3.
%-----
n_membloc3 = 'MB3';
% ind_s_img  = 1;
nb3_stored = 1;

% Tag property of objects.
%-------------------------
tag_pus_ana = 'Pus_Anal';

if ~isequal(option,'create') , win_tool = varargin{1}; end

switch option
  case 'create'
  case 'pos_axes'
  otherwise
    toolATTR = wfigmngr('getValue',win_tool,'ToolATTR');
    hdl_UIC  = toolATTR.hdl_UIC;
    hdl_MEN  = toolATTR.hdl_MEN;
    pos_GRA  = toolATTR.pos_GRA;
    hdl_BIG_AXE = toolATTR.hdl_BIG_AXE;
    hdl_DEC_AXE = toolATTR.hdl_DEC_AXE;
    hdl_BIG_IMG = toolATTR.hdl_BIG_IMG;
    pus_ana  = hdl_UIC.pus_ana;
    c_axeBIG = struct2cell(hdl_BIG_AXE);
    [axe_ori_IMG,axe_syn_IMG,axe_ori_DEC,axe_syn_DEC] = deal(c_axeBIG{:});
    axe_dec_ORI = hdl_DEC_AXE.axe_dec_ORI;
    axe_dec_SYN = hdl_DEC_AXE.axe_dec_SYN;
end

switch option
  case 'create'
    % Get Globals.
    %--------------
    [Def_Btn_Height,Def_Btn_Width,Y_Spacing,Def_FraBkColor ] = ...
        mextglob('get',...
            'Def_Btn_Height','Def_Btn_Width','Y_Spacing','Def_FraBkColor' ...
            );

    % Window initialization.
    %----------------------
    win_title = getWavMSG('Wavelet:divGUIRF:CF2D_Name');
    [win_tool,pos_win,win_units,str_numwin,...
        pos_frame0,Pos_Graphic_Area] = ...
            wfigmngr('create',win_title,winAttrb,'ExtFig_Tool_3',mfilename,1,1,0);
    if nargout>0 , varargout{1} = win_tool; end
		
	% Add Coloration Mode Submenu.
	%-----------------------------
	wfigmngr('add_CCM_Menu',win_tool);

	% Add Help for Tool.
	%------------------
	wfighelp('addHelpTool',win_tool, ...
        getWavMSG('Wavelet:divGUIRF:CF2D_HLP_Sel'),'CF2D_GUI');
	
    % Menus construction.
    %--------------------
    m_files = wfigmngr('getmenus',win_tool,'file');	
    m_load  = uimenu(m_files,'Label', ...
        getWavMSG('Wavelet:commongui:Load_Image'),'Position',1, ...
        'Callback',[mfilename '(''load'',' str_numwin ');']  ...        
        );
    m_save = uimenu(m_files,...
        'Label',getWavMSG('Wavelet:commongui:SaveSI'),...
        'Position',2,     ...
        'Enable','Off',   ...
        'Callback',[mfilename '(''save'',' str_numwin ');'] ...
        );
    m_demo = uimenu(m_files,'Label', ...
        getWavMSG('Wavelet:commongui:Lab_Example'),'Position',3);
    m_demoIDX = uimenu(m_demo, ...
        'Label',getWavMSG('Wavelet:commongui:Lab_IndImg'), ...
        'Tag','Lab_IndImg','Position',1);
    m_demoCOL = uimenu(m_demo, ...
        'Label',getWavMSG('Wavelet:commongui:Lab_ColImg'), ...
        'Tag','Lab_ColImg','Position',2);
    
    uimenu(m_files, ...
        'Label',getWavMSG('Wavelet:commongui:Str_ImpImg'),   ...
        'Position',4,'Separator','On','Tag','Import',...
        'Callback',[mfilename '(''load'',' str_numwin ',''wrks'');']...
        );
    m_exp_sig = uimenu(m_files, ...
        'Label',getWavMSG('Wavelet:commongui:Str_ExpImg'),   ...
        'Position',5,'Enable','Off','Separator','Off','Tag','Export',...
        'Callback',[mfilename '(''exp_wrks'',' str_numwin ');'] ...
        );
    
    % Submenu for DEMOS.
    %-------------------
    demoCell = {...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_noiswom'), ...
            'noiswom' , 'haar'   , 3, '{''Global''}' , 'BW' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_noiswom_MOV'), ...
            'noiswom' , 'haar'   , 3, '{''Stepwise'',[144,100,3144]}'  , 'BW' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_detfingr'), ...
            'detfingr', 'sym4'   , 3, '{''Global''}' , 'BW' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_detfingr_MOV'), ...
            'detfingr', 'sym4'   , 3, '{''Stepwise'',[1849,200,6149]  }', 'BW' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_facets'), ...
            'facets'  , 'bior6.8', 5, '{''Global''}'  , 'BW'  ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_facets_MOV'), ...
            'facets'  , 'bior6.8', 5, '{''Stepwise'',[576,200,4076]}'   , 'BW' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_woodsculp'), ...
             'woodsculp256.jpg'  , 'haar', 5, '{''Global''}'  , 'COL'  ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_woodsculp_MOV'), ...
             'woodsculp256.jpg'  , 'haar', 5,'{''Stepwise'',[576,200,4076]}' , 'COL' ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_jellyfish'), ...
            'jellyfish256'  , 'bior4.4', 5, '{''Global''}'  , 'COL'  ; ...
      getWavMSG('Wavelet:moreMSGRF:EX2D_Name_jellyfish_MOV'), ...
            'jellyfish256'  , 'bior4.4', 5, '{''Stepwise'',[1000,500,15000]}' , 'COL' ; ...             
      };

    beg_call_str = [mfilename '(''demo'',' str_numwin ','''];
    for i=1:size(demoCell,1)
        levstr = int2str(demoCell{i,4});
        libel = getWavMSG('Wavelet:divGUIRF:WT_Example', ...
                     demoCell{i,3},levstr,demoCell{i,1});
        action = [beg_call_str demoCell{i,2} ''',''' ...
                        demoCell{i,3} ''',' levstr ',' demoCell{i,5} ''',''' ...
                        demoCell{i,6}  ''');'];
       if i<7 , md = m_demoIDX; else md = m_demoCOL; end
        uimenu(md,'Label',libel,'Callback',action);
    end

    % Begin waiting.
    %---------------
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitInit'));

    % General 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',win_tool, ...
                  'xloc',xlocINI,'top',ytopINI,...
                  'Enable','off', ...
                  'wtype','dwt'   ...
                  );
 
    w_uic   = 1.5*Def_Btn_Width;
    h_uic   = 1.5*Def_Btn_Height;
    bdx     = (pos_frame0(3)-w_uic)/2;
    x_left  = pos_frame0(1)+bdx;
    y_low   = toolPos(2)-1.5*Def_Btn_Height-2*dy;
    pos_ana = [x_left, y_low, w_uic, h_uic];

    commonProp = {...
        'Parent',win_tool, ...
        'Units',win_units,  ...
        'Enable','off'     ...
        };

    str_ana = getWavMSG('Wavelet:commongui:Str_Anal');
    cba_ana = [mfilename '(''anal'',' str_numwin ');'];
    pus_ana = uicontrol(commonProp{:},...
        'Style','pushbutton', ...
        'Position',pos_ana,   ...
        'String',str_ana,     ...
        'Callback',cba_ana,   ...
        'Tag',tag_pus_ana,    ...
        'Interruptible','On'  ...
        );

    % Create coefficients tool.
    %--------------------------
    ytopCFS = pos_ana(2)-4*dy;
    utnbcfs('create',win_tool,'toolOPT','cf2d','xloc',xlocINI,'top',ytopCFS);

    % Adding colormap GUI.
    %---------------------
    utcolmap('create',win_tool, ...
             'xloc',xlocINI,'bkcolor',Def_FraBkColor);

    % Callbacks update.
    %------------------
    hdl_den = utnbcfs('handles',win_tool);
    utanapar('set_cba_num',win_tool,[m_files;hdl_den(:)]);
    pop_lev = utanapar('handles',win_tool,'lev');
    cba_pop_lev = [mfilename '(''update_level'',' str_numwin ');'];
    set(pop_lev,'Callback',cba_pop_lev);

    %  Normalization.
    %----------------
    Pos_Graphic_Area = wfigmngr('normalize',win_tool, ...
        Pos_Graphic_Area,'On');

    % Axes construction.
    %------------------
    [pos_axe,pos_dec_ori,pos_dec_new] = ...
                cf2dtool('pos_axes',win_tool,Pos_Graphic_Area);

    axeProp = {...
      'Parent',win_tool,     ...
      'Units','normalized',   ...
      'XTick',[],'YTick',[], ...
      'Box','on',            ...
      'Visible','Off'        ...
      };
          
    axe = zeros(4,1);
    axe_dec_ORI = zeros(4,max_lev_anal);
    axe_dec_SYN = zeros(4,max_lev_anal);
    for k = 1:4
        axe(k) = axes(axeProp{:},'Position',pos_axe(k,:)); %#ok<*LAXES>
    end
    for j = 1:max_lev_anal
       for k=1:4;
           axe_dec_ORI(k,j) = axes(axeProp{:}, ...
                                   'Position',pos_dec_ori(k,:,j));
       end
    end
    for j = 1:max_lev_anal
       for k=1:4;
           axe_dec_SYN(k,j) = axes(axeProp{:}, ...
                                   'Position',pos_dec_new(k,:,j));
       end
    end

    % Memory for stored values.
    %--------------------------
    wmemtool('ini',win_tool,n_membloc0,nb0_stored);
    wmemtool('ini',win_tool,n_membloc1,nb1_stored);
    wmemtool('ini',win_tool,n_membloc2,nb2_stored);
    wmemtool('ini',win_tool,n_membloc3,nb3_stored);
    hdl_UIC = struct('pus_ana',pus_ana);
    hdl_MEN  = struct('m_load',m_load,'m_save',m_save, ...
        'm_demo',m_demo,'m_exp_sig',m_exp_sig);
    hdl_BIG_AXE = struct(...
        'axe_ori_IMG',axe(1),'axe_syn_IMG',axe(2), ...
        'axe_ori_DEC',axe(3),'axe_syn_DEC',axe(4)  ...
        );
    hdl_DEC_AXE = struct(...
        'axe_dec_ORI', axe_dec_ORI,'axe_dec_SYN',axe_dec_SYN ...
        );
    hdl_BIG_IMG = struct('img_ori',[],'img_syn',[]);
    hdl_DEC_IMG = struct('img_dec_ORI', [],'img_dec_SYN',[]);
    toolATTR = struct(...
        'hdl_MEN',hdl_MEN,          ...
        'hdl_UIC',hdl_UIC,          ...
        'pos_GRA',Pos_Graphic_Area, ...
        'hdl_BIG_AXE',hdl_BIG_AXE,  ...
        'hdl_DEC_AXE',hdl_DEC_AXE,  ...
        'hdl_BIG_IMG',hdl_BIG_IMG,  ...
        'hdl_DEC_IMG',hdl_DEC_IMG   ...
        );
    wfigmngr('storeValue',win_tool,'ToolATTR',toolATTR);

    % End waiting.
    %---------------
    wwaiting('off',win_tool);

  case 'load'
    % Loading file.
    %-------------
    if length(varargin)<2
        imgFileType = getimgfiletype;
        [imgInfos,img_anal,map,ok] = ...
            utguidiv('load_img',win_tool,imgFileType, ...
                getWavMSG('Wavelet:commongui:Load_Image'),default_nbcolors);
        demoFlag = 0;
        
    elseif isequal(varargin{2},'wrks')  % LOAD from WORKSPACE
        [imgInfos,img_anal,ok] = wtbximport('2d');
        map = pink(default_nbcolors);
        demoFlag = 0;
        
    else
        img_Name = deblank(varargin{2});
        wav_Name = deblank(varargin{3});
        lev_Anal = varargin{4};
        optIMG   = varargin{6};
        if any(img_Name=='.')
            filename = img_Name;
        else
            filename = [img_Name '.mat'];
        end        
        pathname = utguidiv('WTB_DemoPath',filename);
        [imgInfos,img_anal,map,ok] = utguidiv('load_dem2D',win_tool, ...
            pathname,filename,default_nbcolors,optIMG);
        demoFlag = 1;
    end
    if ~ok, return; end
    flagIDX = length(size(img_anal))<3;
    setfigNAME(win_tool,flagIDX)
    

    % Begin waiting.
    %---------------
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitLoad'));

    % Getting GUI values.
    %--------------------
    if isequal(imgInfos.true_name,'X')
        img_Name = imgInfos.name;
    else
        img_Name = imgInfos.true_name;
    end
    img_Size = imgInfos.size;
    levm     = wmaxlev(img_Size(1:2),'haar');
    levmax   = min(levm,max_lev_anal);
    str_lev_data = int2str((1:levmax)');
    if ~demoFlag
        lev_Anal = min(levmax,5);
        wav_Name = cbanapar('get',win_tool,'wav');
    end

    % Cleaning.
    %----------
    dynvtool('stop',win_tool);
    utnbcfs('clean',win_tool)
    set([hdl_MEN.m_save,hdl_MEN.m_exp_sig],'Enable','Off');
    axe_hdl = [...
      axe_ori_IMG;axe_syn_IMG;      ...
      axe_ori_DEC;axe_syn_DEC;      ...
      axe_dec_ORI(:);axe_dec_SYN(:) ...
      ];
    set(wfindobj(axe_hdl),'Visible','Off')
    children = allchild(axe_hdl);
    children = cat(1,children{:});
    delete(children);
    cf2dtool('set_axes',win_tool,imgInfos.size);
    set(axe_hdl,'XTick',[],'YTick',[],'Box','on');

    % Reset coefficients tool.
    %-------------------------
    utnbcfs('update_NbCfs',win_tool,'clean');
    utnbcfs('set',win_tool,'position',{1,lev_Anal})

    % Setting GUI values.
    %--------------------
    cbanapar('set',win_tool,...
             'n_s',{img_Name,img_Size}, ...
             'wav',wav_Name,...
             'lev',{'String',str_lev_data,'Value',lev_Anal});

    if imgInfos.self_map , arg = map; else arg = []; end
    nb_ColorsInPal = size(map,1);
    cbcolmap('set',win_tool,'pal',{'pink',nb_ColorsInPal,'self',arg});

    % Drawing.
    %---------
    axeAct = axe_ori_IMG;
	codemat_v = wimgcode('get',win_tool);
    img_anal = wimgcode('cod',0,img_anal,nb_ColorsInPal,codemat_v);
    img_ori = image([1 img_Size(1)],[1 img_Size(2)], ...
        wd2uiorui2d('d2uint',img_anal),'Parent',axeAct);
    strTitle = getWavMSG('Wavelet:commongui:Ori_Img_Siz',img_Size(1),img_Size(2));
    wtitle(strTitle,'Parent',axeAct);

    axeAct = axe_syn_IMG;
    img_syn = image([1 img_Size(1)],[1 img_Size(2)], ...
        wd2uiorui2d('d2uint',img_anal),'Parent',axeAct,'Visible','Off');
    wtitle(getWavMSG('Wavelet:commongui:Syn_Img'),'Parent',axeAct,'Visible','Off');
    set(axeAct,'Visible','Off')

    set([axe_ori_IMG,axe_syn_IMG],        ...
        'XTickLabelMode','manual',        ...
        'YTickLabelMode','manual',        ...
        'XTicklabel',[],'YTickLabel',[],  ...
        'XTick',[],'YTick',[],'Box','On'  ...
        );

    % Setting Analysis parameters.
    %-----------------------------
    wmemtool('wmb',win_tool,n_membloc0,ind_sig,img_anal);
    wmemtool('wmb',win_tool,n_membloc1, ...
                   ind_img_name,imgInfos.name, ...
                   ind_img_size,imgInfos.size, ...
                   ind_nbcolors,nb_ColorsInPal ...
                   );
    wmemtool('wmb',win_tool,n_membloc2, ...
                   ind_filename,imgInfos.filename, ...
                   ind_pathname,imgInfos.pathname  ...
                   );

    % Store Values.
    %--------------
    toolATTR.hdl_BIG_IMG.img_ori = img_ori;
    toolATTR.hdl_BIG_IMG.img_syn = img_syn;
    wfigmngr('storeValue',win_tool,'ToolATTR',toolATTR);

    % Setting enabled values.
    %------------------------
    utnbcfs('set',win_tool,'handleORI',img_ori,'handleTHR',img_syn);
    cbanapar('Enable',win_tool,'on');
    cbcolmap('Enable',win_tool,'on');
    if length(imgInfos.size)>2
        vis_UTCOLMAP = 'Off';
    else
        vis_UTCOLMAP = 'On';
    end
    cbcolmap('Visible',win_tool,vis_UTCOLMAP);
    set(pus_ana,'Enable','On' );

    % End waiting.
    %-------------
    wwaiting('off',win_tool);

  case 'demo'
    cf2dtool('load',varargin{:})
    if length(varargin)>4 
        parDEMO = varargin{5};
    else
        parDEMO = {'Global'};
    end

    % Begin waiting.
    %---------------
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute'));

    % Computing.
    %-----------
    cf2dtool('anal',win_tool);
    utnbcfs('demo',win_tool,parDEMO);

    % End waiting.
    %-------------
    wwaiting('off',win_tool);

  case 'save'
    % Getting Synthesized Image.
    %---------------------------
    img_syn = toolATTR.hdl_BIG_IMG.img_syn;
    X = round(get(img_syn,'CData'));
    wname = wmemtool('rmb',win_tool,n_membloc1,ind_wav_name); 
    utguidiv('save_img',getWavMSG('Wavelet:commongui:Sav_Synt_Img'),win_tool,X,'wname',wname);

  case 'exp_wrks'
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitExport'));
    img_syn = toolATTR.hdl_BIG_IMG.img_syn;
    X = round(get(img_syn,'CData'));
    wtbxexport(X,'name','sig_2D', ...
            'title',getWavMSG('Wavelet:commongui:Str_Image'));
    wwaiting('off',win_tool);        
    
  case 'anal'
    % Waiting message.
    %-----------------
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute'));

    % Cleaning and reset dynvtool.
    %-----------------------------
    axe_hdl = [axe_dec_ORI(:);axe_dec_SYN(:)];
    set(wfindobj(axe_hdl),'Visible','Off')
    children = allchild(axe_hdl);
    children = cat(1,children{:});
    delete(children);
    set(axe_hdl,'XTick',[],'YTick',[],'Box','on')  
    dynvtool('ini_his',win_tool,'reset') 
    
    % Reading Analysis Parameters.
    %-----------------------------
    img_anal = wmemtool('rmb',win_tool,n_membloc0,ind_sig);
    flagIDX = length(size(img_anal))<3;
    setfigNAME(win_tool,flagIDX)    
    nb_ColorsInPal = wmemtool('rmb',win_tool,n_membloc1,ind_nbcolors);
    [wav_Name,lev_Anal] = cbanapar('get',win_tool,'wav','lev');

    % Setting Analysis parameters
    %-----------------------------
    wmemtool('wmb',win_tool,n_membloc1,   ...
                   ind_wav_name,wav_Name, ...
                   ind_lev_anal,lev_Anal  ...
                   );
    % Get Values.
    %------------
    img_syn = hdl_BIG_IMG.img_syn;
    set(img_syn,'CData',img_anal);

    % Analyzing.
    %-----------
    [coefs,sizes] = wavedec2(img_anal,lev_Anal,wav_Name);
    longs  = sizes(1:end-1,:);
    longs  = prod(longs,2);
    indDet = 2:length(longs);
    indDet = indDet(ones(1,3),:);
    indDet = [1,indDet(:)'];
    last   = cumsum(longs(indDet));
    first  = ones(size(last));
    first(2:end) = last(1:end-1)+1;
    longs(2:end) = 3*longs(2:end);
    longs(end+1) = sum(longs);
    [tmp,idxsort] = sort(abs(coefs)); %#ok<ASGLU>
    len = length(last);
    idxByLev = cell(1,len);
    for k=1:len
        idxByLev{k} = find((first(k)<=idxsort) & (idxsort<=last(k)));
    end
   
    % Writing coefficients.
    %----------------------
    wmemtool('wmb',win_tool,n_membloc0,...
             ind_coefs,coefs,ind_longs,longs, ...
             ind_first,first,ind_last,last,   ...
             ind_sort,idxsort,ind_By_Lev,idxByLev, ...
             ind_sizes,sizes  ...
             );

    % Drawing.
    %---------
	codemat_v = wimgcode('get',win_tool);
    axeProp = {...
       'XTickLabelMode','manual',        ...
       'YTickLabelMode','manual',        ...
       'XTicklabel',[],'YTickLabel',[],  ...
       'XTick',[],'YTick',[],'Box','On'  ...
       };
    
    img_Size = wmemtool('rmb',win_tool,n_membloc1,ind_img_size);
    dum = cell(1,4);
    img_dec_ORI = zeros(4,lev_Anal);
    img_dec_SYN = zeros(4,lev_Anal);
    for j=1:lev_Anal
        [dum{2},dum{4},dum{3}] = detcoef2('all',coefs,sizes,j);
        if j==lev_Anal
            dum{1} = appcoef2(coefs,sizes,wav_Name,j);
        else
            dum{1} = zeros(size(dum{2}));
        end
        % trunc_p = [j img_Size(2) img_Size(1)]; % OLD CODE
        trunc_p = [0 img_Size(2) img_Size(1)];
        for k=1:4
            dum{k} = wimgcode('cod',1,dum{k},nb_ColorsInPal,codemat_v,trunc_p);
            vis = getonoff((k~=1) | j==lev_Anal);
            axeAct = axe_dec_ORI(k,j);
            img_dec_ORI(k,j) = ...
                    image([1 img_Size(1)],[1 img_Size(2)],dum{k},...
                          'Parent',axeAct,   ...
                          'Visible',vis,     ...
                          'UserData',[0;j;k] ...
                          );
            set(axeAct,axeProp{:});
            axeAct = axe_dec_SYN(k,j);
            img_dec_SYN(k,j) = ...
                    image([1 img_Size(1)],[1 img_Size(2)],dum{k},...
                          'Parent',axeAct,   ...
                          'Visible',vis,     ...
                          'UserData',[0;j;k] ...
                          );
            set(axeAct,axeProp{:});
        end
    end
    strTitle = getWavMSG('Wavelet:divGUIRF:Dec_Ori_AT',lev_Anal);
    wxlabel(strTitle,'Parent',axe_ori_DEC,'Visible','On');
    strTitle = getWavMSG('Wavelet:divGUIRF:Dec_Mod_AT',lev_Anal);
    wxlabel(strTitle,'Parent',axe_syn_DEC,'Visible','On');
    set(wfindobj(axe_syn_IMG),'Visible','On')

    % Store handles.
    %---------------
    toolATTR.hdl_DEC_IMG.img_dec_ORI = img_dec_ORI;
    toolATTR.hdl_DEC_IMG.img_dec_SYN = img_dec_SYN;
    wfigmngr('storeValue',win_tool,'ToolATTR',toolATTR);
    
    % Reset tool coefficients.
    %-------------------------
    set([hdl_MEN.m_save,hdl_MEN.m_exp_sig],'Enable','On');
    utnbcfs('update_NbCfs',win_tool,'anal');
    utnbcfs('update_methode',win_tool,'anal');
    utnbcfs('Enable',win_tool,'anal');

    % Connect dynvtool.
    %------------------
    axe_hdl = [...
      axe_ori_IMG;axe_syn_IMG;      ...
      axe_ori_DEC;axe_syn_DEC;      ...
      axe_dec_ORI(:);axe_dec_SYN(:) ...
      ];    
    dynvtool('init',win_tool,[],axe_hdl,[],[1 1],'','','','int');

    % End waiting.
    %-------------
    wwaiting('off',win_tool);

  case 'apply'
    % Waiting message.
    %-----------------
    wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute'));

    % Analysis Parameters.
    %--------------------
    lev_Anal = wmemtool('rmb',win_tool,n_membloc1,ind_lev_anal);
    [idxsort,idxByLev] = wmemtool('rmb',win_tool,n_membloc0,ind_sort,ind_By_Lev);

    % Compute new decomposition.
    %---------------------------
    [identMeth,nbkept] = utnbcfs('get',win_tool,'identMeth','nbkept');
    lenNbK = length(nbkept);
    indKept = 2:lenNbK-1;
    indKept = indKept(ones(1,3),:);
    indKept = [1 , indKept(:)' , lenNbK];
    nbkept  = nbkept(indKept);
    iBeg = 2;
    for jj = 1:lev_Anal
       iEnd = iBeg+2;
       total = nbkept(iBeg);
       tmp = sort(cat(2,idxByLev{iBeg:iEnd}));
       tmp = tmp(end-total+1:end);
       v(1) = sum(ismember(tmp,idxByLev{iBeg}));
       v(2) = sum(ismember(tmp,idxByLev{iBeg+1}));
       v(3) = sum(ismember(tmp,idxByLev{iBeg+2}));
       nbkept(iBeg:iEnd) = v;
       iBeg = iEnd+1;
    end
    len = length(idxByLev);
    switch identMeth
      case {'Global','ByLevel'}
        ind = zeros(1,nbkept(end));
        first = 1;
        for k=1:len
            nbk = nbkept(k);
            last = first+nbk-1;
            ind(first:last) = idxByLev{k}(end-nbk+1:end);
            first = last+1;
        end
        idx_Cfs = idxsort(ind);

        % Computing & Drawing.
        %---------------------
        cf2dtool('plot_NewDec',win_tool,idx_Cfs,identMeth);

      case {'Manual'}
    end

    % End waiting.
    %-------------
    wwaiting('off',win_tool);

  case 'Apply_Movie'
    % Read set of kept coefficients.
    %-------------------------------
    movieSET = varargin{2};
    nbInSet = length(movieSET);
    if nbInSet==0
        cf2dtool('plot_NewDec',win_tool,[],'Stepwise');
        return
    end
    appFlag = varargin{3};
    popStop = varargin{4};
      
    % Waiting message.
    %-----------------
    m_File = wfindobj(win_tool,'type','uimenu','tag','figMenuFile');
    btn_Close = wfindobj(win_tool,'style','pushbutton','tag','Pus_Close_Win');
    set([m_File,btn_Close],'Enable','Off');
    if nbInSet>1
        txt_msg = wwaiting('msg',win_tool,getWavMSG('Wavelet:commongui:WaitCompute'));
    end

    % Analysis Parameters.
    %--------------------
    lev_Anal = wmemtool('rmb',win_tool,n_membloc1,ind_lev_anal);
    [first,last,idxsort,idxByLev] = ...
        wmemtool('rmb',win_tool,n_membloc0, ...
                       ind_first,ind_last, ...
                       ind_sort,ind_By_Lev ...
                       );

    % Computing.
    %-----------
    len = length(last);
    nbKept = zeros(1,len+1);
    switch appFlag
      case 1
        idx_App = idxsort(idxByLev{1});
        App_Len = length(idx_App);
        idxsort(idxByLev{1}) = [];

      case 2
        idx_App = [];
        App_Len = 0;
       
      case 3
        idx_App = [];
        App_Len = 0;       
        idxsort(idxByLev{1}) = [];
    end

    for jj = 1:length(movieSET)
        nbcfs = movieSET(jj);
        nbcfs  = nbcfs-App_Len;
        idx_Cfs = [idx_App , idxsort(end-nbcfs+1:end)];

        if nbInSet>1 ,
            for k=1:len
              dummy  = find((first(k)<=idx_Cfs) & (idx_Cfs<=last(k)));
              nbKept(k) = length(dummy);
            end
            nbKept(end) = sum(nbKept(1:end-1));
            msg1 = getWavMSG('Wavelet:divGUIRF:NbKeptCfs',nbKept(end));
            msg2 = '  = ';
            msg3 = ['[' int2str(nbKept(1)) ','];
            iBeg = 2;
            for kk=1:lev_Anal
                iEnd = iBeg+2;
                msg3 = [msg3 , ' (' int2str(nbKept(iBeg:iEnd)) ') ']; %#ok<AGROW>
                iBeg = iEnd+1;
            end
            msg3  = [msg3 , ']']; %#ok<AGROW>
            lmsg3 = length(msg3);
            if lmsg3<80
                msg = {' ', [msg1,msg2,msg3]};
            else
                msg = {msg1,' ', msg3};
            end
            set(txt_msg,'String',msg);
        end

        % Computing & Drawing.
        %---------------------
        cf2dtool('plot_NewDec',win_tool,idx_Cfs,'Stepwise');

        if nbInSet>1 , 
            % Test for stopping.
            %-------------------
            user = get(popStop,'UserData');
            if isequal(user,1)
               set(popStop,'UserData',[]);
               break
            end
            pause(0.05);
        end
    end

    % End waiting.
    %-------------
    set([m_File,btn_Close],'Enable','On');
    if nbInSet>1 , wwaiting('off',win_tool); end

  case 'plot_NewDec'
    % Indices of preserved coefficients & Methode.
    %---------------------------------------------
    idx_Cfs  = varargin{2};
    % identMeth = varargin{3};
    
    % Get Handles.
    %-------------
    img_dec_SYN = toolATTR.hdl_DEC_IMG.img_dec_SYN;
    img_syn = toolATTR.hdl_BIG_IMG.img_syn;

    % Get Analysis Parameters.
    %-------------------------
    [img_Size,wav_Name,lev_Anal,nb_ColorsInPal] = ...
        wmemtool('rmb',win_tool,n_membloc1,...
                 ind_img_size,ind_wav_name,ind_lev_anal,ind_nbcolors);
    [coefs,sizes] = wmemtool('rmb',win_tool,n_membloc0,ind_coefs,ind_sizes);

    % Compute synthesized image.
    %---------------------------
    Cnew = zeros(size(coefs));
    Cnew(idx_Cfs) = coefs(idx_Cfs);
    SS  = waverec2(Cnew,sizes,wav_Name);

    % Draw modified decomposition.
    %-----------------------------
	codemat_v = wimgcode('get',win_tool);
    dum = cell(1,4);
    for j=1:lev_Anal
        [dum{2},dum{4},dum{3}] = detcoef2('all',Cnew,sizes,j);
        if j==lev_Anal
            dum{1} = appcoef2(Cnew,sizes,wav_Name,j);
        else
            dum{1} = zeros(size(dum{2}));
        end
        % trunc_p = [j img_Size(2) img_Size(1)]; % OLD CODE
        trunc_p = [0 img_Size(2) img_Size(1)];
        for k=1:4
            dum{k} = wimgcode('cod',1,dum{k},nb_ColorsInPal,codemat_v,trunc_p);
            vis = getonoff((k~=1) | j==lev_Anal);
            set(img_dec_SYN(k,j),'CData',dum{k},'Visible',vis);
        end
    end
    set(wfindobj(axe_syn_IMG),'Visible','On')

    % Draw synthesized image.
    %------------------------ 
    set(img_syn,'CData',wd2uiorui2d('d2uint',SS));     
    set([hdl_MEN.m_save,hdl_MEN.m_exp_sig],'Enable','On');

  case 'update_level'
    pop_lev  = utanapar('handles',win_tool,'lev');
    lev_Anal = get(pop_lev,'Value');

    % Clean axes.
    %------------
    set([hdl_MEN.m_save,hdl_MEN.m_exp_sig],'Enable','Off');
    axe_hdl = [...
      axe_syn_IMG;                  ...
      axe_ori_DEC;axe_syn_DEC;      ...
      axe_dec_ORI(:);axe_dec_SYN(:) ...
      ];      
    set(wfindobj(axe_hdl),'Visible','Off')

    % Reset coefficients tool and dynvtool.
    %--------------------------------------
    utnbcfs('clean',win_tool)
    utnbcfs('update_NbCfs',win_tool,'clean');
    utnbcfs('set',win_tool,'position',{1,lev_Anal})
    dynvtool('ini_his',win_tool,'reset')

  case 'set_axes'
    % imgSize = varargin{2};
    %-----------------------
    [pos_axe,pos_dec_ori,pos_dec_new] = ...
        cf2dtool('pos_axes',win_tool,pos_GRA,0.08,0.08,varargin{2});
    for k=1:length(c_axeBIG)
       set(c_axeBIG{k},'Position',pos_axe(k,:));
    end
    for j = 1:max_lev_anal
       for k=1:4;
           set(axe_dec_ORI(k,j),'Position',pos_dec_ori(k,:,j));
       end
    end
    for j = 1:max_lev_anal
       for k=1:4;
           set(axe_dec_SYN(k,j),'Position',pos_dec_new(k,:,j));
       end
    end
   
  case 'pos_axes'
    switch length(varargin)
      case 2 , pos_GRA = varargin{2}; bdx = 0; bdy = 0;
      case 5 , [pos_GRA,bdx,bdy,imgSize] = deal(varargin{2:5});
    end    
    pos_axe = zeros(4,4);
    w_axe   = pos_GRA(3)/2;
    h_axe   = pos_GRA(4)/2;
    xL_axe  = 0;
    xR_axe  = xL_axe+w_axe;
    yU_axe  = pos_GRA(2)+pos_GRA(4)-h_axe;
    yD_axe  = pos_GRA(2);
    pos_axe(1,:) = [xL_axe yU_axe w_axe h_axe];
    pos_axe(2,:) = [xR_axe yU_axe w_axe h_axe];
    pos_axe(3,:) = [xL_axe yD_axe w_axe h_axe];
    pos_axe(4,:) = [xR_axe yD_axe w_axe h_axe];
    if (bdx~=0) || (bdy~=0)
        w_max   = w_axe-bdx;
        h_max   = h_axe-bdy;
        [w_ini,h_ini] = wpropimg(imgSize,w_max,h_max);
        scal_XY = [w_ini/w_axe,h_ini/h_axe];
        deltaXY = [w_axe-w_ini,h_axe-h_ini];
        multiXY = [1.5 1.5];
        alfaXY  = (2*deltaXY)./(2+multiXY);
        betaXY  = (multiXY.*deltaXY)./(2+multiXY);
        pos_axe([1 3],1) = pos_axe([1 3],1)+alfaXY(1);
        pos_axe([2 4],1) = pos_axe([2 4],1)+betaXY(1);
        pos_axe([1 2],2) = pos_axe([1 2],2)+betaXY(2);
        pos_axe([3 4],2) = pos_axe([3 4],2)+alfaXY(2);
        pos_axe(:,3) = pos_axe(:,3)*scal_XY(1);
        pos_axe(:,4) = pos_axe(:,4)*scal_XY(2);
    else
        w_ini = w_axe;
        h_ini = h_axe;
        alfaXY = 1;
        betaXY = 1;        
    end
    pos_dec_ori = pos_axe([1 2 4 3],:);
    pos_dec_ori = pos_dec_ori(:,:,ones(1,max_lev_anal));
    for j = 1:max_lev_anal
        pos_dec_ori(:,[3 4],j) = pos_dec_ori(:,[3 4],j)/(2^j);
    end
    w = w_ini/2;
    h = h_ini/2;
    x = pos_axe(3,1);
    y = pos_axe(3,2)+h;
    t = 0;
    for j = 1:max_lev_anal
        tmp = [x y;x+w y;x+w y-h;x y-h]-[0 0 0 0;t t t t]';
        pos_dec_ori(:,[1 2],j) = tmp;
        y = y+h; h = h/2; w = w/2; t = t+h;
    end
    pos_dec_new = pos_dec_ori;
    pos_dec_new(:,1,:) = pos_dec_new(:,1,:)+w_axe+betaXY(1)-alfaXY(1);
    varargout = {pos_axe,pos_dec_ori,pos_dec_new};

  case 'close'
 
  otherwise
    errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
    error(message('Wavelet:FunctionArgVal:Unknown_Opt'));
end

%--------------------------------------------------------------------------
function setfigNAME(fig,flagIDX)

if flagIDX
    figNAME = getWavMSG('Wavelet:divGUIRF:CF2D_Nam_Ind');
else
    figNAME = getWavMSG('Wavelet:divGUIRF:CF2D_Nam_TC');
end
set(fig,'Name',figNAME);
%---------------------------------------------------------------------------