function MW = plot_quincunx_wavelet(MW, Jmin, options)

% plot_wavelet - plot 2D wavelet transform stored using Mallat's ordering.
%
%   plot_wavelet(MW, Jmin, options);
%
%   'MW' is the wavelet transform.
%   'Jmin' is the minimum scale of the transform.
%
%   Copyright (c) 2003 Gabriel Peyr

n = size(MW,1);
Jmax = log2(n)-1;
J = (Jmax-Jmin+1)*2;

bnd = 1; % boundary value

options.null = 0;
gamma = getoptions(options, 'gamma', 1);

% select some sub-images
options.transform = 'quincunx';
m = 2*(Jmax-Jmin+1)+1;
nb = ceil(m/2);
k = 0;
% clf;
for j=Jmax:-1:Jmin
    qq = 1:2;
    if  j==Jmin
        qq(end+1) = 0;
    end
    for q=qq
        k = k+1;
        [selx,sely] = compute_quadrant_selection(j,q, options);
        MWj = MW(selx,sely);
        if q==0
            MWj = rescale(MWj);
        else
            MWj = MWj/max(abs(MWj(:)));
            % gamma boosting of contrast
            MWj = abs(MWj.^gamma).*sign(MWj);
            MWj = (MWj+1)/2;
        end
        
        MWj(1,:) = bnd; MWj(end,:) = bnd; MWj(:,1) = bnd; MWj(:,end) = bnd;
        MW(selx,sely) = MWj;
    end
end
colormap gray(256);

imageplot(MW);



return;

Q2 = showdecomposition(MW,J);
warning off;
Q2=uint8(Q2/max(abs(Q2(:)))*128+128);
warning on;
imshow(Q2,[]);
axis image; axis off;


%
% Show decomposition with each subband rescaled
%

function Q2 = showdecomposition(Q,J)

mmax=max(abs(Q(:)));

x2=size(Q,1);
y2=size(Q,2);

x1=1;
y1=y2/2+1;

Q2=zeros(size(Q));

for iter=1:J,
    tmp=Q(x1:x2,y1:y2);
    tmp=tmp/max(abs(tmp(:)))*mmax;
    Q2(x1:x2,y1:y2)=tmp;
    if mod(iter,2)==1,
        Q2(x1:x2,y1)=mmax;
        y2=y1-1;
        y1=1;
        x1=x2/2+1;
    else
        Q2(x1,y1:y2)=mmax;
        x2=x1-1;
        x1=1;
        y1=y2/2+1;
    end;
end;

y1=1;

if mod(iter,2)==1,
    x1=1;
end;

tmp=Q(x1:x2,y1:y2);
tmp=min(Q2(:))+tmp/max(abs(tmp(:)))*(max(Q2(:))-min(Q2(:)));
Q2(x1:x2,y1:y2)=tmp;