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

Private GIT Repository
v1.2 19 décembre
[these_gilles.git] / THESE / codes / wave / allcode / sfb3D.m
1 function y = sfb3D(lo, hi, sf1, sf2, sf3)
2
3 % 3D Synthesis Filter Bank
4 %
5 % USAGE:
6 %   y = sfb3D(lo, hi, sf1, sf2, sf3);
7 % INPUT:
8 %   lo, hi - lowpass subbands
9 %   sfi - synthesis filters for dimension i
10 % OUPUT:
11 %   y - output array
12 % See afb3D
13 %
14 % WAVELET SOFTWARE AT POLYTECHNIC UNIVERSITY, BROOKLYN, NY
15 % http://taco.poly.edu/WaveletSoftware/
16
17 if nargin < 4
18    sf2 = sf1;
19    sf3 = sf1;
20 end
21
22 LLL = lo;
23 LLH = hi{1};
24 LHL = hi{2};
25 LHH = hi{3};
26 HLL = hi{4};
27 HLH = hi{5};
28 HHL = hi{6};
29 HHH = hi{7};
30
31 % filter along dimension 3
32 LL = sfb3D_A(LLL, LLH, sf3, 3);
33 LH = sfb3D_A(LHL, LHH, sf3, 3);
34 HL = sfb3D_A(HLL, HLH, sf3, 3);
35 HH = sfb3D_A(HHL, HHH, sf3, 3);
36
37 % filter along dimension 3
38 L = sfb3D_A(LL, LH, sf2, 2);
39 H = sfb3D_A(HL, HH, sf2, 2);
40
41 % filter along dimension 1
42 y = sfb3D_A(L, H, sf1, 1);
43
44
45 % LOCAL FUNCTION
46
47 function y = sfb3D_A(lo, hi, sf, d)
48
49 % 3D Synthesis Filter Bank
50 % (along single dimension only)
51 %
52 % y = sfb3D_A(lo, hi, sf, d);
53 % sf - synthesis filters
54 % d  - dimension of filtering
55 % see afb2D_A
56
57 lpf = sf(:, 1);     % lowpass filter
58 hpf = sf(:, 2);     % highpass filter
59
60 % permute dimensions of lo and hi so that dimension d is first.
61 p = mod(d-1+[0:2], 3) + 1;
62 lo = permute(lo, p);
63 hi = permute(hi, p);
64
65 [N1, N2, N3] = size(lo);
66 N = 2*N1;
67 L = length(sf);
68 y = zeros(N+L-2, N2, N3);
69
70 for k = 1:N3
71    y(:, :, k) = upfirdn(lo(:, :, k), lpf, 2, 1) + upfirdn(hi(:, :, k), hpf, 2, 1);
72 end
73 y(1:L-2, :, :) = y(1:L-2, :, :) + y(N+[1:L-2], :, :);
74 y = y(1:N, :, :);
75 y = cshift3D(y, 1-L/2, 1);
76
77 % permute dimensions of y (inverse permutation)
78 y = ipermute(y, p);
79
80