]> AND Private Git Repository - these_gilles.git/blob - THESE/codes/wave/allcode/dualtree3D.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
v1.2 19 décembre
[these_gilles.git] / THESE / codes / wave / allcode / dualtree3D.m
1 function w = dualtree3D(x, J, Faf, af)
2
3 % 3D Dual-Tree Discrete Wavelet Transform
4 %
5 % USAGE:
6 %   w = dualtree3D(x, J, Faf, af)
7 % INPUT:
8 %   x - 3-D array
9 %   J - number of stages
10 %   Faf - first stage filters
11 %   af - filters for remaining stages
12 % OUPUT:
13 %   w{j}{i}{d} - wavelet coefficients
14 %        j = 1..J, i = 1..4, d = 1..7
15 %   w{J+1}{i} - lowpass coefficients
16 %        i = 1..4
17 % EXAMPLE:
18 %   x = rand(64,64,64);
19 %   J = 3;
20 %   [Faf, Fsf] = FSfarras;
21 %   [af, sf] = dualfilt1;
22 %   w = dualtree3D(x, J, Faf, af);
23 %   y = idualtree3D(w, J, Fsf, sf);
24 %   err = x - y;
25 %   max(max(max(abs(err))))
26 %
27 % WAVELET SOFTWARE AT POLYTECHNIC UNIVERSITY, BROOKLYN, NY
28 % http://taco.poly.edu/WaveletSoftware/
29
30
31 % normalization
32 x = x/2;
33
34 M = [
35     1 1 1
36     2 2 1
37     2 1 2
38     1 2 2
39 ];
40
41 for i = 1:4
42     f1 = M(i,1);
43     f2 = M(i,2);
44     f3 = M(i,3);
45     [xi w{1}{i}] = afb3D(x, Faf{f1}, Faf{f2}, Faf{f3});
46     for k = 2:J
47         [xi w{k}{i}] = afb3D(xi, af{f1}, af{f2}, af{f3});
48     end
49     w{J+1}{i} = xi;
50 end
51
52 for k = 1:J
53     for m = 1:7
54         [w{k}{1}{m} w{k}{2}{m} w{k}{3}{m} w{k}{4}{m}] = ...
55             pm4(w{k}{1}{m}, w{k}{2}{m}, w{k}{3}{m}, w{k}{4}{m});
56     end
57 end
58
59