2D DWT image example #1

Load gray-scale image

img = ReadImage["cat256x256.ppm"] ; RowBox[{RowBox[{scale,  , =,  , 1.5}], ;}]

Display image

ShowImage[img, scale] ;

[Graphics:../HTMLFiles/index_440.gif]

Define wavelet filters

haar = HaarFilter[] ; db4 = DaubechiesFilter[4] ; db8 = DaubechiesFilter[8] ;

One-level DWT (signed, full plot range)

DWT output size

imgsize = 500 ;

Define level

level = 1 ; func = Signed ; plotstyle = PlotRangeAll ;

Haar

dwt = WaveletTransform2D[img, haar, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_445.gif]

Debauchies-4

dwt = WaveletTransform2D[img, db4, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_447.gif]

Debauchies-8

dwt = WaveletTransform2D[img, db8, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_449.gif]

One-level DWT (signed, more detail)

DWT output size

imgsize = 500 ;

Define level

level = 1 ; func = Signed ; plotstyle = PlotRangeAutomatic ;

Haar

dwt = WaveletTransform2D[img, haar, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_453.gif]

Debauchies-4

dwt = WaveletTransform2D[img, db4, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_455.gif]

Debauchies-8

dwt = WaveletTransform2D[img, db8, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_457.gif]

One-level DWT (magnitude, more detail)

DWT output size

imgsize = 500 ;

Define level

level = 1 ; func = Abs ; plotstyle = PlotRangeAutomatic ;

Haar

dwt = WaveletTransform2D[img, haar, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_461.gif]

Debauchies-4

dwt = WaveletTransform2D[img, db4, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_463.gif]

Debauchies-8

dwt = WaveletTransform2D[img, db8, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_465.gif]

Two-level DWT (magnitude, more detail)

DWT output size

imgsize = 500 ;

Define level

level = 2 ; func = Abs ; plotstyle = PlotRangeAutomatic ;

Haar

dwt = WaveletTransform2D[img, haar, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_469.gif]

Debauchies-4

dwt = WaveletTransform2D[img, db4, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_471.gif]

Debauchies-8

dwt = WaveletTransform2D[img, db8, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_473.gif]

Three-level DWT (magnitude, more detail)

DWT output size

imgsize = 500 ;

Define level

level = 3 ; func = Abs ; plotstyle = PlotRangeAutomatic ;

Haar

dwt = WaveletTransform2D[img, haar, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_477.gif]

Debauchies-4

dwt = WaveletTransform2D[img, db4, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_479.gif]

Debauchies-8

dwt = WaveletTransform2D[img, db8, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_481.gif]

Image compression example #1 (Haar, 5-level)

DWT output size

imgsize = 500 ;

Define filter, levels, threshold, output options

filter = haar ; level = 5 ; RowBox[{RowBox[{thresh, =, 50.}], ;}] func = Abs ; plotstyle = PlotRangeAll ;

5-level DWT

dwt = WaveletTransform2D[img, filter, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_485.gif]

Eliminate small wavelet coefficients

dwtc = Map[If[Abs[#] < thresh, 0, #] &, dwt, {2}] ;

Count number of nonzero wavelet coefficients

(Times @@ Dimensions[img]) - (Position[dwtc, 0] // Length)

1688

Show compressed DWT

ShowWaveletTransform2D[dwtc, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_490.gif]

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

[Graphics:../HTMLFiles/index_493.gif]

Image compression example #2 (Daubechies-4, 5-level)

DWT output size

imgsize = 500 ;

Define filter, levels, threshold, output options

filter = db4 ; level = 5 ; RowBox[{RowBox[{thresh, =, 50.}], ;}] func = Abs ; plotstyle = PlotRangeAll ;

DWT

dwt = WaveletTransform2D[img, filter, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_497.gif]

Eliminate small wavelet coefficients

dwtc = Map[If[Abs[#] < thresh, 0, #] &, dwt, {2}] ;

Count number of nonzero wavelet coefficients

(Times @@ Dimensions[img]) - (Position[dwtc, 0] // Length)

1593

Show compressed DWT

ShowWaveletTransform2D[dwtc, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_502.gif]

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

[Graphics:../HTMLFiles/index_505.gif]

Image compression example #2 (Daubechies-8, 5-level)

DWT output size

imgsize = 500 ;

Define filter, levels, threshold, output options

filter = db8 ; level = 5 ; RowBox[{RowBox[{thresh, =, 50.}], ;}] func = Abs ; plotstyle = PlotRangeAll ;

DWT

dwt = WaveletTransform2D[img, filter, level] ; ShowWaveletTransform2D[dwt, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_509.gif]

Eliminate small wavelet coefficients

dwtc = Map[If[Abs[#] < thresh, 0, #] &, dwt, {2}] ;

Count number of nonzero wavelet coefficients

(Times @@ Dimensions[img]) - (Position[dwtc, 0] // Length)

1668

Show compressed DWT

ShowWaveletTransform2D[dwtc, level, func, plotstyle, ImageSizeimgsize] ;

[Graphics:../HTMLFiles/index_514.gif]

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

[Graphics:../HTMLFiles/index_517.gif]


Created by Mathematica  (February 5, 2004)