wfustool.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:57k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = wfustool(varargin)
  2. %WFUSTOOL Discrete wavelet 2D tool for image fusion.
  3. %   VARARGOUT = WFUSTOOL(VARARGIN)
  4. % WFUSTOOL M-file for wfustool.fig
  5. %      WFUSTOOL, by itself, creates a new WFUSTOOL or raises the existing
  6. %      singleton*.
  7. %
  8. %      H = WFUSTOOL returns the handle to a new WFUSTOOL or the handle to
  9. %      the existing singleton*.
  10. %
  11. %      WFUSTOOL('CALLBACK',hObject,eventData,handles,...) calls the local
  12. %      function named CALLBACK in WFUSTOOL.M with the given input arguments.
  13. %
  14. %      WFUSTOOL('Property','Value',...) creates a new WFUSTOOL or raises the
  15. %      existing singleton*.  Starting from the left, property value pairs are
  16. %      applied to the GUI before wfustool_OpeningFunction gets called.  An
  17. %      unrecognized property name or invalid value makes property application
  18. %      stop.  All inputs are passed to wfustool_OpeningFcn via varargin.
  19. %
  20. %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
  21. %      instance to run (singleton)".
  22. %
  23. % See also: GUIDE, GUIDATA, GUIHANDLES
  24. % Edit the above text to modify the response to help wfustool
  25. % Last Modified by GUIDE v2.5 15-Dec-2003 15:23:00
  26. %
  27. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Feb-2003.
  28. %   Last Revision: 12-Nov-2003.
  29. %   Copyright 1995-2004 The MathWorks, Inc.
  30. %   $Revision: 1.1.6.2 $ $Date: 2004/03/15 22:42:54 $ 
  31. %*************************************************************************%
  32. %                BEGIN initialization code - DO NOT EDIT                  %
  33. %                ----------------------------------------                 %
  34. %*************************************************************************%
  35. gui_Singleton = 0;
  36. gui_State = struct('gui_Name',       mfilename, ...
  37.                    'gui_Singleton',  gui_Singleton, ...
  38.                    'gui_OpeningFcn', @wfustool_OpeningFcn, ...
  39.                    'gui_OutputFcn',  @wfustool_OutputFcn, ...
  40.                    'gui_LayoutFcn',  [] , ...
  41.                    'gui_Callback',   []);
  42. if nargin & isstr(varargin{1})
  43.     gui_State.gui_Callback = str2func(varargin{1});
  44. end
  45. if nargout
  46.     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  47. else
  48.     gui_mainfcn(gui_State, varargin{:});
  49. end
  50. %*************************************************************************%
  51. %                END initialization code - DO NOT EDIT                    %
  52. %*************************************************************************%
  53. %*************************************************************************%
  54. %                BEGIN Opening Function                                   %
  55. %                ----------------------                                   %
  56. % --- Executes just before wfustool is made visible.                      %
  57. %*************************************************************************%
  58. function wfustool_OpeningFcn(hObject, eventdata, handles, varargin)
  59. % This function has no output args, see OutputFcn.
  60. % hObject    handle to figure
  61. % eventdata  reserved - to be defined in a future version of MATLAB
  62. % handles    structure with handles and user data (see GUIDATA)
  63. % varargin   command line arguments to wfustool (see VARARGIN)
  64. % Choose default command line output for wfustool
  65. handles.output = hObject;
  66. % Update handles structure
  67. guidata(hObject, handles);
  68. % UIWAIT makes wfustool wait for user response (see UIRESUME)
  69. % uiwait(handles.wfustool_Win);
  70. %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
  71. % TOOL INITIALISATION Intodruced manualy in the automatic generated code  %
  72. %%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%
  73. Init_Tool(hObject,eventdata,handles);
  74. %*************************************************************************%
  75. %                END Opening Function                                     %
  76. %*************************************************************************%
  77. %*************************************************************************%
  78. %                BEGIN Output Function                                    %
  79. %                ---------------------                                    %
  80. % --- Outputs from this function are returned to the command line.        %
  81. %*************************************************************************%
  82. function varargout = wfustool_OutputFcn(hObject, eventdata, handles)
  83. % varargout  cell array for returning output args (see VARARGOUT);
  84. % hObject    handle to figure
  85. % eventdata  reserved - to be defined in a future version of MATLAB
  86. % handles    structure with handles and user data (see GUIDATA)
  87. % Get default command line output from handles structure
  88. varargout{1} = handles.output;
  89. %*************************************************************************%
  90. %                END Output Function                                      %
  91. %*************************************************************************%
  92. %=========================================================================%
  93. %                BEGIN Create Functions                                   %
  94. %                ----------------------                                   %
  95. % --- Executes during object creation, after setting all properties.      %
  96. %=========================================================================%
  97. function EdiPop_CreateFcn(hObject,eventdata,handles)
  98. % hObject    handle to Edi_Object or Pop_Object (see GCBO)
  99. % eventdata  reserved - to be defined in a future version of MATLAB
  100. % handles    empty - handles not created until after all CreateFcns called
  101. % Hint: edit controls usually have a white background on Windows.
  102. % Hint: popupmenu controls usually have a white background on Windows.
  103. % See ISPC and COMPUTER.
  104. if ispc
  105.     % set(hObject,'BackgroundColor','white');
  106.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  107. else
  108.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  109. end
  110. %--------------------------------------------------------------------------
  111. function Sli_CreateFcn(hObject, eventdata, handles)
  112. % hObject    handle to Sli_Object (see GCBO)
  113. % eventdata  reserved - to be defined in a future version of MATLAB
  114. % handles    empty - handles not created until after all CreateFcns called
  115. % Hint: slider controls usually have a light gray background, change
  116. %       'usewhitebg' to 0 to use default.  See ISPC and COMPUTER.
  117. usewhitebg = 1;
  118. if usewhitebg
  119.     set(hObject,'BackgroundColor',[.9 .9 .9]);
  120. else
  121.     set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
  122. end
  123. %--------------------------------------------------------------------------
  124. %=========================================================================%
  125. %                END Create Functions                                     %
  126. %=========================================================================%
  127. %=========================================================================%
  128. %                BEGIN Callback Functions                                 %
  129. %                ------------------------                                 %
  130. %=========================================================================%
  131. % --- Executes on button press in Pus_CloseWin.
  132. function Pus_CloseWin_Callback(hObject, eventdata, handles)
  133. % hObject    handle to Pus_CloseWin (see GCBO)
  134. % eventdata  reserved - to be defined in a future version of MATLAB
  135. % handles    structure with handles and user data (see GUIDATA)
  136. hdl_Menus = wtbxappdata('get',hObject,'hdl_Menus');
  137. m_save = hdl_Menus.m_save;
  138. ena_Save = get(m_save,'Enable');
  139. if isequal(lower(ena_Save),'on')
  140.     hFig = get(hObject,'Parent');
  141.     status = wwaitans({hFig,'Image Fusion'},...
  142.         'Save the synthesized image ?',2,'Cancel');
  143.     switch status
  144.         case -1 , return;
  145.         case  1
  146.             wwaiting('msg',hFig,'Wait ... computing');
  147.             save_FUN(m_save,eventdata,handles)
  148.             wwaiting('off',hFig);
  149.         otherwise
  150.     end
  151. end
  152. close(gcbf)
  153. %--------------------------------------------------------------------------
  154. % --- Executes Menu Load_Img1.
  155. function Load_Img1_Callback(hObject,eventdata,handles)
  156. % Get figure handle.
  157. %-------------------
  158. hFig = handles.output;
  159. % Testing file.
  160. %--------------
  161. def_nbCodeOfColors = 255;
  162. imgFileType = ['*.mat;*.bmp;*.hdf;*.jpg;*.jpeg;*.pcx;*.tif;*.tiff;*.gif'];
  163. [imgInfos,img_anal,map,ok] = ...
  164.     utguidiv('load_img',hFig,imgFileType,'Load Image',def_nbCodeOfColors);
  165. if ~ok, return; end
  166. okSize = tst_ImageSize(hFig,1,imgInfos);
  167. % Cleaning.
  168. %----------
  169. wwaiting('msg',hFig,'Wait ... cleaning');
  170. CleanTOOL(hFig,eventdata,handles,'Load_Img1_Callback','beg');
  171. % Setting GUI values and Analysis parameters.
  172. %--------------------------------------------
  173. max_lev_anal = 8;
  174. levm   = wmaxlev(imgInfos.size,'haar');
  175. levmax = min(levm,max_lev_anal);
  176. [curlev,curlevMAX] = cbanapar('get',hFig,'lev','levmax');
  177. if levmax<curlevMAX
  178.     cbanapar('set',hFig, ...
  179.         'lev',{'String',int2str([1:levmax]'),'Value',min(levmax,curlev)} ...
  180.         );
  181. end
  182. %---------------------------------
  183. if isequal(imgInfos.true_name,'X')
  184.     img_Name = imgInfos.name;
  185. else
  186.     img_Name = imgInfos.true_name;
  187. end
  188. img_Size = imgInfos.size;
  189. %---------------------------------
  190. NB_ColorsInPal = size(map,1);
  191. if imgInfos.self_map , arg = map; else , arg = []; end
  192. curMap = get(hFig,'Colormap');
  193. NB_ColorsInPal = max([NB_ColorsInPal,size(curMap,1)]);
  194. cbcolmap('set',hFig,'pal',{'pink',NB_ColorsInPal,'self',arg});
  195. %---------------------------------
  196. n_s = [img_Name '  (' , int2str(img_Size(2)) 'x' int2str(img_Size(1)) ')'];
  197. set(handles.Edi_Data_NS,'String',n_s);                
  198. axes(handles.Axe_Image_1); 
  199. image(img_anal); 
  200. setAxesTitle(handles.Axe_Image_1,'Image 1');
  201. % End waiting.
  202. %-------------
  203. CleanTOOL(hFig,eventdata,handles,'Load_Img1_Callback','end');
  204. wwaiting('off',hFig);
  205. %--------------------------------------------------------------------------
  206. % --- Executes on Menu or Load_Img2.
  207. function Load_Img2_Callback(hObject, eventdata, handles)
  208. % Get figure handle.
  209. %-------------------
  210. hFig = handles.output;
  211. % Testing file.
  212. %--------------
  213. def_nbCodeOfColors = 255;
  214. imgFileType = ['*.mat;*.bmp;*.hdf;*.jpg;*.jpeg;*.pcx;*.tif;*.tiff;*.gif'];
  215. [imgInfos,img_anal,map,ok] = ...
  216.     utguidiv('load_img',hFig,imgFileType,'Load Image',def_nbCodeOfColors);
  217. if ~ok, return; end
  218. okSize = tst_ImageSize(hFig,2,imgInfos);
  219. % if ~okSize, return; end
  220. % Cleaning.
  221. %----------
  222. wwaiting('msg',hFig,'Wait ... cleaning');
  223. CleanTOOL(hFig,eventdata,handles,'Load_Img2_Callback','beg');
  224. % Setting GUI values and Analysis parameters.
  225. %--------------------------------------------
  226. max_lev_anal = 8;
  227. levm   = wmaxlev(imgInfos.size,'haar');
  228. levmax = min(levm,max_lev_anal);
  229. [curlev,curlevMAX] = cbanapar('get',hFig,'lev','levmax');
  230. if levmax<curlevMAX
  231.     cbanapar('set',hFig, ...
  232.         'lev',{'String',int2str([1:levmax]'),'Value',min(levmax,curlev)} ...
  233.         );
  234. end
  235. %---------------------------------
  236. if isequal(imgInfos.true_name,'X')
  237.     img_Name = imgInfos.name;
  238. else
  239.     img_Name = imgInfos.true_name;
  240. end
  241. img_Size = imgInfos.size;
  242. %---------------------------------
  243. NB_ColorsInPal = size(map,1);
  244. if imgInfos.self_map , arg = map; else , arg = []; end
  245. curMap = get(hFig,'Colormap');
  246. NB_ColorsInPal = max([NB_ColorsInPal,size(curMap,1)]);
  247. cbcolmap('set',hFig,'pal',{'pink',NB_ColorsInPal,'self',arg});
  248. %---------------------------------
  249. n_s = [img_Name '  (' , int2str(img_Size(2)) 'x' int2str(img_Size(1)) ')'];
  250. set(handles.Edi_Image_2,'String',n_s);                
  251. axes(handles.Axe_Image_2); 
  252. image(img_anal); 
  253. setAxesTitle(handles.Axe_Image_2,'Image 2');
  254. setAxesXlabel(handles.Axe_Image_Fus,'Synthesized Image');
  255. % End waiting.
  256. %-------------
  257. CleanTOOL(hFig,eventdata,handles,'Load_Img2_Callback','end');
  258. wwaiting('off',hFig);
  259. %--------------------------------------------------------------------------
  260. % --- Executes on button press in Pus_Decompose.
  261. function Pus_Decompose_Callback(hObject, eventdata, handles)
  262. hFig = handles.output;
  263. axe_IND = [...
  264.         handles.Axe_ImgDec_1 , ...
  265.         handles.Axe_ImgDec_2 , ...
  266.         handles.Axe_ImgDec_Fus ...
  267.     ];
  268. axe_CMD = [...
  269.         handles.Axe_Image_1 , ...
  270.         handles.Axe_Image_2 , ...
  271.         handles.Axe_Image_Fus ...
  272.     ];
  273. axe_ACT = [];
  274. % Cleaning.
  275. %----------
  276. wwaiting('msg',hFig,'Wait ... cleaning');
  277. CleanTOOL(hFig,eventdata,handles,'Pus_Decompose_Callback','beg');
  278. % Decomposition.
  279. %---------------
  280. [wname,level] = cbanapar('get',hFig,'wav','lev');
  281. Image_1 = findobj(handles.Axe_Image_1,'type','image');
  282. X = get(Image_1,'Cdata');
  283. tree_1 = wfustree(X,level,wname);
  284. Image_2 = findobj(handles.Axe_Image_2,'type','image');
  285. X = get(Image_2,'Cdata');
  286. tree_2 = wfustree(X,level,wname);
  287. % Store Decompositions Parameters.
  288. %--------------------------------
  289. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  290. tool_PARAMS.DecIMG_1 = tree_1;
  291. tool_PARAMS.DecIMG_2 = tree_2;
  292. dwt_ATTRB = struct('type','dwt','wname',wname,'level',level);
  293. tool_PARAMS.dwt_ATTRB = dwt_ATTRB;
  294. wtbxappdata('set',hFig,'tool_PARAMS',tool_PARAMS);
  295. % Show Decompositions.
  296. %---------------------
  297. axes(handles.Axe_ImgDec_1);
  298. DecIMG_1 = getdec(tree_1);
  299. image(DecIMG_1);
  300. setAxesTitle(handles.Axe_ImgDec_1,'Decomposition 1');
  301. axes(handles.Axe_ImgDec_2);
  302. DecIMG_2 = getdec(tree_2);
  303. image(DecIMG_2);
  304. setAxesTitle(handles.Axe_ImgDec_2,'Decomposition 2');
  305. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int');
  306. % End waiting.
  307. %-------------
  308. CleanTOOL(hFig,eventdata,handles,'Pus_Decompose_Callback','end');
  309. wwaiting('off',hFig);
  310. %--------------------------------------------------------------------------
  311. % --- Executes on selection change in Pop_Fus_App.
  312. function Pop_Fus_App_Callback(hObject, eventdata, handles)
  313. Edi = handles.Edi_Fus_App;
  314. Txt = handles.Txt_Edi_App;
  315. set_Fus_Param(hObject,Edi,Txt,eventdata,handles)
  316. set(handles.Tog_Inspect,'Enable','Off');
  317. %--------------------------------------------------------------------------
  318. % --- Executes on selection change in Pop_Fus_Det.
  319. function Pop_Fus_Det_Callback(hObject, eventdata, handles)
  320. Edi = handles.Edi_Fus_Det;
  321. Txt = handles.Txt_Edi_Det;
  322. set_Fus_Param(hObject,Edi,Txt,eventdata,handles)
  323. set(handles.Tog_Inspect,'Enable','Off');
  324. %--------------------------------------------------------------------------
  325. % --- Executes on selection change in Edi_Fus_Det.
  326. function Edi_Fus_App_Callback(hObject, eventdata, handles)
  327. Pop = handles.Pop_Fus_App;
  328. Edi = handles.Edi_Fus_App;
  329. ok  = tst_Fus_Param(Pop,Edi,eventdata,handles);
  330. %--------------------------------------------------------------------------
  331. % --- Executes on selection change in Edi_Fus_Det.
  332. function Edi_Fus_Det_Callback(hObject, eventdata, handles)
  333. Pop = handles.Pop_Fus_Det;
  334. Edi = handles.Edi_Fus_Det;
  335. ok  = tst_Fus_Param(Pop,Edi,eventdata,handles);
  336. %--------------------------------------------------------------------------
  337. % --- Executes on button press in Pus_Fusion.
  338. function Pus_Fusion_Callback(hObject, eventdata, handles)
  339. hFig = handles.output;
  340. % Cleaning.
  341. %----------
  342. wwaiting('msg',hFig,'Wait ... cleaning');
  343. CleanTOOL(hFig,eventdata,handles,'Pus_Fusion_Callback','beg');
  344. % Get Decompositions Parameters.
  345. %-------------------------------
  346. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  347. tree_1 = tool_PARAMS.DecIMG_1;
  348. tree_2 = tool_PARAMS.DecIMG_2;
  349. dwt_ATTRB = tool_PARAMS.dwt_ATTRB;
  350. type  = dwt_ATTRB.type;
  351. wname = dwt_ATTRB.wname;
  352. level = dwt_ATTRB.level;
  353. % Get Fusion Parameters.
  354. %-----------------------
  355. AfusMeth = get_Fus_Param('app',handles);
  356. DfusMeth = get_Fus_Param('det',handles);
  357. % Make Fusion.
  358. %-------------
  359. [XFus,tree_F] = wfusdec(tree_1,tree_2,AfusMeth,DfusMeth);
  360. DecImgFus = getdec(tree_F);
  361. tool_PARAMS.DecIMG_F = tree_F;
  362. wtbxappdata('set',hFig,'tool_PARAMS',tool_PARAMS);
  363. % Plot Decomposition and Image.
  364. %------------------------------
  365. axes(handles.Axe_ImgDec_Fus); 
  366. image(DecImgFus);
  367. setAxesXlabel(handles.Axe_ImgDec_Fus,'Fusion of Decompositions');
  368. axes(handles.Axe_Image_Fus);
  369. image(XFus);
  370. setAxesXlabel(handles.Axe_Image_Fus,'Synthesized Image');
  371. %---------------------------------------------
  372. axe_IND = [...
  373.         handles.Axe_ImgDec_1 , ...
  374.         handles.Axe_ImgDec_2 , ...
  375.         handles.Axe_ImgDec_Fus ...
  376.     ];
  377. axe_CMD = [...
  378.         handles.Axe_Image_1 , ...
  379.         handles.Axe_Image_2 , ...
  380.         handles.Axe_Image_Fus ...
  381.     ];
  382. axe_ACT = [];
  383. dynvtool('init',hFig,axe_IND,axe_CMD,axe_ACT,[1 1],'','','','int');
  384. % End waiting.
  385. %-------------
  386. set(handles.Tog_Inspect,'Enable','On');
  387. CleanTOOL(hFig,eventdata,handles,'Pus_Fusion_Callback','end');
  388. wwaiting('off',hFig);
  389. %--------------------------------------------------------------------------
  390. % --- Executes on button press in Tog_Inspect.
  391. function Tog_Inspect_Callback(hObject,eventdata,handles)
  392. hFig = handles.output;
  393. Val_Inspect = get(hObject,'Value');
  394. % Cleaning.
  395. %----------
  396. wwaiting('msg',hFig,'Wait ... cleaning');
  397. CleanTOOL(hFig,eventdata,handles,'Tog_Inspect_Callback','beg',Val_Inspect);
  398. axe_INI = [...
  399.         handles.Axe_ImgDec_1 , handles.Axe_ImgDec_2 , handles.Axe_ImgDec_Fus ,...
  400.         handles.Axe_Image_1  , handles.Axe_Image_2 ,  handles.Axe_Image_Fus...
  401.     ];
  402. child = allchild(axe_INI);
  403. child = cat(1,child{:})';
  404. child_INI = findobj(child)';
  405. axe_TREE = [...
  406.         handles.Axe_Tree_Dec , ...
  407.         handles.Axe_Tree_Img1  , handles.Axe_Tree_Img2 ,  handles.Axe_Tree_ImgF...
  408.     ];
  409. child = allchild(axe_TREE);
  410. child_DEC = cat(1,child{:})';
  411. child_DEC = findobj(child_DEC)';
  412. hdl_Arrows = wtbxappdata('get',hFig,'hdl_Arrows');
  413. switch Val_Inspect
  414.     case 0 ,
  415.         set([axe_TREE , child_DEC],'Visible','Off');
  416.         delete(child_DEC);
  417.         set([axe_INI  , child_INI , hdl_Arrows(:)'],'Visible','On');
  418.         dynvtool('init',hFig,axe_INI(1:3),axe_INI,[],[1 1],'','','','int');
  419.         set(hObject,'String','Inspect Fusion Tree');
  420.         set(handles.Pus_CloseWin,'Enable','On');
  421.     case 1 ,
  422.         dynvtool('ini_his',hFig,-1);
  423.         set([axe_INI  , child_INI , hdl_Arrows(:)'],'Visible','Off');        
  424.         set([axe_TREE , child_DEC],'Visible','On');
  425.         Tree_MANAGER('create',hFig,eventdata,handles);
  426.         set(hObject,'String','Return to Decompositions');
  427.         set(handles.Pus_CloseWin,'Enable','Off');
  428. end
  429. % End waiting.
  430. %-------------
  431. CleanTOOL(hFig,eventdata,handles,'Tog_Inspect_Callback','end',Val_Inspect);
  432. wwaiting('off',hFig);
  433. %--------------------------------------------------------------------------
  434. % --- Executes on selection change in Pop_Nod_Lab.
  435. function Pop_Nod_Lab_Callback(hObject,eventdata,handles)
  436. hFig = handles.output;
  437. lab_Value  = get(hObject,'Value');
  438. lab_String = get(hObject,'String');
  439. NodeLabType = deblank(lab_String{lab_Value,:});
  440. node_PARAMS = wtbxappdata('get',hFig,'node_PARAMS');
  441. if isequal(NodeLabType,node_PARAMS.nodeLab) , return; end
  442. node_PARAMS.nodeLab = NodeLabType;
  443. wtbxappdata('set',hFig,'node_PARAMS',node_PARAMS);
  444. Tree_MANAGER('setNodeLab',hFig,eventdata,handles,lab_Value)
  445. %--------------------------------------------------------------------------
  446. % --- Executes on selection change in Pop_Nod_Act.
  447. function Pop_Nod_Act_Callback(hObject,eventdata, handles)
  448. hFig = handles.output;
  449. act_Value = get(hObject,'Value');
  450. act_String = get(hObject,'String');
  451. NodeActType = deblank(act_String{act_Value,:});
  452. node_PARAMS = wtbxappdata('get',hFig,'node_PARAMS');
  453. if isequal(NodeActType,node_PARAMS.nodeAct) , return; end
  454. node_PARAMS.nodeAct = NodeActType;
  455. wtbxappdata('set',hFig,'node_PARAMS',node_PARAMS);
  456. Tree_MANAGER('setNodeAct',hFig,eventdata,handles,act_Value)
  457. %=========================================================================%
  458. %                END Callback Functions                                   %
  459. %=========================================================================%
  460. %=========================================================================%
  461. %                    TREE MANAGEMENT and CALLBACK FUNCTIONS               %
  462. %-------------------------------------------------------------------------%
  463. function varargout = Tree_MANAGER(option,hFig,eventdata,handles,varargin)
  464. % Miscelleanous Values.
  465. %----------------------
  466. line_color = [0 0 0];
  467. actColor   = 'b';
  468. inactColor = 'r';
  469. % MemBloc of stored values.
  470. %--------------------------
  471. n_stored_val = 'NTREE_Plot';
  472. ind_tree     = 1;
  473. ind_Class    = 2;
  474. ind_hdls_txt = 3;
  475. ind_hdls_lin = 4;
  476. ind_menu_NodeLab =  5;
  477. ind_type_NodeLab =  6;
  478. ind_menu_NodeAct =  7;
  479. ind_type_NodeAct =  8;
  480. ind_menu_TreeAct =  9;
  481. ind_type_TreeAct = 10;
  482. nb1_stored = 10;
  483. % Handles.
  484. %---------
  485. tool_hdl_AXES = wtbxappdata('get',hFig,'tool_hdl_AXES');
  486. axe_TREE = tool_hdl_AXES.axe_TREE;
  487. Axe_Tree_Dec  = axe_TREE(1);
  488. Axe_Tree_Img1 = axe_TREE(2);
  489. Axe_Tree_Img2 = axe_TREE(3);
  490. Axe_Tree_ImgF = axe_TREE(4);
  491. % tool_PARAMS.
  492. %-------------
  493. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  494. tree_F = tool_PARAMS.DecIMG_F;
  495. str_numf = sprintf('%20.15f',hFig);
  496. switch option
  497.     case 'create'
  498.         % node_PARAMS.
  499.         %-------------
  500.         node_PARAMS = wtbxappdata('get',hFig,'node_PARAMS');
  501.         type_NodeLab = node_PARAMS.nodeLab;
  502.         type_NodeAct = node_PARAMS.nodeAct;
  503.         
  504.         Tree_Colors = struct(...
  505.             'line_color',line_color, ...
  506.             'actColor',actColor,     ...
  507.             'inactColor',inactColor);  
  508.         wtbxappdata('set',hFig,'Tree_Colors',Tree_Colors);
  509.         set(Axe_Tree_Dec,'DefaultTextFontSize',8)
  510.         order = treeord(tree_F);
  511.         depth = treedpth(tree_F);
  512.         allN  = allnodes(tree_F);
  513.         NBnod = (order^(depth+1)-1)/(order-1);
  514.         table_node = -ones(1,NBnod);
  515.         table_node(allN+1) = allN;
  516.         [xnpos,ynpos] = xynodpos(table_node,order,depth);
  517.         
  518.         hdls_lin = zeros(1,NBnod);
  519.         hdls_txt = zeros(1,NBnod);
  520.         i_fath  = 1;
  521.         i_child = i_fath+[1:order];
  522.         for d=1:depth
  523.             ynT = ynpos(d,:);
  524.             ynL = ynT+[0.01 -0.01];
  525.             for p=0:order^(d-1)-1
  526.                 if table_node(i_child(1)) ~= -1
  527.                     for k=1:order
  528.                         ic = i_child(k);
  529.                         hdls_lin(ic) = line(...
  530.                             'Parent',Axe_Tree_Dec, ...
  531.                             'XData',[xnpos(i_fath) xnpos(ic)],...
  532.                             'YData',ynL,...
  533.                             'Color',line_color);
  534.                     end
  535.                 end
  536.                 i_child = i_child+order;
  537.                 i_fath  = i_fath+1;
  538.             end
  539.         end
  540.         labels = tlabels(tree_F,'i'); % Indices
  541.         textProp = {...
  542.                 'Parent',Axe_Tree_Dec,          ...
  543.                 'FontWeight','bold',            ...
  544.                 'Color',actColor,               ...
  545.                 'HorizontalAlignment','center', ...
  546.                 'VerticalAlignment','middle',   ...
  547.                 'Clipping','on'                 ...
  548.             };    
  549.         
  550.         i_node = 1;   
  551.         hdls_txt(i_node) = ...
  552.             text(textProp{:},...
  553.             'String', labels(i_node,:),   ...
  554.             'Position',[0 0.1 0],         ...
  555.             'UserData',table_node(i_node) ...
  556.             );
  557.         i_node = i_node+1;
  558.         
  559.         i_fath  = 1;
  560.         i_child = i_fath+[1:order];
  561.         for d=1:depth
  562.             for p=0:order:order^d-1
  563.                 if table_node(i_child(1)) ~= -1
  564.                     p_child = p + [0:order-1];
  565.                     for k=1:order
  566.                         ic = i_child(k);
  567.                         hdls_txt(ic) = text(...
  568.                             textProp{:},...
  569.                             'String',labels(i_node,:), ...
  570.                             'Position',[xnpos(ic) ynpos(d,2) 0],...
  571.                             'Userdata',table_node(ic)...
  572.                             );
  573.                         i_node = i_node+1;
  574.                     end
  575.                 end
  576.                 i_child = i_child+order;
  577.             end
  578.         end
  579.         nodeAction = ...
  580.             [mfilename '(''nodeAction_CallBack'',gco,[],' num2mstr(hFig) ');'];
  581.         set(hdls_txt(hdls_txt~=0),'ButtonDownFcn',nodeAction);
  582.         [nul,notAct] = findactn(tree_F,allN,'na');
  583.         set(hdls_txt(notAct+1),'Color',inactColor);
  584.         %----------------------------------------------
  585.         switch type_NodeLab
  586.             case 'Index' ,
  587.             otherwise    , plot(tree_F,'setNodeLabel',hFig,type_NodeLab);
  588.         end        
  589.         %----------------------------------------------
  590.         m_lab = [];
  591.         wmemtool('wmb',hFig,n_stored_val, ...
  592.             ind_tree,tree_F,      ...
  593.             ind_hdls_txt,hdls_txt, ...
  594.             ind_hdls_lin,hdls_lin, ...
  595.             ind_menu_NodeLab,m_lab, ...
  596.             ind_type_NodeLab,'Index', ...
  597.             ind_type_NodeAct,'' ...
  598.             );        
  599.         %----------------------------------------------
  600.         setAxesTitle(Axe_Tree_Dec,'Wavelet Decomposition Tree');
  601.         %================ BUG for Title ==================
  602.         h_Title = get(Axe_Tree_Dec,'title');
  603.         pos = get(h_Title,'Position');
  604.         set(h_Title,'Position',[0  0.0354  1.000]);
  605.         %=================================================
  606.         show_Node_IMAGES(hFig,'Visualize',0)
  607.         
  608.     case 'setNodeLab'
  609.         if length(varargin)>1
  610.             labValue = varargin{1};
  611.         else
  612.             handles = guihandles(hFig);
  613.             labValue = get(handles.Pop_Nod_Lab,'Value');
  614.         end
  615.         switch labValue
  616.             case 1 , labtype = 'i'; 
  617.             case 2 , labtype = 'dp';
  618.             case 3 , labtype = 's';
  619.             case 4 , labtype = 't';
  620.         end
  621.         labels = tlabels(tree_F,labtype);
  622.         hdls_txt = wmemtool('rmb',hFig,n_stored_val,ind_hdls_txt);
  623.         hdls_txt = hdls_txt(hdls_txt~=0);
  624.         for k=1:length(hdls_txt), set(hdls_txt(k),'String',labels(k,:)); end
  625.     case 'setNodeAct'
  626.         actValue = varargin{1};
  627.         nodeAction = ...
  628.             [mfilename '(''nodeAction_CallBack'',gco,[],' num2mstr(hFig) ');'];
  629.         hdls_txt = wmemtool('rmb',hFig,n_stored_val,ind_hdls_txt);
  630.         set(hdls_txt(hdls_txt~=0),'ButtonDownFcn',nodeAction);        
  631. end
  632. %-------------------------------------------------------------------------%
  633. function nodeAction_CallBack(hObject,eventdata,hFig)
  634. node = plot(ntree,'getNode',hFig);
  635. if isempty(node) , return; end
  636. node_PARAMS = wtbxappdata('get',hFig,'node_PARAMS');
  637. nodeAct = node_PARAMS.nodeAct;
  638. if isequal(nodeAct,'Split_Merge') | isequal(nodeAct,'Split / Merge')
  639.     tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  640.     tree_F = tool_PARAMS.DecIMG_F;
  641.     tnrank = findactn(tree_F,node);
  642.     if isnan(tnrank) , return;  end
  643.     plot(tree_F,'Split-Merge',hFig);
  644.     tree_1 = tool_PARAMS.DecIMG_1;
  645.     tree_2 = tool_PARAMS.DecIMG_2;
  646.     if tnrank>0
  647.         tree_1 = nodesplt(tree_1,node);
  648.         tree_2 = nodesplt(tree_2,node);
  649.         tree_F = nodesplt(tree_F,node);
  650.     else
  651.         tree_1 = nodejoin(tree_1,node);
  652.         tree_2 = nodejoin(tree_2,node);
  653.         tree_F = nodejoin(tree_F,node);
  654.     end
  655.     tool_PARAMS.DecIMG_1 = tree_1;
  656.     tool_PARAMS.DecIMG_2 = tree_2;
  657.     tool_PARAMS.DecIMG_F = tree_F;
  658.     wtbxappdata('set',hFig,'tool_PARAMS',tool_PARAMS);
  659.     Tree_MANAGER('setNodeLab',hFig,eventdata,guihandles(hFig))
  660. else
  661.     show_Node_IMAGES(hFig,nodeAct,node);
  662. end
  663. %-------------------------------------------------------------------------%
  664. function show_Node_IMAGES(hFig,nodeAct,node)
  665. tool_hdl_AXES = wtbxappdata('get',hFig,'tool_hdl_AXES');
  666. axe_TREE = tool_hdl_AXES.axe_TREE;
  667. Axe_Tree_Img1 = axe_TREE(2);
  668. Axe_Tree_Img2 = axe_TREE(3);
  669. Axe_Tree_ImgF = axe_TREE(4);
  670. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  671. tree_1 = tool_PARAMS.DecIMG_1;
  672. tree_2 = tool_PARAMS.DecIMG_2;
  673. tree_F = tool_PARAMS.DecIMG_F;
  674. mousefrm(hFig,'watch')
  675. NBC = cbcolmap('get',hFig,'nbColors');
  676. flag_INVERSE = false;
  677. show_One_IMAGE(nodeAct,tree_1,node,NBC,flag_INVERSE,Axe_Tree_Img1,'Image 1')
  678. show_One_IMAGE(nodeAct,tree_2,node,NBC,flag_INVERSE,Axe_Tree_Img2,'Image 2')
  679. show_One_IMAGE(nodeAct,tree_F,node,NBC,flag_INVERSE,Axe_Tree_ImgF,'Synthesized Image')
  680. lind = tlabels(tree_F,'i',node);
  681. ldep = tlabels(tree_F,'p',node);
  682. axeTitle = ['Coefficients: node ' lind ' or ' ldep];
  683. if isequal(nodeAct,'Reconstruct')
  684.     axeTitle = ['Reconstructed ' axeTitle];
  685. end
  686. setAxesTitle(Axe_Tree_ImgF,axeTitle);
  687. mousefrm(hFig,'arrow')
  688. dynvtool('init',hFig,axe_TREE(1),axe_TREE(2:4),[],[1 1],'','','','int');
  689. %-------------------------------------------------------------------------%
  690. function show_One_IMAGE(nodeAct,treeOBJ,node,NBC,flag_INVERSE,axe,xlab)
  691. X = getCoded_IMAGE(nodeAct,treeOBJ,node,NBC,flag_INVERSE);
  692. axes(axe); 
  693. image(X);
  694. setAxesXlabel(axe,xlab);
  695. %-------------------------------------------------------------------------%
  696. function X = getCoded_IMAGE(nodeAct,treeOBJ,node,NBC,flag_INVERSE)
  697. switch nodeAct
  698.     case 'Visualize' , [nul,X] = nodejoin(treeOBJ,node);
  699.     case 'Reconstruct' , X = rnodcoef(treeOBJ,node);
  700. end
  701. if node>0 , 
  702.     X = wcodemat(X,NBC,'mat',1);
  703.     if flag_INVERSE & rem(node,4)~=1 , X = max(max(X))-X; end
  704. end
  705. %==========================================================================
  706. %=========================================================================%
  707. %                BEGIN Callback Menus                                     %
  708. %                --------------------                                     %
  709. %=========================================================================%
  710. function demo_FUN(hObject,eventdata,handles,numDEM)
  711. switch numDEM
  712.     case 1 
  713.         I_1 = 'detail_1'; I_2 = 'detail_2';
  714.         wname = 'db1' ; level = 2;
  715.         AfusMeth = 'max';
  716.         DfusMeth = 'max'; 
  717.     case 2
  718.         I_1 = 'cathe_1'; I_2 = 'cathe_2';
  719.         wname = 'db1' ; level = 2;
  720.         AfusMeth = 'max'; 
  721.         DfusMeth = 'max';       
  722.     case 3
  723.         I_1 = 'mask'; I_2 = 'bust';
  724.         wname = 'db1' ; level = 2;
  725.         AfusMeth = 'max';
  726.         DfusMeth = 'max';
  727.     case 4
  728.         I_1 = 'mask'; I_2 = 'bust';
  729.         wname = 'bior6.8' ; level = 3;
  730.         AfusMeth = 'rand';
  731.         DfusMeth = 'max';         
  732.     case 5
  733.         I_1 = 'mask'; I_2 = 'bust';
  734.         wname = 'db1' ; level = 3;
  735.         AfusMeth = struct('name','UD_fusion','param',4);
  736.         DfusMeth = struct('name','UD_fusion','param',1);
  737.     case 6
  738.         I_1 = 'mask'; I_2 = 'bust';
  739.         wname = 'db1' ; level = 3;
  740.         AfusMeth = 'DU_fusion'; DfusMeth = 'DU_fusion';
  741.     case 7
  742.         I_1 = 'mask'; I_2 = 'bust';
  743.         wname = 'db1' ; level = 3;
  744.         AfusMeth = 'LR_fusion'; DfusMeth = 'LR_fusion';
  745.     case 8
  746.         I_1 = 'mask'; I_2 = 'bust';
  747.         wname = 'db1' ; level = 3;
  748.         AfusMeth = 'RL_fusion'; DfusMeth = 'RL_fusion';
  749.     case 9
  750.         I_1 = 'mask'; I_2 = 'bust';
  751.         wname = 'sym6' ; level = 3;
  752.         AfusMeth = struct('name','UD_fusion','param',2);
  753.         DfusMeth = struct('name','UD_fusion','param',4);
  754.     case 10
  755.         I_1 = 'face_mos'; I_2 = 'mask';
  756.         wname = 'sym4' ; level = 3;
  757.         AfusMeth = 'mean';
  758.         DfusMeth = 'max'; 
  759.     case 11
  760.         I_1 = 'face_pai'; I_2 = 'mask';
  761.         wname = 'sym4' ; level = 3;
  762.         AfusMeth = 'mean';
  763.         DfusMeth = 'max';
  764.     case 12
  765.         I_1 = 'fond_bou'; I_2 = 'mask';
  766.         wname = 'sym4' ; level = 3;
  767.         AfusMeth = struct('name','UD_fusion','param',1);
  768.         DfusMeth = 'max'; 
  769.     case 13
  770.         I_1 = 'fond_mos'; I_2 = 'mask';
  771.         wname = 'sym4' ; level = 3;
  772.         AfusMeth = struct('name','UD_fusion','param',1);
  773.         DfusMeth = 'max'; 
  774.     case 14
  775.         I_1 = 'fond_pav'; I_2 = 'mask';
  776.         wname = 'sym4' ; level = 3;
  777.         AfusMeth = struct('name','UD_fusion','param',0.5);
  778.         DfusMeth = 'max';
  779.     case 15
  780.         I_1 = 'fond_tex'; I_2 = 'mask';
  781.         wname = 'sym4' ; level = 3;
  782.         AfusMeth  = struct('name','UD_fusion','param',0.5);
  783.         DfusMeth = 'img1';
  784.     case 16
  785.         I_1 = 'pile_mos'; I_2 = 'mask';
  786.         wname = 'sym4' ; level = 3;
  787.         AfusMeth  = struct('name','UD_fusion','param',0.5);
  788.         DfusMeth = 'img1'; 
  789.     case 17
  790.         I_1 = 'arms.jpg'; I_2 = 'fond_tex';
  791.         wname = 'sym4' ; level = 3;
  792.         AfusMeth = 'img1'; 
  793.         DfusMeth = 'max'; 
  794. end
  795. % Get figure handle.
  796. %-------------------
  797. hFig = handles.output;
  798. % Testing file.
  799. %--------------
  800. def_nbCodeOfColors = 255;
  801. filename = I_1;
  802. idx = findstr(filename,'.');
  803. if isempty(idx) , filename = [filename '.mat']; end
  804. pathname = utguidiv('WTB_DemoPath',filename);
  805. [imgInfos_1,X_1,map,ok] = ...
  806.     utguidiv('load_dem2D',hFig,pathname,filename,def_nbCodeOfColors);
  807. if ~ok, return; end
  808. okSize = tst_ImageSize(hFig,1,imgInfos_1);
  809. filename = I_2;
  810. idx = findstr(filename,'.');
  811. if isempty(idx) , filename = [filename '.mat']; end
  812. [imgInfos_2,X_2,map,ok] = ...
  813.     utguidiv('load_dem2D',hFig,pathname,filename,def_nbCodeOfColors);
  814. if ~ok, return; end
  815. okSize = tst_ImageSize(hFig,2,imgInfos_2);
  816. % Cleaning.
  817. %----------
  818. wwaiting('msg',hFig,'Wait ... cleaning');
  819. CleanTOOL(hFig,eventdata,handles,'demo_FUN');
  820. % Setting Analysis parameters
  821. %----------------------------
  822. cbanapar('set',hFig,'wav',wname,'lev',level);
  823. set_Fus_Methode('app',AfusMeth,eventdata,handles);
  824. set_Fus_Methode('det',DfusMeth,eventdata,handles);
  825. % Loading Images and Setting GUI.
  826. %-------------------------------
  827. if isequal(imgInfos_1.true_name,'X')
  828.     img_Name_1 = imgInfos_1.name;
  829. else
  830.     img_Name_1 = imgInfos_1.true_name;
  831. end
  832. img_Size_1 = imgInfos_1.size;
  833. NB_ColorsInPal = size(map,1);
  834. if imgInfos_1.self_map , arg = map; else , arg = []; end
  835. cbcolmap('set',hFig,'pal',{'pink',NB_ColorsInPal,'self',arg});
  836. n_s = [img_Name_1 '  (' , int2str(img_Size_1(2)) 'x' int2str(img_Size_1(1)) ')'];
  837. set(handles.Edi_Data_NS,'String',n_s);                
  838. axes(handles.Axe_Image_1); 
  839. image(X_1);
  840. setAxesTitle(handles.Axe_Image_1,'Image 1');
  841. %--------------------------------------------
  842. if isequal(imgInfos_2.true_name,'X')
  843.     img_Name_2 = imgInfos_2.name;
  844. else
  845.     img_Name_2 = imgInfos_2.true_name;
  846. end
  847. img_Size_2 = imgInfos_2.size;
  848. NB_ColorsInPal = size(map,1);
  849. if imgInfos_2.self_map , arg = map; else , arg = []; end
  850. cbcolmap('set',hFig,'pal',{'pink',NB_ColorsInPal,'self',arg});
  851. n_s = [img_Name_2 '  (' , int2str(img_Size_2(2)) 'x' int2str(img_Size_2(1)) ')'];
  852. set(handles.Edi_Image_2,'String',n_s);                
  853. axes(handles.Axe_Image_2); 
  854. image(X_2);
  855. setAxesTitle(handles.Axe_Image_2,'Image 2');
  856. %--------------------------------------------
  857. % Decomposition and Fusion.
  858. %--------------------------
  859. Pus_Decompose_Callback(handles.Pus_Decompose,eventdata,handles);
  860. Pus_Fusion_Callback(handles.Pus_Fusion,eventdata,handles);
  861. %--------------------------------------------------------------------------
  862. function set_Fus_Methode(type,fusMeth,eventdata,handles)
  863. switch type
  864.     case 'app'
  865.         Pop = handles.Pop_Fus_App;
  866.         Edi = handles.Edi_Fus_App;
  867.     case 'det'
  868.         Pop = handles.Pop_Fus_Det;
  869.         Edi = handles.Edi_Fus_Det;
  870. end
  871. if ischar(fusMeth)
  872.     fusMeth.name  = fusMeth;
  873.     fusMeth.param = '';
  874. end
  875. methName = fusMeth.name;
  876. tabMeth = get(Pop,'String');
  877. numMeth = strmatch(methName,tabMeth);
  878. set(Pop,'Value',numMeth);
  879. switch type
  880.     case 'app'
  881.         Pop_Fus_App_Callback(Pop,eventdata,handles);
  882.     case 'det'
  883.         Pop_Fus_Det_Callback(Pop,eventdata,handles);
  884. end
  885. ediVAL = get(Edi,'String');
  886. newVAL = num2str(fusMeth.param);
  887. if isempty(newVAL) , newVAL = ediVAL; end
  888. set(Edi,'String',newVAL);
  889. %-------------------------------------------------------------------------%
  890. function save_FUN(hObject,eventdata,handles)
  891. % Get figure handle.
  892. %-------------------
  893. hFig = handles.output;
  894. % Testing file.
  895. %--------------
  896. [filename,pathname,ok] = utguidiv('test_save',hFig, ...
  897.     '*.mat','Save Synthesized Image');
  898. if ~ok, return; end
  899. % Begin waiting.
  900. %--------------
  901. wwaiting('msg',hFig,'Wait ... saving');
  902. % Getting Synthesized Image.
  903. %---------------------------
  904. axe = handles.Axe_Image_Fus;
  905. img_Fus = findobj(axe,'Type','image');
  906. X = round(get(img_Fus,'Cdata'));
  907. map = cbcolmap('get',hFig,'self_pal');
  908. if isempty(map)
  909.     mi = round(min(min(X)));
  910.     ma = round(max(max(X)));
  911.     if mi<=0 , ma = ma-mi+1; end
  912.     ma  = min([default_nbcolors,max([2,ma])]);
  913.     map = pink(ma);
  914. end
  915. % Saving file.
  916. %--------------
  917. [name,ext] = strtok(filename,'.');
  918. if isempty(ext) | isequal(ext,'.')
  919.     ext = '.mat'; filename = [name ext];
  920. end
  921. wwaiting('off',hFig);
  922. try
  923.     save([pathname filename],'X','map');
  924. catch
  925.     errargt(mfilename,'Save FAILED !','msg');
  926. end
  927. %-------------------------------------------------------------------------%
  928. function close_FUN(hObject,eventdata,handles)
  929. Pus_CloseWin = handles.Pus_CloseWin;
  930. Pus_CloseWin_Callback(Pus_CloseWin,eventdata,handles);
  931. %--------------------------------------------------------------------------
  932. %=========================================================================%
  933. %                END Callback Menus                                       %
  934. %=========================================================================%
  935. %=========================================================================%
  936. %                BEGIN CleanTOOL function                                 %
  937. %                ------------------------                                 %
  938. %=========================================================================%
  939. function CleanTOOL(hFig,eventdata,handles,callName,option,varargin)
  940. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');
  941. hdl_Menus   = wtbxappdata('get',hFig,'hdl_Menus');
  942. ena_LOAD_DEC = 'On';
  943. switch callName
  944.     case 'demo_FUN'
  945.         tool_PARAMS.flagIMG_1 = true;
  946.         tool_PARAMS.flagIMG_2 = true;
  947.         tool_PARAMS.flagDEC   = false;
  948.         tool_PARAMS.flagFUS   = false;
  949.         tool_PARAMS.flagINS   = false;
  950.         hAXE = [handles.Axe_ImgDec_1,  handles.Axe_ImgDec_2,...
  951.                 handles.Axe_Image_Fus, handles.Axe_ImgDec_Fus];
  952.         hIMG = findobj(hAXE,'type','image');
  953.         delete(hIMG);
  954.                 
  955.     case 'Load_Img1_Callback'
  956.         switch option
  957.             case 'beg'
  958.                 tool_PARAMS.flagIMG_1 = true;
  959.                 tool_PARAMS.flagDEC   = false;
  960.                 tool_PARAMS.flagFUS   = false;
  961.                 tool_PARAMS.flagINS   = false;
  962.                 hAXE = [handles.Axe_ImgDec_1,handles.Axe_ImgDec_2 ...
  963.                         handles.Axe_Image_Fus,handles.Axe_ImgDec_Fus ...
  964.                         ];
  965.                 hIMG = findobj(hAXE,'type','image');
  966.                 delete(hIMG);
  967.             case 'end'
  968.         end
  969.         
  970.     case 'Load_Img2_Callback'
  971.         switch option
  972.             case 'beg' 
  973.                 tool_PARAMS.flagIMG_2 = true;
  974.                 tool_PARAMS.flagDEC   = false;
  975.                 tool_PARAMS.flagFUS   = false;
  976.                 tool_PARAMS.flagINS   = false;
  977.                 hAXE = [handles.Axe_ImgDec_1,handles.Axe_ImgDec_2 ...
  978.                         handles.Axe_Image_Fus,handles.Axe_ImgDec_Fus ...
  979.                         ];
  980.                 hIMG = findobj(hAXE,'type','image');
  981.                 delete(hIMG);
  982.             case 'end'
  983.         end
  984.         
  985.     case 'Pus_Decompose_Callback'
  986.         switch option
  987.             case 'beg' , 
  988.                 tool_PARAMS.flagDEC = true;
  989.                 tool_PARAMS.flagFUS = false;
  990.                 hAXE = [handles.Axe_Image_Fus,handles.Axe_ImgDec_Fus];
  991.                 hIMG = findobj(hAXE,'type','image');
  992.                 delete(hIMG);
  993.             case 'end'
  994.         end
  995.         
  996.     case 'Pus_Fusion_Callback'
  997.         switch option
  998.             case 'beg' ,
  999.             case 'end' , tool_PARAMS.flagFUS = true;
  1000.         end
  1001.         
  1002.     case 'Tog_Inspect_Callback'
  1003.         Val_Inspect = varargin{1};
  1004.         flag_Enable = logical(1-Val_Inspect);
  1005.         switch option
  1006.             case 'beg' ,
  1007.                 tool_PARAMS.flagDEC = false;
  1008.                 ena_LOAD_DEC = 'Off';
  1009.                 ena_FUS_PAR  = 'Off';
  1010.                 ena_NOD_OPT  = 'Off';
  1011.             case 'end' ,
  1012.                 tool_PARAMS.flagDEC = flag_Enable;
  1013.                 if flag_Enable
  1014.                     ena_LOAD_DEC = 'On';
  1015.                     ena_FUS_PAR  = 'On';
  1016.                     ena_NOD_OPT  = 'Off';
  1017.                 else
  1018.                     ena_LOAD_DEC = 'Off';
  1019.                     ena_FUS_PAR  = 'Off';
  1020.                     ena_NOD_OPT  = 'On';
  1021.                 end
  1022.         end
  1023.         m_Load_Img1 = hdl_Menus.m_Load_Img1;
  1024.         m_Load_Img2 = hdl_Menus.m_Load_Img2;
  1025.         m_demo = hdl_Menus.m_demo;
  1026.         set([m_Load_Img1,m_Load_Img2,m_demo....
  1027.              handles.Pus_Decompose],'Enable',ena_LOAD_DEC);
  1028.         set([handles.Txt_Fus_Params, ...
  1029.              handles.Txt_Fus_App,handles.Pop_Fus_App,  ...
  1030.              handles.Txt_Edi_App,handles.Edi_Fus_App,  ...
  1031.              handles.Txt_Fus_Det,handles.Pop_Fus_Det,  ...
  1032.              handles.Txt_Edi_Det,handles.Edi_Fus_Det],  ...         
  1033.             'Enable',ena_FUS_PAR);
  1034.         set([handles.Txt_Nod_Lab,handles.Pop_Nod_Lab, ...
  1035.              handles.Txt_Nod_Act,handles.Pop_Nod_Act,], ...
  1036.             'Enable',ena_NOD_OPT);
  1037. end
  1038. Ok_DEC = tool_PARAMS.flagIMG_1 & tool_PARAMS.flagIMG_2;
  1039. if Ok_DEC & isequal(ena_LOAD_DEC,'On')
  1040.     set(handles.Pus_Decompose,'Enable','On');
  1041. else
  1042.     set(handles.Pus_Decompose,'Enable','Off');
  1043. end
  1044. if tool_PARAMS.flagDEC
  1045.     set(handles.Pus_Fusion,'Enable','On');
  1046. else
  1047.     set(handles.Pus_Fusion,'Enable','Off');
  1048. end
  1049. m_save = hdl_Menus.m_save;
  1050. if tool_PARAMS.flagFUS
  1051.     set(handles.Tog_Inspect,'Enable','On');
  1052.     set(m_save,'Enable','On')
  1053. else
  1054.     set(handles.Tog_Inspect,'Enable','Off');
  1055.     set(m_save,'Enable','Off')
  1056. end
  1057. wtbxappdata('set',hFig,'tool_PARAMS',tool_PARAMS);
  1058. %--------------------------------------------------------------------------
  1059. %=========================================================================%
  1060. %                END CleanTOOL function                                   %
  1061. %=========================================================================%
  1062. %=========================================================================%
  1063. %                BEGIN Tool Initialization                                %
  1064. %                -------------------------                                %
  1065. %=========================================================================%
  1066. function Init_Tool(hObject,eventdata,handles)
  1067. % WTBX -- Install DynVTool
  1068. %-------------------------
  1069. dynvtool('Install_V3',hObject,handles);
  1070. % WTBX MENUS -- Install
  1071. %----------------------
  1072. wfigmngr('extfig',hObject,'ExtFig_GUIDE')
  1073. wfigmngr('attach_close',hObject);
  1074. set(hObject,'HandleVisibility','On')
  1075. % WTBX -- Install ANAPAR FRAME
  1076. %-----------------------------
  1077. wnameDEF  = 'db1';
  1078. maxlevDEF = 5;
  1079. levDEF    = 2;
  1080. utanapar('Install_V3_CB',hObject,'maxlev',maxlevDEF,'deflev',levDEF);
  1081. set(hObject,'Visible','On'); pause(0.01) %%% MiMi : BUG MATLAB %%%
  1082. cbanapar('set',hObject,'wav',wnameDEF,'lev',levDEF);
  1083. % WTBX -- Install COLORMAP FRAME
  1084. %-------------------------------
  1085. utcolmap('Install_V3',hObject,'enable','On');
  1086. default_nbcolors = 128;
  1087. cbcolmap('set',hObject,'pal',{'pink',default_nbcolors})
  1088. %-------------------------------------------------------------------------
  1089. % TOOL INITIALISATION
  1090. %-------------------------------------------------------------------------
  1091. % UIMENU INSTALLATION
  1092. %--------------------
  1093. hdl_Menus = Install_MENUS(hObject);
  1094. wtbxappdata('set',hObject,'hdl_Menus',hdl_Menus);
  1095. %------------------------------------------------
  1096. set(hObject,'DefaultAxesXtick',[],'DefaultAxesYtick',[])
  1097. hdl_Arrows = arrowfus(hObject,handles);
  1098. wtbxappdata('set',hObject,'hdl_Arrows',hdl_Arrows);
  1099. %-------------------------------------------------------------------------
  1100. axe_INI = [...
  1101.     handles.Axe_ImgDec_1 , handles.Axe_ImgDec_2 , handles.Axe_ImgDec_Fus ,...
  1102.     handles.Axe_Image_1  , handles.Axe_Image_2 ,  handles.Axe_Image_Fus...
  1103.     ];
  1104. axe_TREE = [...
  1105.     handles.Axe_Tree_Dec , ...
  1106.     handles.Axe_Tree_Img1  , handles.Axe_Tree_Img2 ,  handles.Axe_Tree_ImgF...
  1107.     ];
  1108. tool_hdl_AXES = struct('axe_INI',axe_INI,'axe_TREE',axe_TREE);
  1109. wtbxappdata('set',hObject,'tool_hdl_AXES',tool_hdl_AXES);
  1110. %-------------------------------------------------------------------------
  1111. setAxesTitle(handles.Axe_Image_1,'Image 1');
  1112. setAxesTitle(handles.Axe_Image_2,'Image 2');
  1113. setAxesXlabel(handles.Axe_Image_Fus,'Synthesized Image');
  1114. setAxesTitle(handles.Axe_ImgDec_1,'Decomposition 1');
  1115. setAxesTitle(handles.Axe_ImgDec_2,'Decomposition 2');
  1116. setAxesXlabel(handles.Axe_ImgDec_Fus,'Fusion of Decompositions');
  1117. %----------------------------------------------------------------
  1118. dwt_ATTRB   = struct('type','lwt','wname','','level',[]);
  1119. tool_PARAMS = struct(...
  1120.     'infoIMG_1',[],'infoIMG_2',[],...    
  1121.     'flagIMG_1',false,'flagIMG_2',false,...
  1122.     'flagDEC',false,'flagFUS',false, 'flagINS',false, ...
  1123.     'DecIMG_1',[],'DecIMG_2',[],'DecIMG_F',[], ...
  1124.     'dwt_ATTRB',dwt_ATTRB);
  1125. wtbxappdata('set',hObject,'tool_PARAMS',tool_PARAMS);
  1126. %-------------------------------------------------------------
  1127. node_PARAMS = struct('nodeLab','Index','nodeAct','Visualize');
  1128. wtbxappdata('set',hObject,'node_PARAMS',node_PARAMS);
  1129. %--------------------------------------------------------------
  1130. % End Of initialization.
  1131. %-----------------------
  1132. redimfig('On',hObject);
  1133. set(hObject,'HandleVisibility','Callback')
  1134. %=========================================================================%
  1135. %                END Tool Initialization                                  %
  1136. %=========================================================================%
  1137. %=========================================================================%
  1138. %                BEGIN Internal Functions                                 %
  1139. %                ------------------------                                 %
  1140. %=========================================================================%
  1141. function hdl_Menus = Install_MENUS(hFig)
  1142. m_files = wfigmngr('getmenus',hFig,'file');
  1143. m_close = wfigmngr('getmenus',hFig,'close');
  1144. cb_close = [mfilename '(''close_FUN'',gcbo,[],guidata(gcbo));'];
  1145. set(m_close,'Callback',cb_close);
  1146. m_Load_Img1  = uimenu(m_files, ...
  1147.     'Label','&Load Image 1',   ...
  1148.     'Position',1,              ...
  1149.     'Enable','On',             ...
  1150.     'Callback',                ...
  1151.     [mfilename '(''Load_Img1_Callback'',gcbo,[],guidata(gcbo));']  ...
  1152.     );
  1153. m_Load_Img2  = uimenu(m_files, ...
  1154.     'Label','&Load Image 2',   ...
  1155.     'Position',2,              ...
  1156.     'Enable','On',             ...
  1157.     'Callback',                ...
  1158.     [mfilename '(''Load_Img2_Callback'',gcbo,[],guidata(gcbo));']  ...
  1159.     );
  1160. m_save  = uimenu(m_files,...
  1161.     'Label','&Save Synthesized Image ', ...
  1162.     'Position',3,    ...
  1163.     'Enable','Off',  ...
  1164.     'Callback',      ...
  1165.     [mfilename '(''save_FUN'',gcbo,[],guidata(gcbo));'] ...
  1166.     );
  1167. m_demo  = uimenu(m_files,'Label','&Example ','Position',4,'Separator','On');
  1168. tab = setstr(9);
  1169. demoSET = {...
  1170.         ['Magic Square' tab '- wavelet: db1 - level: 2 - fusion method (max,max)'];       ...
  1171.         ['Catherine' tab  '- wavelet: db1 - level: 2 - fusion method (max,max)'];         ...
  1172.         ['Mask and Bust' tab  '- wavelet: db1 - level: 2 - fusion method (max,max)'];  ...
  1173.         ['Mask and Bust' tab  '- wavelet: bior6.8 - level: 3 - fusion method (rand,max)'];  ...
  1174.         ['Mask and Bust' tab  '- wavelet: db1 - level: 3 - fusion method (UD_fusion,UD_fusion)'];  ...    
  1175.         ['Mask and Bust' tab  '- wavelet: db1 - level: 3 - fusion method (DU_fusion,DU_fusion)'];  ... 
  1176.         ['Mask and Bust' tab  '- wavelet: db1 - level: 3 - fusion method (LR_fusion,LR_fusion)'];  ...    
  1177.         ['Mask and Bust' tab  '- wavelet: db1 - level: 3 - fusion method (RL_fusion,RL_fusion)'];   ...
  1178.         ['Mask and Bust' tab  '- wavelet: sym6 - level: 3 - fusion method ( [UD_fusion,2] , [UD_fusion,4] )'];  ...
  1179.         ['Texture (1) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method (mean,max)'];  ...
  1180.         ['Texture (2) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method (mean,max)'];  ...
  1181.         ['Texture (3) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method ( [UD_fusion,1] , max)']; ... 
  1182.         ['Texture (4) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method ( [UD_fusion,1] , max)']; ... 
  1183.         ['Texture (5) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method ( [UD_fusion,0.5] , max)']; ... 
  1184.         ['Texture (6) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method  ( [UD_fusion,0.5] , img1)'];  ...
  1185.         ['Texture (7) and Mask' tab  '- wavelet: sym4 - level: 3 - fusion method  ( [UD_fusion,0.5] , img1)'];  ...
  1186.         ['Texture (8) and Arms' tab  '- wavelet: sym4 - level: 3 - fusion method  (img1,max)']  ...        
  1187.     };
  1188. nbDEM = size(demoSET,1);
  1189. sepSET = [3,10];
  1190. for k = 1:nbDEM
  1191.     strNUM = int2str(k);
  1192.     action = [mfilename '(''demo_FUN'',gcbo,[],guidata(gcbo),' strNUM ');'];
  1193.     if find(k==sepSET) , Sep = 'On'; else , Sep = 'Off'; end
  1194.     uimenu(m_demo,'Label',[demoSET{k,1}],'Separator',Sep,'Callback',action);
  1195. end
  1196. hdl_Menus = struct('m_files',m_files,'m_close',m_close,...
  1197.     'm_Load_Img1',m_Load_Img1,'m_Load_Img2',m_Load_Img2,...
  1198.     'm_save',m_save,'m_demo',m_demo);
  1199. % Add Help for Tool.
  1200. %------------------
  1201. wfighelp('addHelpTool',hFig,'&Image Fusion','WFUS_GUI');
  1202. %-------------------------------------------------------------------------
  1203. % BEGIN: Arrows for WTBX FUSION TOOL %
  1204. %------------------------------------%
  1205. function hdl_Arrows = arrowfus(fig,handles)
  1206. %ARROWFUS Plot the arrows for WFUSTOOL.
  1207. colArrowDir = [0.925 0.925 0.925]; % Gray 
  1208. colArrowRev = colArrowDir;
  1209. axe_arrow = handles.Axe_Utils;
  1210. axes(axe_arrow);
  1211. Axe_Image_1    = handles.Axe_Image_1;
  1212. Axe_ImgDec_1   = handles.Axe_ImgDec_1;
  1213. Axe_Image_2    = handles.Axe_Image_2;
  1214. Axe_ImgDec_2   = handles.Axe_ImgDec_2;
  1215. Axe_Image_Fus  = handles.Axe_Image_Fus;
  1216. Axe_ImgDec_Fus = handles.Axe_ImgDec_Fus;
  1217. [ar1,t1] = PlotArrow('direct',axe_arrow, ...
  1218.     Axe_Image_1,Axe_ImgDec_1,colArrowDir,'On');
  1219. [ar2,t2] = PlotArrow('direct',axe_arrow, ...
  1220.     Axe_Image_2,Axe_ImgDec_2,colArrowDir,'On');
  1221. [ar3,t3] = PlotArrow('reverse',axe_arrow, ...
  1222.     Axe_Image_Fus,Axe_ImgDec_Fus,colArrowRev,'On');
  1223. [ar4,t4] = PlotArrowVER('direct',axe_arrow, ...
  1224.     Axe_ImgDec_1,Axe_ImgDec_2,Axe_ImgDec_Fus,colArrowDir,'On');
  1225. set(axe_arrow,'Xlim',[0,1],'Ylim',[0,1])
  1226. hdl_Arrows = [ [ar1,t1] ; [ar2,t2] ; [ar3,t3] ; [ar4,t4]];        
  1227. %----------------------------------------------------------------
  1228. function [ar,t] = ...
  1229.     PlotArrow(option,axe_arrow,axeINI,axeEND,colArrow,visible)
  1230. pImg = get(axeINI,'Position');
  1231. pDec = get(axeEND,'Position');
  1232. xAR_ini = pImg(1) + pImg(3);
  1233. xAR_end = pDec(1);
  1234. dx      = (xAR_end - xAR_ini);
  1235. yAR     = pImg(2) + pImg(4)/2;
  1236. pt1 = [xAR_ini+dx/6 yAR];
  1237. pt2 = [xAR_end-dx/6 yAR];
  1238. if isequal(option,'reverse')
  1239.     rot = pi; Pini = pt2; strTXT = 'idwt'; colorTXT = 'r';
  1240. else
  1241.     rot = 0;  Pini = pt1; strTXT = 'dwt';  colorTXT = 'b';
  1242. end
  1243. ar = wtbarrow('create','axes',axe_arrow,...
  1244.     'Scale',[pt2(1)-pt1(1) 1/9],'Trans',Pini,'Rotation',rot, ...
  1245.     'Color',colArrow,'Visible',visible);
  1246. t = text(...
  1247.     'Position',[xAR_ini + dx/3 yAR],...
  1248.     'String',strTXT,'FontSize',12,'FontWeight','demi','Color',colorTXT);
  1249. %----------------------------------------------------------------
  1250. function [ar,t] = PlotArrowVER(option,axe_arrow,...
  1251.     Axe_ImgDec_1,Axe_ImgDec_2,Axe_ImgDec_Fus,colArrow,visible)
  1252. pDec1 = get(Axe_ImgDec_1,'Position');
  1253. pDec2 = get(Axe_ImgDec_2,'Position');
  1254. pDecF = get(Axe_ImgDec_Fus,'Position');
  1255. dx = pDec1(3)/4;
  1256. dy = pDec1(4)/4;
  1257. E  = 11*dy/60; 
  1258. xAR_ini = pDec1(1) + pDec1(3);
  1259. yAR_ini = pDec1(2) + pDec1(4)/2;
  1260. Pini  = [xAR_ini , yAR_ini];
  1261. x1 = 0;
  1262. x2 = pDec1(2)-pDec2(2);
  1263. x3 = pDec1(2)-pDecF(2);
  1264. XVal = [x1 , x2 , x3];
  1265. YVal = [E , 2.5*E , 6*E];
  1266. typeARROW_VER = 'special_1';
  1267. ar = wtbarrow(typeARROW_VER,'axes',axe_arrow,...
  1268.     'XVal',XVal,'YVal',YVal, ...
  1269.     'HArrow',dy/4,'WArrow',dy/5,'Width',E, ...
  1270.     'Trans',Pini,'Rotation',pi/2, ...   
  1271.     'Color',colArrow,'Visible',visible);
  1272. xT = xAR_ini + 7*E;
  1273. yT = ((pDec1(2) + pDec1(2) + pDec1(4)/2)/2 + pDecF(2)+pDecF(4)/2)/2;
  1274. t = text(...
  1275.     'Position',[xT yT],...
  1276.     'String','FUSION', ...
  1277.     'FontWeight','bold','FontSize',10,'Rotation',-90);
  1278. %-------------------------------------------------------------------------
  1279. % END: Arrows for WTBX FUSION TOOL 
  1280. %-------------------------------------------------------------------------
  1281. %--------------------------------------------------------------------------
  1282. function method = get_Fus_Param(type,handles)
  1283. switch type
  1284.     case 'app'
  1285.         Pop = handles.Pop_Fus_App;
  1286.         Edi = handles.Edi_Fus_App;
  1287.     case 'det'
  1288.         Pop = handles.Pop_Fus_Det;
  1289.         Edi = handles.Edi_Fus_Det;
  1290. end
  1291. numMeth = get(Pop,'Value');
  1292. tabMeth = get(Pop,'String');
  1293. methName = tabMeth{numMeth};
  1294. switch methName
  1295.     case {'max','min','mean','rand','img1','img2'} , 
  1296.         param = get(Edi,'String');
  1297.     case 'linear' ,  
  1298.         param = str2double(get(Edi,'String'));
  1299.     case {'UD_fusion','DU_fusion','LR_fusion','RL_fusion'}
  1300.         param = str2double(get(Edi,'String'));
  1301.     case 'userDEF' 
  1302.         ok = tst_Fus_Param(Pop,Edi,[],handles);
  1303.         param = get(Edi,'String');
  1304.         
  1305. end
  1306. method  = struct('name',methName,'param',param);
  1307. %--------------------------------------------------------------------------
  1308. function set_Fus_Param(Pop,Edi,Txt,eventdata,handles)
  1309. numMeth = get(Pop,'Value');
  1310. tabMeth = get(Pop,'String');
  1311. methName = tabMeth{numMeth};
  1312. switch methName
  1313.     case {'max','min','mean','rand','img1','img2'} , 
  1314.         vis = 'Off'; ediVAL = ''; txtSTR = '';
  1315.     case 'linear' ,  
  1316.         vis = 'On'; ediVAL = 0.5; txtSTR = '0 <= Param. <= 1';
  1317.     case {'UD_fusion','DU_fusion','LR_fusion','RL_fusion'}
  1318.         vis = 'On'; ediVAL = 1;   txtSTR = '0 <= Param.';
  1319.     case 'userDEF' 
  1320.         vis = 'On'; ediVAL = '';  txtSTR = 'Func. Name';
  1321. end
  1322. set(Txt,'String',txtSTR);
  1323. set(Edi,'String',num2str(ediVAL));
  1324. set([Edi,Txt],'Visible',vis);
  1325. %--------------------------------------------------------------------------
  1326. function ok = tst_Fus_Param(Pop,Edi,eventdata,handles)
  1327. numMeth = get(Pop,'Value');
  1328. tabMeth = get(Pop,'String');
  1329. methName = tabMeth{numMeth};
  1330. switch methName
  1331.     case 'linear' ,  
  1332.         def_ediVAL = 0.5;
  1333.         param = str2double(get(Edi,'String'));
  1334.         ok = ~isnan(param);
  1335.         if ok , ok = (0 <= param) & (param <= 1); end
  1336.         
  1337.     case {'UD_fusion','DU_fusion','LR_fusion','RL_fusion'}
  1338.         def_ediVAL = 1;
  1339.         param = str2double(get(Edi,'String'));
  1340.         ok = ~isnan(param);
  1341.         if ok , ok = (0 <= param); end
  1342.         
  1343.     case 'userDEF' 
  1344.         def_ediVAL = 'wfusfun';
  1345.         param = get(Edi,'String');
  1346.         ok = ~isempty(param) & ischar(param);
  1347.         if ok ,
  1348.             userFusFUN = which(param);
  1349.             ok = ~isempty(userFusFUN);
  1350.         end
  1351.         
  1352.     otherwise
  1353.         ok = true; param = get(Edi,'String');
  1354. end
  1355. if ok , def_ediVAL = param; end
  1356. set(Edi,'String',num2str(def_ediVAL));
  1357. %--------------------------------------------------------------------------
  1358. function okSize = tst_ImageSize(hFig,numIMG,info_IMG)
  1359. tool_PARAMS = wtbxappdata('get',hFig,'tool_PARAMS');  
  1360. switch numIMG
  1361.     case 1 , info_OTHER = tool_PARAMS.infoIMG_2;
  1362.     case 2 , info_OTHER = tool_PARAMS.infoIMG_1;
  1363. end
  1364. if isempty(info_OTHER)
  1365.     okSize = true;
  1366. else
  1367.     okSize = isequal(info_IMG.size,info_OTHER.size);
  1368. end
  1369. if ~okSize
  1370.     h = warndlg('The two images must be of the same size','Caution','modal');
  1371.     waitfor(h);
  1372.     wwaiting('off',hFig);
  1373. else
  1374.     switch numIMG
  1375.         case 1 , tool_PARAMS.infoIMG_1 = info_IMG;
  1376.         case 2 , tool_PARAMS.infoIMG_2 = info_IMG;
  1377.     end
  1378.     wtbxappdata('set',hFig,'tool_PARAMS',tool_PARAMS);
  1379. end
  1380. %=========================================================================%
  1381. %                END Internal Functions                                   %
  1382. %=========================================================================%
  1383. %=========================================================================%
  1384. %                BEGIN General Utilities                                  %
  1385. %                -----------------------                                  %
  1386. %=========================================================================%
  1387. function h = setAxesTitle(axe,label)
  1388. axes(axe); 
  1389. h = title(label,'Color','k','FontWeight','demi');
  1390. %----------------------------------------------------------
  1391. function h = setAxesXlabel(axe,label)
  1392. axes(axe); 
  1393. h = xlabel(label,'Color','k','FontWeight','demi');
  1394. %=========================================================================%
  1395. %                END Tool General Utilities                               %
  1396. %=========================================================================%
  1397. %=========================================================================%
  1398. %                      BEGIN Demo Utilities                               %
  1399. %                      ---------------------                              %
  1400. %=========================================================================%
  1401. function closeDEMO(hFig,eventdata,handles,varargin)
  1402. close(hFig);
  1403. %----------------------------------------------------------
  1404. function demoPROC(hFig,eventdata,handles,varargin)
  1405. handles = guidata(hFig);
  1406. numDEM  = varargin{1};
  1407. demo_FUN(hFig,eventdata,handles,numDEM);
  1408. %=========================================================================%
  1409. %                   END Tool Demo Utilities                               %
  1410. %=========================================================================%