2D DWT image example #2

Load gray-scale image

img = ColorToGrayScale[ReadImage["part128x128.ppm"]] ; scale = 3 ;

Display image

ShowImage[img, scale] ;

[Graphics:../HTMLFiles/index_520.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_525.gif]

Debauchies-4

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

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

Debauchies-8

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

[Graphics:../HTMLFiles/index_529.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_533.gif]

Debauchies-4

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

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

Debauchies-8

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

[Graphics:../HTMLFiles/index_537.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_541.gif]

Debauchies-4

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

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

Debauchies-8

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

[Graphics:../HTMLFiles/index_545.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_549.gif]

Debauchies-4

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

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

Debauchies-8

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

[Graphics:../HTMLFiles/index_553.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_557.gif]

Debauchies-4

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

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

Debauchies-8

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

[Graphics:../HTMLFiles/index_561.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_565.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)

1645

Show compressed DWT

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

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

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

[Graphics:../HTMLFiles/index_573.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_577.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)

1505

Show compressed DWT

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

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

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

[Graphics:../HTMLFiles/index_585.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_589.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)

1445

Show compressed DWT

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

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

Take inverse DWT

imgc = InverseWaveletTransform2D[dwtc, filter, level] ;

Show compressed image

ShowImage[imgc, scale] ;

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


Created by Mathematica  (February 5, 2004)