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

波变换

开发平台:

Matlab

  1. function varargout = dcmdextm(varargin)
  2. %DCMDEXTM Demonstrates border distortions tools in the Wavelet Toolbox. 
  3. %
  4. % This is a slideshow file for use with wshowdrv.m
  5. % To see it run, type 'wshowdrv dcmdextm', 
  6. %
  7. % See also DWTMODE, WAVEDEC, WAVEDEC2, WRCOEF2. 
  8. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  9. %   Last Revision: 07-May-2003.
  10. %   Copyright 1995-2004 The MathWorks, Inc.
  11. %   $Revision: 1.14.4.2 $  $Date: 2004/03/15 22:36:59 $
  12. % Initialization and Local functions if necessary.
  13. if nargin>0
  14. action = varargin{1};
  15. switch action
  16.       case 'addHelp'
  17. % Add Help Item.
  18. %---------------
  19.         hdlFig = varargin{2};
  20. wfighelp('addHelpItem',hdlFig,'Border distortion','BORDER_DIST');
  21.         
  22.   case 'auto'    , wshowdrv('#autoMode',mfilename,'close');
  23.   case 'gr_auto' , wshowdrv('#gr_autoMode',mfilename,'close');
  24.   case 'getFigParam'
  25. figName  = 'Border distortion';
  26. showType = 'mix6';
  27. varargout = {figName,showType};
  28.   case 'localPROC_1'
  29. [figHandle,modeDWT,axeHDL,strTIT] = deal(varargin{2:end});
  30. dataSTRUCT = wtbxappdata('get',figHandle,'dataSTRUCT');
  31. [x,lev,wname,nbcol] = deal(dataSTRUCT{:});
  32. dwtmode(modeDWT,'silent');
  33. [c,l] = wavedec(x,lev,wname);
  34. len = length(x);
  35. cfd = zeros(lev,len);
  36. for k = 1:lev
  37. d = detcoef(c,l,k);
  38. d = d(:)';
  39. d = d(ones(1,2^k),:);
  40. cfd(k,:) = wkeep1(d(:)',len);
  41. end
  42. cfd =  cfd(:);
  43. I = find(abs(cfd)<sqrt(eps));
  44. cfd(I) = zeros(size(I));
  45. cfd    = reshape(cfd,lev,len);
  46. imgCFS = wcodemat(cfd,nbcol);
  47. tics = 1:lev; labs = int2str([1:lev]');
  48. axes(axeHDL); image(imgCFS);
  49. set(axeHDL,'YTicklabelMode','manual','YTick',tics, ...
  50. 'YTicklabel',labs,'YDir','normal','Box','On');
  51. ylabel('level');
  52. title(strTIT);
  53. colormap(pink(nbcol));
  54.   case 'localPROC_2'
  55. [figHandle,modeDWT,axeHDL,strTIT] = deal(varargin{2:end});
  56. dataSTRUCT = wtbxappdata('get',figHandle,'dataSTRUCT');
  57. [X,lev,wname,nbcol] = deal(dataSTRUCT{:});
  58. dwtmode(modeDWT,'silent');
  59. [c,s] = wavedec2(X,lev,wname);
  60.     a = wrcoef2('a',c,s,wname,lev);
  61. imgCFS = wcodemat(a,nbcol);
  62. axes(axeHDL); image(imgCFS);
  63. set(axeHDL,'XTick',[],'YTick',[]);
  64. title(strTIT);
  65. end
  66. return
  67. end
  68. if nargout<1,
  69.   wshowdrv(mfilename)
  70. else
  71.   idx = 0;
  72.   %========== Slide 1 ==========
  73.   idx = idx+1;
  74.   slide(idx).code = {
  75.   'figHandle = gcf;',
  76.   'try',
  77.   '   wtbxappdata(''del'',figHandle,''local_AXES'');',
  78.   '   wtbxappdata(''del'',figHandle,''dataSTRUCT'');',
  79.   'end',
  80.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; ',   
  81.   '' };
  82.   slide(idx).text = {
  83.   '',
  84.   ' Press the "Start" button to see a demonstration on',
  85.   ' border distortions for Discrete Wavelet Transform (DWT).',
  86.   '',
  87.   ' This demo uses Wavelet Toolbox functions.',
  88.   ''};
  89.   
  90.   %========== Slide 2 ==========
  91.   idx = idx+1;
  92.   slide(idx).code = {
  93.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  94.   'if idxPREV<idxSlide',
  95.   '   wshowdrv(''#set_axes'',figHandle,[4,1]);'
  96.   '   h = wshowdrv(''#get_axes'',figHandle);',
  97.   '   load nearbrk; signal = nearbrk; clear nearbrk',
  98.   '   lev = 5; wname = ''db2''; nbcol = 128;',
  99.   '   dataSTRUCT = {signal,lev,wname,nbcol};',
  100.   '   colormap(pink(nbcol));',
  101.   '   axes(h(1)); plot(signal,''r'');',
  102.   '   title(''Original Signal : two near first derivative discontinuities'');',
  103.   '   wtbxappdata(''set'',figHandle,''local_AXES'',h);'
  104.   '   wtbxappdata(''set'',figHandle,''dataSTRUCT'',dataSTRUCT);'
  105.   'else ',
  106.   '   h = wtbxappdata(''get'',figHandle,''local_AXES'');'
  107.   'end',
  108.   'set(findobj(h(2:4)),''Visible'',''Off'');',
  109.   'set(findobj(h(1)),''Visible'',''On'');',
  110.   '' };
  111.   slide(idx).text = {
  112. ' % Load signal.',
  113. '        load nearbrk;',
  114. '        x = nearbrk;',
  115. ''};
  116.   %========== Slide 3 ==========
  117.   idx = idx+1;
  118.   slide(idx).code = {
  119. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  120. 'if idxPREV>idxSlide',
  121. '   set(findobj(h(2:4)),''Visible'',''Off'');',
  122. '   set(findobj(h(1)),''Visible'',''On'');',
  123. 'end',
  124. '' };
  125.   slide(idx).text = {
  126. ' % Set DWT signal extension mode to zero padding.',
  127. ' ',
  128. '        dwtmode(''zpd'')',
  129. ''};
  130.   slide(idx).info = 'dwtmode';
  131.   %========== Slide 4 ==========
  132.   idx = idx+1;
  133.   slide(idx).code = {
  134. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  135. 'if idxPREV<idxSlide',
  136. '   modeDWT = ''zpd'';',
  137. '   strTIT = ''Coefficients using zero padding'';',
  138. [   mfilename ,'(''localPROC_1'',figHandle,modeDWT,h(2),strTIT);'],
  139. 'end',
  140. 'set(findobj(h(3:4)),''Visible'',''Off'');',
  141. 'set(findobj(h(1:2)),''Visible'',''On'');',
  142. '' };
  143.   slide(idx).text = {
  144. ' % Perform decomposition at level 5',
  145. ' % for the signal using db2 and',
  146. ' % expand discrete wavelet coefficients for plot.',
  147. '        lev = 5;',
  148. '        [c,l] = wavedec(x,lev,''db2'');',
  149. ''};
  150.  
  151.   slide(idx).info = 'wavedec';
  152.   %========== Slide 5 ==========
  153.   idx = idx+1;
  154.   slide(idx).code = {
  155. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  156. 'if idxPREV<idxSlide',
  157. '   modeDWT = ''sym'';',
  158. '   strTIT = ''Coefficients using symmetrization padding'';',
  159. [   mfilename ,'(''localPROC_1'',figHandle,modeDWT,h(3),strTIT);'],
  160. 'end',
  161. 'set(findobj(h(4)),''Visible'',''Off'');',
  162. 'set(findobj(h(1:3)),''Visible'',''On'');',
  163. '' };
  164.   slide(idx).text = {
  165. ' % Set DWT signal extension mode to symmetrization.',
  166. '        dwtmode(''sym'')',
  167. ' % Perform the same two previous steps.',
  168. '        [c,l] = wavedec(x,lev,''db2'');',
  169. ''};
  170.  
  171.   slide(idx).info = 'wavedec';
  172.   %========== Slide 6 ==========
  173.   idx = idx+1;
  174.   slide(idx).code = {
  175. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  176. 'if idxPREV<idxSlide',
  177. '   modeDWT = ''spd'';',
  178. '   strTIT = ''Coefficients using smooth padding'';',
  179. [   mfilename ,'(''localPROC_1'',figHandle,modeDWT,h(4),strTIT);'],
  180. 'else'
  181. ' dataSTRUCT = wtbxappdata(''get'',figHandle,''dataSTRUCT'');',
  182. '   nbcol = dataSTRUCT{4};',
  183. '   colormap(pink(nbcol));'
  184. 'end',
  185. 'set(findobj(h(1:4)),''Visible'',''On'');',
  186. '' };
  187.   slide(idx).text = {
  188. ' % Set DWT signal extension mode to smooth padding.',
  189. '        dwtmode(''spd'')',
  190. ' % Perform the same two previous steps.',
  191. '        [c,l] = wavedec(x,lev,''db2'');',
  192. ''};
  193.  
  194.   slide(idx).info = 'wavedec';
  195.   %========== Slide 7 ==========
  196.   idx = idx+1;
  197.   slide(idx).code = {
  198. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  199. 'colormap(cool(2))',   
  200. '' };
  201.   slide(idx).text = {
  202. ' % Change colormap.',
  203. ' ',
  204. '        [colormap(cool(2))',
  205. ''};
  206.  
  207.   slide(idx).info = 'dwtmode';
  208.   %========== Slide 8 ==========
  209.   idx = idx+1;
  210.   slide(idx).code = {
  211.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  212.   'if idxPREV<idxSlide',
  213.   '   wshowdrv(''#set_axes'',figHandle,[2,2]);',
  214.   '   h = wshowdrv(''#get_axes'',figHandle);',
  215.   '   load geometry; [row,col] = size(X);',
  216.   '   lev = 3; wname = ''sym4''; nbcol = size(map,1);',
  217.   '   dataSTRUCT = {X,lev,wname,nbcol};',
  218.   '   colormap(pink(nbcol));',
  219.   '   axes(h(1)); image(wcodemat(X,nbcol));',
  220.   '   title(''Original image'');',
  221.   '   wtbxappdata(''set'',figHandle,''local_AXES'',h);'
  222.   '   wtbxappdata(''set'',figHandle,''dataSTRUCT'',dataSTRUCT);'
  223.   'else',
  224.   '   h = wtbxappdata(''get'',figHandle,''local_AXES'');'
  225.   'end',
  226.   'set(findobj(h(2:4)),''Visible'',''Off'');',
  227.   'set(findobj(h(1)),''Visible'',''On'');',
  228. '' };
  229.   slide(idx).text = {
  230. ' % Load artificial image.',
  231. '        load geometry;' ,
  232. ' % Set DWT signal extension mode to zero padding.',
  233. '        dwtmode(''zpd'')', 
  234. ''};
  235.  
  236.   slide(idx).info = 'dwtmode';
  237.   slide(idx).idxPrev = 1; 
  238.   %========== Slide 9 ==========
  239.   idx = idx+1;
  240.   slide(idx).code = {
  241. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  242. 'if idxPREV<idxSlide',
  243. '   modeDWT = ''zpd'';',
  244. '   strTIT = ''app. 3 using zero padding'';',
  245. [   mfilename ,'(''localPROC_2'',figHandle,modeDWT,h(2),strTIT);'],
  246. 'end',
  247. 'set(findobj(h(3:4)),''Visible'',''Off'');',
  248. 'set(findobj(h(1:2)),''Visible'',''On'');',
  249. '' };
  250.   slide(idx).text = {
  251. ' % Perform decomposition at level 3',
  252. ' % of X using sym4, and reconstruct',
  253. ' % approximation of level 3.',
  254. '        lev = 3; [c,s] = wavedec2(X,lev,''sym4'');',
  255. '        a = wrcoef2(''a'',c,s,''sym4'',lev);',
  256. ''};
  257.  
  258.   slide(idx).info = 'wavedec2';
  259.   %========== Slide 10 ==========
  260.   idx = idx+1;
  261.   slide(idx).code = {
  262. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  263. 'if idxPREV<idxSlide',
  264. '   modeDWT = ''sym'';',
  265. '   strTIT = ''app. 3 using symmetrization padding'';',
  266. [   mfilename ,'(''localPROC_2'',figHandle,modeDWT,h(3),strTIT);'],
  267. 'end',
  268. 'set(findobj(h(4)),''Visible'',''Off'');',
  269. 'set(findobj(h(1:3)),''Visible'',''On'');',
  270. '' };
  271.   slide(idx).text = {
  272. ' % Set DWT signal extension mode to symmetrization.',
  273. '        dwtmode(''sym'')',
  274. ' % Perform the same two previous steps.',
  275. '        [c,s] = wavedec2(X,lev,''sym4'');',
  276. '        a = wrcoef2(''a'',c,s,''sym4'',lev);',
  277. ''};
  278.  
  279.   slide(idx).info = 'wrcoef2';
  280.   %========== Slide 11 ==========
  281.   idx = idx+1;
  282.   slide(idx).code = {
  283. ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  284. 'if idxPREV<idxSlide',
  285. '   modeDWT = ''spd'';',
  286. '   strTIT = ''app. 3 using smooth padding'';',
  287. [   mfilename ,'(''localPROC_2'',figHandle,modeDWT,h(4),strTIT);'],
  288. 'end',
  289. 'set(findobj(h(1:4)),''Visible'',''On'');',
  290. '' };
  291.   slide(idx).text = {
  292. ' % Set DWT signal extension mode to smooth.',
  293. '        dwtmode(''spd'')',
  294. ' % Perform the same two previous steps.',
  295. '        [c,s] = wavedec2(X,lev,''sym4'');',
  296. '        a = wrcoef2(''a'',c,s,''sym4'',lev);',
  297. ''};
  298.  
  299.   slide(idx).info = 'wrcoef2';
  300.   varargout{1} = slide;
  301. end