3D DualTree Wavelet TransformCompared to the separable DWT, the dualtree DWT may provide even more improvement
for 3D data processing than it does for 2D image processing. This is because in higher dimensions, the checkerboard artifact of the separable DWT becomes more severe. However, in higher dimensions the dualtree DWT becomes even more expansive. 1. Real 3D Dualtree Wavelet Transform The real 3D dualtree DWT of a data set x is implemented using four criticallysampled separable 3D DWTs in parallel. Then the subbands of the four DWTs are combined appropriately. The following program, dualtree3D.m, computes the Jscale real 3D dualtree DWT of a data set x.
Table 6.1 Matlab function dualtree3D.m
function w = dualtree3D(x, J, Faf, af) % 3D DualTree Discrete Wavelet Transform % % USAGE: % w = dualtree3D(x, J, Faf, af) % INPUT: % x  3D array % J  number of stages % Faf  first stage filters % af  filters for remaining stages % OUPUT: % w{j}{i}{d}  wavelet coefficients % j = 1..J, i = 1..4, d = 1..7 % w{J+1}{i}  lowpass coefficients % i = 1..4 % normalization x = x/2; M = [ 1 1 1 2 2 1 2 1 2 1 2 2 ]; for i = 1:4 f1 = M(i,1); f2 = M(i,2); f3 = M(i,3); [xi w{1}{i}] = afb3D(x, Faf{f1}, Faf{f2}, Faf{f3}); for k = 2:J [xi w{k}{i}] = afb3D(xi, af{f1}, af{f2}, af{f3}); end w{J+1}{i} = xi; end for k = 1:J for m = 1:7 [w{k}{1}{m} w{k}{2}{m} w{k}{3}{m} w{k}{4}{m}] = ... pm4(w{k}{1}{m}, w{k}{2}{m}, w{k}{3}{m}, w{k}{4}{m}); end end The wavelet coefficients w are stored as a cell array. For j = 1..J, k = 1..4, d = 1..7, w{j}{k}{d} are the wavelet coefficients produced at scale j and orientation (k,d). The image x is recovered from w using the inverse transform, implemented by idualtree3D.m. The perfect reconstruction property of the transform is illustrated in the following code fragment.
There are 28 wavelets associated with the real 3D dualtree DWT. The isosurface of one of the wavelets is shown in the following figure. In contrast with the criticallysampled separable 3D DWT, the wavelet is free of checkerboard artifact. Each subband of the real 3D dualtree DWT corresponds to a specific orientation. This figure was produced with the following Matlab program (dualtree3D_plots.m).
Table 6.2 Matlab function dualtree3D_plots.m
% dualtree3D_plots % DISPLAY 3D WAVELETS OF DUALTREE3D.M [Faf, Fsf] = FSfarras; [af, sf] = dualfilt1; J = 4; L = 3*2^(J+1); N = L/2^J; x = zeros(L,L,L); w = dualtree3D(x, J, Faf, af); w{J}{4}{7}(N/2,N/2,N/2) = 1; y = idualtree3D(w, J, Fsf, sf); figure(1) clf v = 1:L; S = 0.0025; p1 = patch(isosurface(v,v,v,y,S)); isonormals(v,v,v,y,p1); set(p1,'FaceColor','red','EdgeColor','none'); hold on p2 = patch(isosurface(v,v,v,y,S)); isonormals(v,v,v,y,p2); set(p2,'FaceColor','blue','EdgeColor','none'); hold off daspect([1 1 1]); view(30,30); camlight; lighting phong grid axis([32 48 32 48 32 48]) set(gca,'fontsize',7) title('3D WAVELET ISOSURFACE (DUALTREE TRANSFORM)') set(gcf,'paperposition',[0.5 0.5 0 0]+[0 0 4 3]) print djpeg95 dualtree3D_plots 2. Complex 3D Dualtree Wavelet Transform The complex 3D dualtree DWT also gives rise to twice as many wavelets as the real 3D dualtree DWT. The two wavelets in each orientation, can be interpreted as the real and imaginary parts of a complexvalued 3D wavelet. The complex 3D dualtree is implemented as eight criticallysampled separable 3D DWTs operating in parallel. However, different filter sets are used in each of the three dimensions. The complex 3D dualtree DWT of an data set x is computed by the function, cplxdual3D.m.
Table 6.3 Matlab function cplxdual3D.m
function w = cplxdual3D(x, J, Faf, af) % 3D Complex DualTree Discrete Wavelet Transform % % w = cplxdual3D(x, J, Faf, af) % INPUT: % x  3D signal % J  number of stages % Faf  first stage filters % af  filters for remaining stages % OUPUT: % w{j}{m}{n}{p}{d}  wavelet coefficients % j = 1..J, m = 1..2, n = 1..2, p = 1..2, d = 1..7 % w{J+1}{m}{n}{d}  lowpass coefficients % m = 1..2, n = 1..2, p = 1..2, d = 1..7 for m = 1:2 for n = 1:2 for p = 1:2 [lo w{1}{m}{n}{p}] = afb3D(x, Faf{m}, Faf{n}, Faf{p}); for j = 2:J [lo w{j}{m}{n}{p}] = afb3D(lo, af{m}, af{n}, af{p}); end w{J+1}{m}{n}{p} = lo; end end end for j = 1:J for m = 1:7 [w{j}{1}{1}{1}{m} w{j}{2}{2}{1}{m} w{j}{2}{1}{2}{m} w{j}{1}{2}{2}{m}] = ... pm4(w{j}{1}{1}{1}{m}, w{j}{2}{2}{1}{m}, w{j}{2}{1}{2}{m}, w{j}{1}{2}{2}{m}); [w{j}{2}{2}{2}{m} w{j}{1}{1}{2}{m} w{j}{1}{2}{1}{m} w{j}{2}{1}{1}{m}] = ... pm4(w{j}{2}{2}{2}{m}, w{j}{1}{1}{2}{m}, w{j}{1}{2}{1}{m}, w{j}{2}{1}{1}{m}); end end The wavelet coefficients w are stored as a cell array. For j = 1..J, m = 1..2, n = 1..2, p = 1..2, d = 1..7, w{j}{m}{n}{p}{d} are the wavelet coefficients produced at scale j and orientation (m,n,d). With p = 1 we get the real part, with p = 2 we get the imaginary part. The function icplxdual3D.m computes the inverse transform. The perfect reconstruction property of the transform is illustrated in the following code fragment.
The wavelets of the complex 3D dualtree DWT are similar to those of the real 3D dualtree DWT, however, there are two of them in each orientation. They can be interpreted as the real and imaginary parts of a complexvalued 3D wavelet. The following figures illustrate the isosurfaces of the real part, imaginary part, and magnitude of a complexvalued wavelet. This figure was produced with the Matlab program, cplxdual3D_plots.m. Summary of programs:
