www.pudn.com > 666bandelets_toolbox.zip > perform_wavelet_bandelet_transform.m
function [MB,m_geom] = perform_wavelet_bandelet_transform(M,Jmin,QT,Theta,dir, options)
% perform_wavelet_bandelet_transform - perform the wavelet-bandelet transform
%
% [MB,m_geom] = perform_wavelet_bandelet_transform(M,Jmin,QT,Theta,dir);
%
% Copyright (c) 2005 Gabriel Peyré
options.null = 1;
if nargin<2
Jmin = 4;
end
if isfield(options, 'use_single_qt')
use_single_qt = options.use_single_qt;
else
use_single_qt = 0;
end
if size(QT,3)>1 || size(Theta,3)>1
warning('Quadtree seems to have been computed using multiple thresholds.');
end
MB = M;
if dir==1
% perform the wavelet transform
MB = perform_wavelet_transform(M,Jmin, 1);
end
n = size(M,1); Jmax = log2(n)-1;
m_geom = 0;
% compute the transform for each scale and each direction
for j=Jmax:-1:Jmin % for each scale
for q=1:3 % for each orientation
if q==1 % 1st quadrant
selx = 1:2^j; sely = (2^j+1):2^(j+1);
elseif q==2
selx = (2^j+1):2^(j+1); sely = 1:2^j;
else
selx = (2^j+1):2^(j+1); sely = (2^j+1):2^(j+1);
end
[MB(selx,sely),m] = perform_bandelet_transform(MB(selx,sely),QT(selx,sely),Theta(selx,sely),dir);
if use_single_qt
m = m/3;
end
m_geom = m_geom + m;
end
end
if dir==-1
% perform the inverse wavelet transform
MB = perform_wavelet_transform(MB,Jmin, -1);
end