Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
115 lines (102 sloc) 3.61 KB
function x=d6boxstepi(f,level,dim,cofs)
% x=d6boxstepi(f,level,dim,cofs)
%
% Performs one INVERSE iteration (from a certain level) of D6 transform
% along a certain dimension; assuming scaling coefficients are in front,
% followed by wavelet coefficients. No periodicity but uses wavelets on
% the interval, i.e. filters are different at edges. This transform is an
% isometry.
% See Cohen, Daubechies and Vial, ACHA 1993.
%
% INPUT:
%
% f The three-dimensional array with wavelet and scaling functions
% level The level we are at now [scalar]
% dim The index identifying the dimension [scalar]
% cofs The wavelet and scaling filter coefficients
%
% OUTPUT:
%
% x The inverse wavelet transform of f
%
% SEE ALSO: D6BOXSTEP, D6BOX, D6BOXI, D6BOXCOF
%
% Inspired by Ignace Loris (igloris@vub.ac.be) on 22.06.2009
% Last modified by fjsimons-at-alum.mit.edu, 08/24/2010
% Figure out dimensions
nall=size(f);
if length(nall)==2
nall(3)=1;
end
% Initialize output, which you need to always take from the previous step
x=f;
if level==0
% Do nothing
return
end
% To move out of 'level' we expand two sets of k coefficients each into
% 2^(n-level+1) coefficients, where 2^n is the dimension of the data set
k=size(f,dim)/2^level;
% The LF-tap filter length
LF=length(cofs.H0);
% The edge filter length
LE=size(cofs.LLO,2);
% Treat the edges with special filters
% Isolate the indices of the left sets of planes
fleftlo=[f(dindeks( 1,dim,nall))'; ...
f(dindeks( 2,dim,nall))'; ...
f(dindeks( 3,dim,nall))'; ...
f(dindeks( 4,dim,nall))'; ...
f(dindeks( 5,dim,nall))'];
flefthi=[f(dindeks(k+1,dim,nall))'; ...
f(dindeks(k+2,dim,nall))'; ...
f(dindeks(k+3,dim,nall))'; ...
f(dindeks(k+4,dim,nall))'; ...
f(dindeks(k+5,dim,nall))'];
% And put the convolutions in the right spot
stuff=cofs.LFT'*[fleftlo ; flefthi];
for i=1:LE
x(dindeks(i,dim,nall))=stuff(i,:);
end
% Transform low pass coefficients from previous step
% Regular ones (i.e. excludes first LE and last LE)
% Exclude the same number on the left and right
% Compare with the forward transform but most of all work with what
% follows in leaving the right amount of spots untouched.
if k-4<5; error('Input signal is not long enough'); end
for i=5:k-4
% Isolate the sets of planes in the right dimension
% Interior, Lowpass (Scaling Coefficients)
fplaneslo=[f(dindeks( i+1,dim,nall))'; ...
f(dindeks( i+0,dim,nall))'; ...
f(dindeks( i-1,dim,nall))'];
% Interior, Highpass (Wavelet Coefficients)
fplaneshi=[f(dindeks(k+i+1,dim,nall))'; ...
f(dindeks(k+i+0,dim,nall))'; ...
f(dindeks(k+i-1,dim,nall))'];
% And put the convolutions in the SHIFTED UPSAMPLED spots
% See under SYNTHESIS, SN p. 129
% Watch the delay, which is different in D4BOXSTEPI
% These indices determine the ranges above!
x(dindeks(2*i-1,dim,nall))=...
cofs.F0([1 3 5])*fplaneslo+cofs.F1([1 3 5])*fplaneshi;
x(dindeks(2*i+0,dim,nall))=...
cofs.F0([2 4 6])*fplaneslo+cofs.F1([2 4 6])*fplaneshi;
end
% Isolate the indices of the right sets of planes
frightlo=[f(dindeks(k-4,dim,nall))'; ...
f(dindeks(k-3,dim,nall))'; ...
f(dindeks(k-2,dim,nall))'; ...
f(dindeks(k-1,dim,nall))'; ...
f(dindeks(k-0,dim,nall))'];
frighthi=[f(dindeks(2*k-4,dim,nall))'; ...
f(dindeks(2*k-3,dim,nall))'; ...
f(dindeks(2*k-2,dim,nall))'; ...
f(dindeks(2*k-1,dim,nall))'; ...
f(dindeks(2*k-0,dim,nall))'];
% And put the convolutions in the right spot
stuff=cofs.RGT'*[frightlo ; frighthi];
for i=1:LE
x(dindeks(2*k-(LE-i),dim,nall))=stuff(i,:);
end
% All other coefficients (wavelet coeff from previous step) remain
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.