iswt2

Inverse discrete stationary wavelet transform 2-D

Syntax

X = iswt2(SWC,'wname')
X = iswt2(A,H,V,D,wname)
X = iswt2(A(:,:,end),H,V,D,'wname')
X = iswt2(A(:,:,1,:),H,V,D,'wname')
X = iswt2(SWC,Lo_R,Hi_R)
X = iswt2(A,H,V,D,Lo_R,Hi_R)
X = iswt2(A(:,:,end),H,V,D,Lo_R,Hi_R)
X = iswt2(A(:,:,1,:),H,V,D,'wname')

Description

iswt2 performs a multilevel 2-D stationary wavelet reconstruction using either an orthogonal or a biorthogonal wavelet. Specify the wavelet using its name ('wname', see wfilters for more information) or its reconstruction filters (Lo_R and Hi_R).

X = iswt2(SWC,'wname') or X = iswt2(A,H,V,D,wname) reconstructs the signal X, based on the multilevel stationary wavelet decomposition structure SWC or [A,H,V,D] (see swt2).

If multilevel stationary wavelet decomposition structure SWC or [A,H,V,D] was generated from a 2-D matrix, the syntax X = iswt2(A(:,:,end),H,V,D,'wname') reconstructs the signal X.

If the stationary wavelet decomposition structure SWC or [A,H,V,D] was generated from a single level stationary wavelet decomposition of a 3-D matrix, X = iswt2(A(:,:,1,:),H,V,D,'wname') reconstructs the signal X.

X = iswt2(SWC,Lo_R,Hi_R) or X = iswt2(A,H,V,D,Lo_R,Hi_R) or X = iswt2(A(:,:,end),H,V,D,Lo_R,Hi_R) or X = iswt2(A(:,:,1,:),H,V,D,'wname') reconstructs as in the previous syntax, using filters that you specify:

  • Lo_R is the reconstruction low-pass filter.

  • Hi_R is the reconstruction high-pass filter.

Lo_R and Hi_R must be the same length.

Note

  • iswt2 synthesizes X from the coefficient arrays generated by swt2. swt2 uses double-precision arithmetic internally and returns double-precision coefficient matrices. swt2 warns if there is a loss of precision when converting to double.

  • To distinguish a single-level decomposition of a truecolor image from a multilevel decomposition of an indexed image, the approximation and detail coefficient arrays of truecolor images are 4-D arrays. See Distinguish Single-Level Truecolor Image from Multilevel Indexed Image Decompositions. Also see examples Stationary Wavelet Transform of an Image and Inverse Stationary Wavelet Transform of an Image.

    If an K-level decomposition is performed, the dimensions of the A, H, V, and D coefficient arrays are m-by-n-by-3-by-K.

    If a single-level decomposition is performed, the dimensions of the A, H, V, and D coefficient arrays are m-by-n-by-1-by-3. Since MATLAB® removes singleton last dimensions by default, the third dimension of the coefficient arrays is singleton.

Examples

collapse all

Demonstrate perfect reconstruction using swt2 and iswt2 with an orthogonal wavelet.

load woman
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('db6');
[ca,chd,cvd,cdd] = swt2(X,3,Lo_D,Hi_D);
recon = iswt2(ca,chd,cvd,cdd,Lo_R,Hi_R);
norm(X-recon)
ans = 1.0126e-08

In this example you obtain single-level and multilevel stationary wavelet decompositions of a truecolor image. You view results of each decomposition.

Load in a truecolor image. The image is a 3-D array of type uint8. Since swt2 requires the first and second dimensions both be divisible by a power of 2, extract a portion of the image and view it.

imdata = imread('ngc6543a.jpg');
x = imdata(1:512,1:512,:);
imagesc(x)

Obtain the 4-level stationary wavelet decomposition of the image using the db4 wavelet. Return the approximation coefficients and the horizontal, vertical, and detail coefficients as separate arrays. Note the dimensions of the output arrays.

[a,h,v,d] = swt2(x,4,'db4');
size(a)
ans = 1×4

   512   512     3     4

size(h)
ans = 1×4

   512   512     3     4

size(v)
ans = 1×4

   512   512     3     4

size(d)
ans = 1×4

   512   512     3     4

The output arrays are all of type double. View the level 2 approximation coefficients. Since the approximation coefficients are of type double, cast them as uint8, which is the datatype of the image.

figure
imagesc(uint8(a(:,:,:,2)))
title('Level 2 Approximation Coefficients')

