www.pudn.com > nsct_toolbox.rar > nsctdec.m, change:2005-11-03,size:4662b

function y = nsctdec(x, levels, dfilt, pfilt ) % NSSCDEC Nonsubsampled Contourlet Transform Decomposition % % y = nsctdec(x, levels, [dfilt, pfilt] ) % % Input: % x: % a matrix, input image % levels: % vector of numbers of directional filter bank decomposition levels % at each pyramidal level (from coarse to fine scale). % If the number of level is 0, a critically sampled 2-D wavelet % decomposition step is performed. % The support for the wavelet decomposition has not been verified!!!!!! % dfilt: % a string, filter name for the directional decomposition step. % It is optional with default value 'dmaxflat7'. See dfilters.m for all % available filters. % pfilt: % a string, filter name for the pyramidal decomposition step. % It is optional with default value 'maxflat'. See atrousfilters.m for % all available filters. % % Output: % y: a cell vector of length length(nlevs) + 1, where except y{1} is % the lowpass subband, each cell corresponds to one pyramidal % level and is a cell vector that contains bandpass directional % subbands from the DFB at that level. % % Index convention: % Suppose that nlevs = [l_J,...,l_2, l_1], and l_j >= 2. % Then for j = 1,...,J and k = 1,...,2^l_j % y{J+2-j}{k}(n_1, n_2) % is a contourlet coefficient at scale 2^j, direction k, and position % (n_1 * 2^(j+l_j-2), n_2 * 2^j) for k <= 2^(l_j-1), % (n_1 * 2^j, n_2 * 2^(j+l_j-2)) for k > 2^(l_j-1). % As k increases from 1 to 2^l_j, direction k rotates clockwise from % the angle 135 degree with uniform increment in cotan, from -1 to 1 for % k <= 2^(l_j-1), and then uniform decrement in tan, from 1 to -1 for % k > 2^(l_j-1). % % See also: ATROUSFILTERS, DFILTERS, NSCTREC, NSFBDEC, NSDFBDEC. % History: % 02/17/04 Created by Jianping Zhou. % 08/07/04 Modified by Jianping Zhou. Incorporte the fast implementation % of convolution algorithm by Jason Laska. % 08/30/04 Modified by Arthur. L. Cunha, added more pyramid filters. % 10/17/04 Modified by Arthur. L. Cunha, replaced periodic with symmetric extension % 01/24/05 Modified by Jianping Zhou, changed function names and corrected a bug. % 10/31/05 Modified by Arthur L Cunha, corrected a bug in the pyramid decomposition (a wrong index) % Check input if ~isnumeric( levels ) error('The decomposition levels shall be integers'); end if isnumeric( levels ) if round( levels ) ~= levels error('The decomposition levels shall be integers'); end end if ~exist('dfilt', 'var') dfilt = 'dmaxflat7' ; end; if ~exist('pfilt', 'var') pfilt = 'maxflat' ; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Get fan filters, parallelogram filters, and pyramid filters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Get the directional filters for the critically sampled DFB. filters = cell(4) ; [h1, h2] = dfilters(dfilt, 'd'); % A scale is required for the nonsubsampled case. h1 = h1./sqrt(2) ; h2 = h2./sqrt(2) ; % Generate the first-level fan filters by modulations. filters{1} = modulate2(h1, 'c'); filters{2} = modulate2(h2, 'c'); % Obtain the parallelogram filters from the diamond filters [filters{3}, filters{4}] = parafilters( h1, h2 ) ; [h1, h2, g1, g2] = atrousfilters(pfilt); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Nonsubsampled Contourlet transform with tree structure filter banks % Nonsubsampled pyramids make multiresolution decomposition. % Nonsubsampled directional filter banks make directional decomposition. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Numer of levels: clevels = length( levels ) ; nIndex = clevels + 1 ; % Initialize the output y = cell(1, nIndex) ; % Nonsubsampled pyramid decomposition for i= 1 : clevels % Nonsubsampled Contourlet transform % Nonsubsampled pyramids decomposition [xlo, xhi] = nsfbdec(x, h1, h2, i-1) ; if levels(nIndex-1) > 0 % Nonsubsampled DFB decomposition on the bandpass image xhi_dir = nsdfbdec(xhi, filters, levels(nIndex-1)); y{nIndex}=xhi_dir ; else % Copy the result directly: y{nIndex}=xhi ; end % Update the index for the Nonsubsampled Pyramdis nIndex = nIndex - 1 ; % Prepare for next iteration x = xlo ; end % The lowpass output y{1}=x;