gusucode.com > Matlab实现的隐马尔科夫树模型源码程序 > contourletHMT/tree2contourlet.m
% tree2contourlet.m % written by: Duncan Po % Date: August 24, 2002 % convert the contourlet coefficients from tree structure to subband structure % Usage: coef = tree2contourlet(tree, dir, levndir, nrow, ncol) % Inputs: tree - contourlet coefficients in tree structure % dir - the directional coefficients to be processed % levndir - the number of subbands in each level % nrow - the number of rows in the root subband % ncol - the number of columns in the root subband % Output: coef - contourlet coefficients in subband structure function coef = tree2contourlet(tree, dir, levndir, nrow, ncol) nlevel = length(tree); M = 2.^levndir(1); for r = 1:(length(levndir)-1) if levndir(r+1)==levndir(r) split(r) = 0; elseif levndir(r+1)-levndir(r)==1 split(r) = 1; else return; end; end; denoiseddata{1} = reshape(tree{1}, nrow, ncol); nrow = nrow*2; ncol = ncol*2; for lev = 2:nlevel denoiseddata{lev} = []; for temp = 1:2*nrow:length(tree{lev}) buffer = reshape(tree{lev}(temp:temp+2*nrow-1), 2, nrow); buffer = buffer.'; denoiseddata{lev} = [denoiseddata{lev} buffer]; end; nrow = nrow*2; ncol = ncol*2; end; clear buffer; for lev = 1:nlevel nump = levndir(lev)-levndir(1); %number of times need to be processed buffer{1} = denoiseddata{lev}; for yy = 1:(nump-1) for zz = 2^yy:-2:2 [buffer{zz-1},buffer{zz}] = type4detransform(buffer{zz/2}); end; end; if nump ~= 0 if (lev~=1) & (split(lev-1)==1) for zz = 2^nump:-2:2 [buffer{zz-1},buffer{zz}] = type3detransform(buffer{zz/2}); end; else for zz = 2^nump:-2:2 [buffer{zz-1},buffer{zz}] = type4detransform(buffer{zz/2}); end; end; end; for zz = 1:2^(levndir(lev)-levndir(1)) coef{lev}{zz}= buffer{zz}; end; if (dir>M/2) %& (lev>2) for yy = 1:2^(levndir(lev)-levndir(1)) coef{lev}{yy} = coef{lev}{yy}.'; end; end; clear buffer; end;