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

波变换

开发平台:

Matlab

  1. function varargout = dcmdwpck(varargin)
  2. %DCMDWPCK Demonstrates wavelet packet tools in the Wavelet Toolbox. 
  3. %
  4. % This is a slideshow file for use with wshowdrv.m
  5. % To see it run, type 'wshowdrv dcmdwpck', 
  6. %
  7. % See also DDENCMP, WCODEMAT, WDEN, WDENCMP, WNOISE, WPDENCMP.
  8. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  9. %   Last Revision: 14-May-2003.
  10. %   Copyright 1995-2004 The MathWorks, Inc.
  11. % $Revision: 1.14.4.2 $
  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,'Wavelet Packets','WP_PACKETS');
  21. wfighelp('addHelpItem',hdlFig,'Compression Procedure','COMP_PROCEDURE');
  22.         wfighelp('addHelpItem',hdlFig,'De-noising Procedure','DENO_PROCEDURE');
  23.         
  24.       case 'auto'    , wshowdrv('#autoMode',mfilename,'close');
  25.   case 'gr_auto' , wshowdrv('#gr_autoMode',mfilename,'close');
  26.   case 'getFigParam'
  27. figName  = 'Wavelet packets demo';
  28. showType = 'mix7';
  29. varargout = {figName,showType};
  30. end
  31. return
  32. end
  33. if nargout<1,
  34.   wshowdrv(mfilename)
  35. else
  36.   idx = 0;
  37.   %========== Slide 1 ==========
  38.   idx = idx+1;
  39.   slide(idx).code = {
  40.   'figHandle = gcf;';
  41.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; ',   
  42.   '' };
  43.   slide(idx).text = {
  44.   '',
  45.   ' Press the "Start" button to see a demonstration of',
  46.   ' wavelet packet tools in the Wavelet Toolbox.',
  47.   '',
  48.   ' This demo uses Wavelet Toolbox functions.',
  49.   ''};
  50.   %========== Slide 2 ==========
  51.   idx = idx+1;
  52.   slide(idx).code = {
  53.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; ',   
  54.   ''};
  55.   slide(idx).text = {
  56.   ' % For wavelet packets analysis demos',
  57.   ' % see the GUI mode demos.',
  58.   ' % Let us give some examples of de-noising and compression',
  59.   ' % using wavelet packets.',
  60.   ''};
  61.   %========== Slide 3 ==========
  62.   idx = idx+1;
  63.   slide(idx).code = {
  64.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  65.   'if (idxPREV<idxSlide) | (idxPREV>idxSlide+1)',
  66.   '   init = 2055615866; randn(''seed'',init);', 
  67.   '   [xref,x] = wnoise(5,11,7,init);',
  68.   '   wshowdrv(''#set_axes'',figHandle,[4,1]);'
  69.   '   h = wshowdrv(''#get_axes'',figHandle);',
  70.   '   set(h(1),''Visible'',''on'');',    
  71.   '   axes(h(1)); plot(xref,''r''); title(''Original signal'')',
  72.   '   axis([1 length(xref) min(xref)-eps max(xref)+eps]);',
  73.   '   set(h(2),''Visible'',''on'');',
  74.   '   axes(h(2)); plot(x,''g''), title(''Noisy Signal'')',
  75.   '   axis([1 length(x) min(x)-eps max(x)+eps]);',
  76.   '   p3 = get(h(3),''Position''); p4 = get(h(4),''Position'');',
  77.   '   p5 = [p4(1:3), p3(2)+p3(4)-p4(2)];',
  78.   '   try , delete(h(5)); end',
  79.   '   h(5) = axes(''Position'',p5,''Visible'',''Off'');',
  80.   '   wtbxappdata(''set'',figHandle,''local_AXES'',h);'
  81.   'else'
  82.   '   h = wtbxappdata(''get'',figHandle,''local_AXES'');'
  83.   '   set(findobj(h(3)),''Visible'',''off'');',
  84.   'end'
  85.   ''};
  86.   slide(idx).text = {
  87.   '% Generate heavy sine and a noisy version of it.',
  88.   ' ',
  89.   '        init = 2055615866; randn(''seed'',init);',
  90.   '        [xref,x] = wnoise(5,11,7,init);', 
  91.   ''};
  92.   slide(idx).info = 'wnoise';
  93.   %========== Slide 4 ==========
  94.   idx = idx+1;
  95.   slide(idx).code = {
  96.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'], 
  97.   'if idxPREV<idxSlide',
  98.   '   xwpd = wtbxappdata(''get'',h(3),''xwpd'');',
  99.   '   if isempty(xwpd)',
  100.   '      n = length(x); thr = sqrt(2*log(n*log(n)/log(2)));'
  101.   '      xwpd = wpdencmp(x,''s'',4,''sym4'',''sure'',thr,1);',
  102.   '      wtbxappdata(''set'',h(3),''xwpd'',xwpd);',
  103.   '   end',
  104.   '   set(h(3),''Visible'',''on'');',
  105.   '   axes(h(3)); plot(xwpd); title(''Denoised Signal using Wavelet Packets'')',
  106.   '   axis([1 length(xwpd) min(xwpd)-eps max(xwpd)+eps]);',
  107.   'else'
  108.   '   set(findobj(h(4)),''Visible'',''off'');',
  109.   'end'
  110.   ''};
  111.   slide(idx).text = {
  112.   ' % Use wpdencmp for signal de-noising.',
  113.   ' ',
  114.   '        n = length(x);',
  115.   '        thr = sqrt(2*log(n*log(n)/log(2)));',
  116.   '        xwpd = wpdencmp(x,''s'',4,''sym4'',''sure'',thr,1);',
  117.   ''};
  118.   slide(idx).info = 'wpdencmp';
  119.   %========== Slide 5 ==========
  120.   idx = idx+1;
  121.   slide(idx).code = {
  122.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  123.   'if idxPREV<idxSlide',
  124.   '   xwd = wtbxappdata(''get'',h(4),''xwd'');',
  125.   '   if isempty(xwd)',
  126.   '      xwd = wden(x,''rigrsure'',''s'',''one'',4,''sym4'');',
  127.   '      wtbxappdata(''set'',h(4),''xwd'',xwd);',
  128.   '   end',
  129.   '   set(h(4),''Visible'',''on'');',
  130.   '   axes(h(4)); plot(xwd); title(''Denoised Signal using Wavelets'')',
  131.   '   axis([1 length(xwd) min(xwd)-eps max(xwd)+eps]);',
  132.   'else',
  133.   '   set(findobj(h(5)),''Visible'',''Off'');',
  134.   '   set(findobj(h(3:4)),''Visible'',''On'');',
  135.   '   xlim = get(h(3),''Xlim'');',
  136.   '   set(h([1,2,5]),''Xlim'',xlim);',
  137.   'end',
  138.   ''};
  139.   slide(idx).text = {
  140.   ' % Compare with wavelets based denoising result.',
  141.   ' ',
  142.   '        xwd = wden(x,''rigrsure'',''s'',''one'',4,''sym4'');',
  143.   ''};
  144.   slide(idx).info = 'wden';
  145.   %========== Slide 6 ==========
  146.   idx = idx+1;
  147.   slide(idx).code = {
  148.   'xwpd = wtbxappdata(''get'',h(3),''xwpd'');',
  149.   'xwd  = wtbxappdata(''get'',h(4),''xwd'');',
  150.   'set(findobj(h(3:4)),''Visible'',''Off'')',
  151.   'set(h(1:2),''Xticklabel'',[]);',
  152.   'set(h(5),''Visible'',''on'');',
  153.   'ind = 1:800;',
  154.   'axes(h(5)); plot(ind,xwd(ind),''y'',ind,xwpd(ind),''m'')',
  155.   'title(''Denoised Signals : Wavelet Packets (m) , Wavelets (y)'')',
  156.   'set(h([1,2,5]),''Xlim'',[1 800]);',
  157.   ''};
  158.   slide(idx).text = {
  159.   ' % Zoom on the initial part of the signal,' ,
  160.   ' % the noisy signal and the two denoised signals.',
  161.   ''};
  162.   %========== Slide 7 ==========
  163.   idx = idx+1;
  164.   slide(idx).code = {
  165.   'load detfingr',
  166.   '[r,c] = size(X);  X = X(1:2:r,1:2:c);', 
  167.   'sm = size(map,1); colormap(pink(sm))',
  168.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  169.   'if (idxPREV<idxSlide) | (idxPREV>idxSlide+1)',
  170.   '   ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; ',
  171.   '   tmp = subplot(1,2,1); image(wcodemat(X,sm)), title(''Original Image'')',
  172.   '   axis(''square'');',
  173.   '   set(tmp,''Xtick'',[],''Ytick'',[]);',
  174.   'else',
  175.   '   set(findobj(subplot(1,2,2)),''Visible'',''Off'')',
  176.   'end'
  177.   ''};
  178.   slide(idx).text = {
  179.   ' load detfingr ',
  180.   ' % X contains the loaded image.',
  181.   ' ',
  182.   '  [r,c] = size(X);', 
  183.   '  X = X(1:2:r,1:2:c);    % To reduce the size of X.',
  184.   ''};
  185.   slide(idx).idxPrev = 3;
  186.   %========== Slide 8 ==========
  187.   idx = idx+1;
  188.   slide(idx).code = {
  189.   'set(findobj(subplot(1,2,2)),''Visible'',''Off'')',
  190.   ''};
  191.   slide(idx).text = {
  192.   ' % Use wpdencmp for image compression.',
  193.   '        sorh = ''h''; lev = 3;',
  194.   '        crit = ''shannon'';',
  195.   '        thr = 30;',
  196.   '        keepapp = 1;',
  197.   '        [xd,t,perf0,perfl2] = ... ',
  198.   '                wpdencmp(X,sorh,lev,''bior6.8'',crit,thr,keepapp);',
  199.   ''};
  200.   slide(idx).info = 'wpdencmp';
  201.   %========== Slide 9 ==========
  202.   idx = idx+1;
  203.   slide(idx).code = {
  204.   'ax = subplot(1,2,1);',
  205.   'denFLAG_1 = wtbxappdata(''get'',ax,''denFLAG_1'');',
  206.   'if isempty(denFLAG_1)',
  207.   '   lev = 3; sorh = ''h''; crit = ''shannon''; thr = 30; keepapp = 1;',
  208.   '   [xd,t,perf0,perfl2] = wpdencmp(X,sorh,lev,''bior6.8'',crit,thr,keepapp);',
  209.   '   tmp = subplot(1,2,2); image(wcodemat(xd,sm)), title(''Compressed Image'')',
  210.   '   N2Str = [''norm cfs. rec.: '',num2str(perfl2,''%5.2f''),'' %''];',
  211.   '   N0Str = [''nul cfs: '',num2str(perf0,''%5.2f''),'' %''];',
  212.   '   strxlab = strvcat(N2Str,N0Str); xlabel(strxlab);',
  213.   '   axis(''square'');',
  214.   '   set(tmp,''Xtick'',[],''Ytick'',[]);',
  215.   '   wtbxappdata(''set'',ax,''denFLAG_1'',1);',
  216.   'else',
  217.   '  set(findobj(subplot(1,2,2)),''Visible'',''On'')',
  218.   'end'
  219.   ''};
  220.   slide(idx).text = slide(idx-1).text;
  221.   slide(idx).info = 'wpdencmp';
  222.   %========== Slide 10 ==========
  223.   idx = idx+1;
  224.   slide(idx).code = {
  225.   'load  sinsin;  X = X(1:64,1:64);',
  226.   'sm = size(map,1); colormap(pink(sm))',
  227.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  228.   'if idxPREV<idxSlide',
  229.   '   ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; ',   
  230.   '   tmp = subplot(2,2,1); image(wcodemat(X,sm)), title(''Original Image'')',
  231.   '   set(tmp,''Xtick'',[],''Ytick'',[]);',
  232.   'else'
  233.   '   set(findobj(subplot(2,2,2)),''Visible'',''Off'')',
  234.   'end'
  235.   ''};
  236.   slide(idx).text = {
  237.   ' % Load original image.',
  238.   ' ',
  239.   '        load  sinsin',
  240.   '        % X contains the loaded image.',
  241.   ' ',
  242.   '        X = X(1:64,1:64); ',
  243.   ''};
  244.   slide(idx).idxPrev = 7;
  245.   %========== Slide 11 ==========
  246.   idx = idx+1;
  247.   slide(idx).code = {
  248.   'init = 2055615866; randn(''seed'',init);',
  249.   'x = X+15*randn(size(X));',
  250.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  251.   'if idxPREV<idxSlide',
  252.   '   tmp = subplot(2,2,2); image(wcodemat(x,sm)), title(''Noisy Image'')',
  253.   '   set(tmp,''Xtick'',[],''Ytick'',[]);',
  254.   'else'
  255.   '   set(findobj(subplot(2,2,3)),''Visible'',''Off'')',
  256.   'end'
  257.   ''};
  258.   
  259.   slide(idx).text = {
  260.   ' % Compute and plot the Noisy Image.',
  261.   ' ',
  262.   '        init = 2055615866; randn(''seed'',init);',
  263.   '        x = X+15*randn(size(X));',
  264.   ''};
  265.   
  266.   %========== Slide 12 ==========
  267.   idx = idx+1;
  268.   slide(idx).code = {
  269.   'ax = subplot(2,2,1);',
  270.   'denFLAG_2 = wtbxappdata(''get'',ax,''denFLAG_2'');',
  271.   'if isempty(denFLAG_2)',
  272.   '   [thr,sorh,keepapp,crit] = ddencmp(''den'',''wp'',x);',
  273.   '   n  = length(x(:)); thr = sqrt(2*log(n*log(n)/log(2)))*15;',
  274.   '   xd = wpdencmp(x,sorh,3,''sym4'',crit,thr,keepapp);',
  275.   '   tmp = subplot(2,2,3); image(wcodemat(xd,sm)), title(''Denoised Image'')',
  276.   '   set(tmp,''Xtick'',[],''Ytick'',[]);',
  277.   '   wtbxappdata(''set'',ax,''denFLAG_2'',1);',
  278.   'else',
  279.   '   set(findobj(subplot(2,2,3)),''Visible'',''On'')',
  280.   'end'
  281.   ''};
  282.   
  283.   slide(idx).text = {
  284.   ' % Compute and plot the Denoised Image.',
  285.   ' ',
  286.   ''};
  287.   slide(idx).info = 'wpdencmp';
  288.   varargout{1} = slide;
  289. end