Reconstruct the image by performing the inverse transform. Compute the difference between the original image and reconstruction. Since the reconstruction is of type double, cast the reconstruction as type uint8 before computing the difference.

rec = iswt2(a,h,v,d,'db4');
maxdiff = max(abs(uint8(rec(:))-x(:)));
disp(['maximum difference = ' num2str(maxdiff)])
maximum difference = 0

Obtain the single-level stationary wavelet decomposition of the image using the db4 wavelet. Return the approximation coefficients and horizontal, vertical, and detail coefficients in separate arrays. Note the dimensions of the output arrays.

[a,h,v,d] = swt2(x,1,'db4');
size(a)
ans = 1×4

   512   512     1     3

size(h)
ans = 1×4

   512   512     1     3

size(v)
ans = 1×4

   512   512     1     3

size(d)
ans = 1×4

   512   512     1     3

View the approximation coefficients. To prevent an error when using imagesc, squeeze the approximation coefficients array to remove the singleton dimension.

asqueeze = squeeze(a);
size(asqueeze)
ans = 1×3

   512   512     3

figure
imagesc(uint8(asqueeze))
title('Approximation Coefficients')

Reconstruct the image by performing the inverse transform. Compute the difference between the original image and reconstruction. Since the reconstruction is of type double, cast the reconstruction as type uint8 before computing the difference.

rec = iswt2(a,h,v,d,'db4');
maxdiff = max(abs(uint8(rec(:))-x(:)));
disp(['maximum difference = ' num2str(maxdiff)])
maximum difference = 0

This example shows how to reconstruct a truecolor image from a single-level stationary wavelet decomposition using 3-D approximation and detail coefficient arrays.

Load in a truecolor image. The image is a 3-D array of type uint8. Since swt2 requires the first and second dimensions both be divisible by a power of 2, extract a portion of the image and view it.

imdata = imread('ngc6543a.jpg');
x = imdata(1:512,1:512,:);
imagesc(x)

Obtain the single-level stationary wavelet decomposition of the image using the db4 wavelet. Return the approximation coefficients and horizontal, vertical, and detail coefficients in separate arrays. Note the dimensions of the output arrays.

[a,h,v,d] = swt2(x,1,'db4');
size(a)
ans = 1×4

   512   512     1     3

size(h)
ans = 1×4

   512   512     1     3

size(v)
ans = 1×4

   512   512     1     3

size(d)
ans = 1×4

   512   512     1     3

Squeeze the coefficient arrays to remove their singleton dimensions. Note the dimensions of the squeezed arrays.

asq = squeeze(a);
hsq = squeeze(h);
vsq = squeeze(v);
dsq = squeeze(d);
size(asq)
ans = 1×3

   512   512     3

size(hsq)
ans = 1×3

   512   512     3

size(vsq)
ans = 1×3

   512   512     3

size(dsq)
ans = 1×3

   512   512     3

So that iswt2 can properly reconstruct the trueimage from the new coefficient arrays, insert a singleton dimension by reshaping the squeezed arrays. Reconstruct the image with the reshaped coefficient arrays.

a2 = reshape(asq,[512,512,1,3]);
h2 = reshape(hsq,[512,512,1,3]);
v2 = reshape(vsq,[512,512,1,3]);
d2 = reshape(dsq,[512,512,1,3]);
rec = iswt2(a2,h2,v2,d2,'db4');

Compute the difference between the original image and reconstruction. Since the reconstruction is of type double, cast the reconstruction as type uint8 before computing the difference.

maxdiff = max(abs(uint8(rec(:))-x(:)));
disp(['maximum difference = ' num2str(maxdiff)])
maximum difference = 0

Tips

If SWC or (cA,cH,cV,cD) are obtained from an indexed image analysis or a truecolor image analysis, then X is an m-by-n matrix or an m-by-n-by-3 array, respectively.

For more information on image formats, see the image and imfinfo reference pages.

Compatibility Considerations

expand all

Behavior changed in R2017b

References

Nason, G.P.; B.W. Silverman (1995), “The stationary wavelet transform and some statistical applications,” Lecture Notes in Statistics, 103, pp. 281–299.

Coifman, R.R.; Donoho D.L. (1995), “Translation invariant de-noising,” Lecture Notes in Statistics, 103, pp. 125–150.

Pesquet, J.C.; H. Krim, H. Carfatan (1996), “Time-invariant orthonormal wavelet representations,” IEEE Trans. Sign. Proc., vol. 44, 8, pp. 1964–1970.

Extended Capabilities

See Also

| |

Introduced before R2006a