www.pudn.com > SPIHT_bandelet.rar > compute_wavelet_quadtree.asv


function [QT,Theta] = compute_wavelet_quadtree(M,Jmin,T,j_min,j_max,s, options) 
 
% compute_wavelet_quadtree - compute the wavelet-bandelet quadtree 
% 
%   [QT,Theta] = compute_wavelet_quadtree(M,Jmin,T,j_min,j_max,s); 
% 
%   Copyright (c) 2005 Gabriel Peyr? 
 
options.null = 1; 
if nargin<2 
    Jmin = 4; 
end 
if nargin<6 
    s = Inf; 
end 
if nargin<5 
    j_max = min(5, log2(size(M,1))); 
end 
if nargin<4 
    j_min = 2; 
end 
 
if isfield(options, 'use_single_qt') 
    use_single_qt = options.use_single_qt; 
else 
    use_single_qt = 0; 
end 
 
nT = length(T); 
 
% perform the wavelet transform 
MW = perform_wavelet_transform(M,Jmin, 1); 
 
n = size(M,1); Jmax = log2(n)-1; 
QT = zeros(n,n,nT); 
Theta = zeros(n,n,nT); 
 
% compute the transform for each scale and each direction 
for j=Jmax:-1:Jmin  % for each scale 
    j_max = min(j_max, j); 
    if use_single_qt 
        MWc = zeros(2^j, 2^j, 3);%这里的3表示三个子带的存储数据 
    end 
    for q=1:3   % for each orientation 
        [selx,sely] = compute_quadrant_selection(j,q); 
        disp(['--> computing quadtree at scale ' num2str(j) ' orientation ' num2str(q) '.']); 
        if ~use_single_qt 
            [QT(selx,sely,:),Theta(selx,sely,:)] = compute_quadtree(MW(selx,sely),T,j_min,j_max,s); 
        else 
            MWc(:,:,q) = MW(selx,sely);%选择其中的一个子带 
        end 
    end 
    if use_single_qt 
        [QTc,Thetac] = compute_quadtree(MWc,T,j_min,j_max,s);% 对于其中的一个子带来计算四叉树分解 
        for q=1:3   % for each orientation 
            [selx,sely] = compute_quadrant_selection(j,q); 
            QT(selx,sely,:) = QTc; 
            Theta(selx,sely,:) = Thetac; 
        end 
    end 
end