www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/@wdectree/wdectree.m

    function t = wdectree(x,dimData,depth,varargin)
%WDECTREE Constructor for the class WDECTREE.
%   T = WDECTREE(X,DIMDATA,DEPTH,WNAME) returns a wavelet tree T.
%   If X is a vector, the tree is of order 2.
%   When X represents an indexed image, X is an m-by-n matrix.
%   When X represents a truecolor image,X is an m-by-n-by-3 array.
%   In both cases, the tree is of order 4.
%
%   The DWT extension mode is the current one.
%
%   T = WDECTREE(X,DIMDATA,DEPTH,WNAME,DWTMODE) returns a wavelet tree T
%   built using DWTMODE as DWT extension mode.
%
%   With T = WDECTREE(X,DIMDATA,DEPTH,WNAME,DWTMODE,USERDATA)
%   you may set a userdata field.
%
%   T is a WDECTREE object corresponding to a
%   wavelet decomposition of the matrix (image) X,
%   at level DEPTH with a particular wavelet WNAME.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi  12-Feb-2003.
%   Last Revision: 01-May-2009.
%   Copyright 1995-2015 The MathWorks, Inc.

%===============================================
% Class WDECTREE (parent class: DTREE)
% Fields:
%   dtree - Parent object
%   dimData - Dimension of data.
%   WT_Settings - Structure
%     typeWT  : - type of Wavelet Transform.
%     wname   : Wavelet Name.
%     extMode : DWT extension mode.
%     shift   : DWT shift value.
%     Filters : Structure of filters
%        Lo_D : Low Decomposition filter
%        Hi_D : High Decomposition filter
%        Lo_R : Low Reconstruction filter
%        Hi_R : High Reconstruction filter
%===============================================

% Check arguments.
%-----------------
nargoutchk(0,1);
userdata = {};
WT_Settings = struct(...
    'typeWT','dwt','wname','db1',...
    'extMode','sym','shift',0);

switch nargin
    case 0  % Dummy. Only for loading object!
        x = 0; dimData = 2 ; depth = 0;
        
    case 3  % Use the default Wavelet Transform Settings
        
    otherwise
        narginchk(4,11);
        if isstruct(varargin{1})
            narginchk(4,5);
            WT_Settings = varargin{1};
            if nargin==5 , userdata = varargin{2}; end
        else
            nbVarIN = length(varargin);
            for k=1:2:nbVarIN
                typeArg = lower(varargin{k});
                switch typeArg
                    case 'typewt' ,  WT_Settings.typeWT  = varargin{k+1};
                    case 'wname'  ,  WT_Settings.wname   = varargin{k+1};
                    case 'extmode' , WT_Settings.extMode = varargin{k+1};
                    case 'shift'  ,  WT_Settings.shift   = varargin{k+1};
                end
            end
        end
end

% Tree creation.
%---------------
switch dimData
    case 1
        order = 2;
        typData = '1d';
    case 2
        order = 4;
        if length(size(x))<3 , typData = '2d'; else typData = '2d3';  end
        tmp = WT_Settings.shift;
        if length(tmp)==1 , WT_Settings.shift = [tmp tmp]; end
end
switch WT_Settings.typeWT
    case {'dwt','lwt'}  , spsch = [1 ; zeros(order-1,1)];
    case {'wpt','lwpt'} , spsch = ones(order,1);        
end
d = dtree(order,depth,x,'spsch',spsch,'spflg',0,'ud',userdata);

% Compute Filters.
%-----------------
switch WT_Settings.typeWT
    case {'dwt','wpt'}
        [Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(WT_Settings.wname);
        WT_Settings.Filters = ...
            struct('Lo_D',Lo_D,'Hi_D',Hi_D,'Lo_R',Lo_R,'Hi_R',Hi_R);
        
    case {'lwt','lwpt'}
        WT_Settings.LS = liftwave(WT_Settings.wname);
end
t.typData = typData;
t.dimData = dimData;
t.WT_Settings = WT_Settings;

% Built object.
%---------------
t = class(t,'wdectree',d);
t = expand(t);