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

波变换

开发平台:

Matlab

  1. function varargout = dcmdcomp(varargin)
  2. %DCMDCOMP Demonstrates compression tools in the Wavelet Toolbox.
  3. %
  4. % This is a slideshow file for use with wshowdrv.m
  5. % To see it run, type 'wshowdrv dcmdcomp',
  6. %
  7. % See also WAVEDEC2, WCODEMAT, WDENCMP.
  8. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  9. %   Last Revision: 01-Jun-2001.
  10. %   Copyright 1995-2002 The MathWorks, Inc.
  11. % $Revision: 1.14 $
  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,'Compression Procedure','COMP_PROCEDURE');
  21.         
  22.   case 'auto'    , wshowdrv('#autoMode',mfilename,'close');
  23.   case 'gr_auto' , wshowdrv('#gr_autoMode',mfilename,'close');
  24.   case 'getFigParam'
  25. figName  = 'Compression 1-D';
  26. showType = 'mix9';
  27. varargout = {figName,showType};
  28. end
  29. return
  30. end
  31. if nargout<1,
  32.   wshowdrv(mfilename)
  33. else
  34.   idx = 0;
  35.   %========== Slide 1 ==========
  36.   idx = idx+1;
  37.   slide(idx).code = {
  38.   'figHandle = gcf;',   
  39.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; h = [];',   
  40.   '' };
  41.   slide(idx).text = {
  42.   '',
  43.   ' Press the "Start" button to see a demonstration of',
  44.   ' compression tools in the Wavelet Toolbox.',
  45.   '',
  46.   ' This demo uses Wavelet Toolbox functions.',
  47.   ''};
  48.   %========== Slide 2 ==========
  49.   idx = idx+1;
  50.   slide(idx).code = {
  51.   'load leleccum; indx = 2600:3100;', 
  52.   'x = leleccum(indx);',
  53.   
  54.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; h = [];',
  55.   'h(1) = subplot(2,1,1);',
  56.   'plot(indx,x,''r''), title(''Original signal'');',
  57.   '' };
  58.   slide(idx).text = {
  59.   ' % Load electrical signal and select a part.',
  60.   ' ',
  61.   '        load leleccum; indx = 2600:3100;',
  62.   '        x = leleccum(indx);',
  63.   ''};
  64.   %========== Slide 3 ==========
  65.   idx = idx+1;
  66.   slide(idx).code = {
  67.   'thr = 35;',
  68.   '[xd,cxd,lxd,perf0,perfl2] = wdencmp(''gbl'',x,''db3'',3,thr,''h'',1);',
  69.   
  70.   'set(figHandle,''Name'',''Compression 1-D'');',
  71.   'ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; h = [];',
  72.   'h(1) = subplot(2,1,1);',
  73.   'plot(indx,x,''r''), title(''Original signal'');',
  74.   
  75.   'set(h(1),''Xtick'',[],''XtickLabel'',[]);',
  76.   'h(2) = subplot(2,1,2);',
  77.   'plot(indx,xd), title(''Compressed signal'')',
  78.   'N2Str = [''2-norm rec.: '',num2str(perfl2,''%5.2f''),'' %''];',
  79.   'N0Str = [''nul cfs: '',num2str(perf0,''%5.2f''),'' %''];',
  80.   'xlabel([N2Str,'' - '',N0Str])',
  81.   ''};
  82.   slide(idx).text = {
  83.   ' % Use wdencmp for signal compression.', 
  84.   ' ', 
  85.   '        % compress using a fixed threshold',
  86.   '        % and compute 2-norm recovery.', 
  87.   '        thr = 35;',
  88.   '        [xd,cxd,lxd,perf0,perfl2] = wdencmp(''gbl'',x,''db3'',3,thr,''h'',1);',
  89.   ''};
  90.   slide(idx).info = 'wdencmp';
  91.   %========== Slide 4 ==========
  92.   idx = idx+1;
  93.   slide(idx).code = {
  94.   'subr = 1; subc = 2;',
  95.   ['idxPREV = wshowdrv(''#get_idxSlide'',figHandle); idxSlide = ' int2str(idx) ';'],
  96.   'if idxPREV<idxSlide',
  97.   '   set(figHandle,''Name'',''Compression 2-D'');',
  98.   '   ax = findall(figHandle,''type'',''axes''); delete(ax); drawnow; h = [];',
  99.   '   load woman; x = X(100:200,100:200);',
  100.   '   nbc = size(map,1);',
  101.   '   h(1) = subplot(subr,subc,1);',
  102.   '   colormap(pink(nbc));',
  103.   '   image(wcodemat(x,nbc)); title(''Original image'');',
  104.   '   axis(''square'');',
  105.   '   set(h(1),''Xtick'',[],''Ytick'',[]);',
  106.   'else',
  107.   '   delete(subplot(subr,subc,2));',
  108.   'end',
  109.   '' };
  110.   slide(idx).text = {
  111.   ' % load original image.', 
  112.   ' ', 
  113.   '        load woman; x = X(100:200,100:200);',
  114.   ''};
  115.   %========== Slide 5 ==========
  116.   idx = idx+1;
  117.   slide(idx).code = {
  118.   'n = 5; w = ''sym2'';', 
  119.   '[c,l] = wavedec2(x,n,w);',
  120.   'thr = 20;',
  121.   '[xd,cxd,lxd,perf0,perfl2] = wdencmp(''gbl'',c,l,w,n,thr,''h'',1);',
  122.   
  123.   'h(2) = subplot(subr,subc,2);',
  124.   'image(wcodemat(xd,nbc));',
  125.   'title([''Compressed Image. Threshold = '',num2str(thr)])',
  126.   'N2Str = [''2-norm rec.: '',num2str(perfl2,''%5.2f''),'' %''];',
  127.   'N0Str = [''nul cfs: '',num2str(perf0,''%5.2f''),'' %''];',
  128.   'strxlab = strvcat(N2Str,N0Str);',
  129.   'xlabel(strxlab);',
  130.   'axis(''square'');',
  131.   'set(h(2),''Xtick'',[],''Ytick'',[]);',
  132.   '' };
  133.   slide(idx).text = {
  134.   ' % Use wdencmp for image compression.',
  135.   '     % wavelet decomposition of x.',
  136.   '         n = 5; w = ''sym2'';',
  137.   '         [c,l] = wavedec2(x,n,w);',
  138.   '     % wavelet coefficients thresholding',
  139.   '     % and computation of  2-norm recovery.',
  140.   '         thr = 20;',
  141.   '         [xd,cxd,lxd,perf0,perfl2] = wdencmp(''gbl'',c,l,w,n,thr,''h'',1);',
  142.   ''};
  143.   slide(idx).info = 'wdencmp';
  144.   %========== Slide 5 ==========
  145.   idx = idx+1;
  146.   slide(idx).code = {
  147.   'thr_h = [17 18];',        % horizontal thresholds.
  148.   'thr_d = [19 20];',        % diagonal thresholds.
  149.   'thr_v = [21 22];',        % vertical thresholds.
  150.   'thr = [thr_h ; thr_d ; thr_v];',        
  151.   '[xd,cxd,lxd,perf0,perfl2] = wdencmp(''lvd'',x,''sym8'',2,thr,''h'');',
  152.   'h(2) = subplot(subr,subc,2);',
  153.   'image(wcodemat(xd,nbc));',
  154.   'title([''Comp. Ima. Thr = [17 18;19 20;21 22]''])',
  155.   'N2Str = [''2-norm rec.: '',num2str(perfl2,''%5.2f''),'' %''];',
  156.   'N0Str = [''nul cfs: '',num2str(perf0,''%5.2f''),'' %''];',
  157.   'strxlab = strvcat(N2Str,N0Str);',
  158.   'xlabel(strxlab);',
  159.   'axis(''square'');',
  160.   'set(h(2),''Xtick'',[],''Ytick'',[]);',
  161.   '' };
  162.   slide(idx).text = {
  163.   ' % In addition the first option allows level and orientation',
  164.   ' % dependent thresholds. In this case the approximation is kept.',
  165.   ' % The level dependent thresholds in the three orientations', 
  166.   ' % horizontal, diagonal and vertical are as follow.',
  167.   '         thr_h = [17 18];        % horizontal thresholds.', 
  168.   '         thr_d = [19 20];        % diagonal thresholds.',
  169.   '         thr_v = [21 22];        % vertical thresholds.',
  170.   '         thr = [thr_h ; thr_d ; thr_v]', 
  171.   '         [xd,cxd,lxd,perf0,perfl2] = wdencmp(''lvd'',x,''sym8'',2,thr,''h'');',
  172.   ''};
  173.  
  174.   slide(idx).info = 'wdencmp';
  175.   varargout{1} = slide;
  176. end