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

波变换

开发平台:

Matlab

  1. function y = wkeep2(x,siz,varargin)
  2. %WKEEP2  Keep part of a matrix.
  3. %   Y = WKEEP2(X,S) extracts the central part of the matrix X. 
  4. %   S is the size of Y.
  5. %   Y = WKEEP2(X,S,[FIRSTR,FIRSTC]) extracts the submatrix of 
  6. %   matrix X, of size S and starting from X(FIRSTR,FIRSTC).
  7. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 07-May-2003.
  8. %   Last Revision: 22-May-2003.
  9. %   Copyright 1995-2004 The MathWorks, Inc.
  10. % $Revision: 1.1.6.2 $
  11. % Check arguments.
  12. nbIn = nargin;
  13. if nbIn < 2
  14.   error('Not enough input arguments.');
  15. elseif nbIn > 4
  16.   error('Too many input arguments.');
  17. end
  18. if (siz ~= fix(siz))
  19.     error('Arg2: invalid argument value.');
  20. end
  21. y = x;
  22. sx = size(x);
  23. siz = siz(:)';
  24. siz(siz>sx) = sx(siz>sx);
  25. ok = isempty(find(siz < 0));
  26. if ~ok , return; end
  27. if nbIn<3, OPT = 'c'; else , OPT = lower(varargin{1}); end
  28. if ischar(OPT(1))
  29.     switch OPT(1)
  30.         case 'c'
  31.             if nbIn<4
  32.                 if length(OPT)>1 , side = OPT(2:end); else , side = 'l'; end
  33.             else
  34.                 side = varargin{2};
  35.             end
  36.             if length(side)<2 , side(2) = 'l'; end
  37.             
  38.             d = (sx-siz)/2;
  39.             for k = 1:2
  40.                 switch side(k)
  41.                     case {'u','l','0',0} , 
  42.                         first(k) = 1+floor(d(k)); last(k) = sx(k)-ceil(d(k));
  43.                     case {'d','r','1',1} , 
  44.                         first(k) = 1+ceil(d(k));  last(k) = sx(k)-floor(d(k));
  45.                 end
  46.             end
  47.         case {'l','u'} , first = [1 1]; last = siz;
  48.         case {'r','d'} , first = sx-siz+1; last = sx;
  49.     end
  50. else
  51.     first = OPT; last = first+siz-1;
  52.     if ~isequal(first,fix(first)) || any(first<1) || any(last>sx)
  53.         error('Invalid argument value.');
  54.     end
  55. end
  56. y = y(first(1):last(1),first(2):last(2));