Discrete Fourier Analysis and Wavelets
Applications to Signal and Image Processing

S. Allen Broughton and Kurt M. Bryan

Contents

  1. Overview and Wiley site for the book
  2. Contact the authors
  3. Matlab routines discussed in the book
  4. Other matlab routines
  5. Errata, Questions and Comments

Cover Images: The image below was used in preparing images for the the book cover. It shows approximations of a picture of lilly pads at Kurt Bryan's home.

lilly pads

1. Overview and Wiley site for the book

This book grew out of course notes for a course we alternately teach called Mathematical Methods of Image Processing. A brief description of the text from the Wiley site linked below follows:

For more detail on the book:

2. Contact the authors

S. Allen Broughton brought@rose-hulman.edu http://www.rose-hulman.edu/~brought/
Kurt M. Bryan bryan@rose-hulman.edu http://www.rose-hulman.edu/~bryan/

3. Matlab Routines in the book

Here are the Matlab routines from the text and a few additional ones, as a zip file.

Here is a table with a link and description to each routine as a text file.

Routine Description Matlab Toolbox Requirements
audiocompress.m compress an audio signal  
blkdct2.m block Discrete Cosine Transform of an mxn image Image processing toolbox
blkidct2.m inverse block Discrete Cosine Transform of an mxn image Image processing toolbox
circconv.m circular convolution by a causal filter  
crevconv.m circular convolution by time-reversal of a causal filter  
circconv2.m 2-D circular convolution by a causal filter  
crevconv2.m 2-D circular convolution by time-reversal of a causal filter  
dyadicbiortho.m compute analysis and synthesis scaling and wavelet functions on dyadic points for a biorthognal filter bank  
dyadicortho.m compute analysis and synthesis scaling and wavelet functions on dyadic points for an orthogonal filter bank  
fullwave.m recursive application of wave1.m, for full wavelet transform  
gausswindow.m generate Gaussian window  
graymap.m set up a greyscale colormap  
hammingwindow.m generate Hamming window  
imwave1.m do a single stage transform (circular convolution) on an image  
imwavefull.m recursive application of imwave1.m, for full wavelet transform  
invfullwave.m recursive application of invwave1.m, inverts fullwave.m  
invimwave1.m invert imwave1 routine  
invimwavefull.m inverts imwavefull() routine  
invwave1.m inverts single-stage DWT command wave1()  
jpegdemo.m simple JPEG compression demo  
jpegprogressive.m simple JPEG compression/progressive transmission demo  
kdct.m substitute for Matlab's dct() command  
kdct2d.m substitute for Matlab's dct2() command  
kdownsample.m downsample a row vector or matrix  
kidct.m substitute for Matlab's idct() command  
kidct2d.m substitute for Matlab's idct2() command  
kupsample.m upsample a row or column vector  
rectwindow.m generate rectangular window  
rgb2gray.m convert rgb image to reasonable grayscale approximation  
spectro.m computes a spectrogram for a vector  
triwindow.m generate triangular window  
wave1.m one pass forward wavelet transform on input array  

4. Other Matlab routines

These MAtlab routines below have been used by the authors in teaching our course Mathematical Methods of Image Processing. They are not directly referenced in the book but were developed at the same time as the other routines. In column labelled routine there may be an additional .pdf file which is the published output

Routine Description Matlab Toolbox Requirements and required m-files
RGBOpic.m show red, blue, and green channels of an image.    
RGBOmanny.pdf example of the above RGBOpic.m
noisyimage.m show image before and after contamination with noise.  
energy.m compute the normalized energy of a vector or matrix
the sum of squares is divided by the size of the signal
 
energyhist.m
energyhist.pdf
show energy "histogram" as a function of radial frequency energy.m
DFT routines
wave2d.m wave2dtrigcc.m
wave2dtrigcs.m
wave2dtrigss.m
shows various pure 2D wave forms  
wave2dlband.m shows a linear band of 2D exponential wave forms, both the real and imaginary part  
wave2dcband.m shows a circular band of 2D exponential wave forms, both the real and imaginary part  
dft1demo1.m
dft1demo1.pdf
show pairs of signals and unshifted DFTs  
dft1demo2.m
dft1demo2.pdf
show pairs of signals and shifted DFTs  
dft1demo3.m show how DFT captures frequency  
dft2demo1.m show pairs of images and unshifted DFTs as well as log(1+|DFT|)  
dft2demo2.m show pairs of images and shifted DFTs  
dft2demo3.m brick wall low and high pass filters  
dft2demo4.m show symmetrically replicated image and log of shifted |DFT|  
sliceswap.m show that translation has no effect on |DFT|  
DCT routines
analsynDCT.m show analysis and synthesis waveforms for the DCT, show stepwise reconstruction of a signal image
blkgroupfreqs.m compute block DCT, rearranging all coefficients of same frequency in different blocks
into a single block
 
blkfreqhist.m display the histogram of a DCT coefficent in the block DCT of X, for a given frequency vector  
blkfreqcomp.m compute block DCT pre-image of a single frequency vector image, blkidct2.m
wave1dDCT.m show complete family of 1D DCT waveforms  image
wave2dDCT1.m show complete family of 2D DCT waveforms  image
wave2dDCT2.m show complete family of 2D DCT waveforms in diagonal order image
DCTmanny.m
DCTmanny.pdf
show block frequencies and histogram image, blkdct2.m, blkgroupfreqs.m, , blkfreqhist.m
mannybyfreqs.m show the block components of a single frequency cycling through all frequencies using the mandrill image image, blkdct2.m, blkfreqcomp.m
Quantization, threshholding, and compression
quantdequant.m show quantization and dequantization of an image, compute distortion energy.m
clippic.m clip out low energy frequencies of an image energy.m
ratedistortion.m threshold a signal at various levels and show rate distortion curve energy.m
Convolution routines
circconvs Sparse circular 1D convolution by a causal anti-causal filter pair  
circconvs2 Sparse circular 2D convolution by a causal anti-causal filter pair  
conv1demo1 show a signal and convolution pair, and DFT of convolving mask circconv.m
conv1demo2 show operation of convolution on real signals for small real masks circconv.m
convomat.m returns a matrix that performs circular convolution  
convtheorem show 1D pure wave forms and their convolution with a mask, illustrating the eigenvalue property circconv.m
blurimage blur an image and add noise circconvs2.m
edgedet edge detection circconv2.m
DWT routines
dwtmatrix.m construct matrix effecting 1D DWT transform wavelet
analsynDWT.m show analysis and synthesis waveforms for the DWT, show stepwise reconstruction of a signal wavelet, dwtmatrix.m
dwt1demo2.m shows 1, 2 and 3 stage DWT multiresolution decomposition of a signal wavelet
dwt2demo.m shows 1-stage decomposition of image into approximation and details wavelet
Filter design
tap4show.m show one parameter family of orthogonal 4 tap filters  
tap4show1d.m show one parameter family of orthogonal 4 tap filters and deomposition of a simple signal wavelet
tap4show2d.m show one parameter family of orthogonal 4 tap filters and deomposition of an image wavelet

5. Errata, Questions and Comments

If you see an error or have question or comment on the book, please send email to either author.

S. Allen Broughton brought@rose-hulman.edu
Kurt M. Bryan bryan@rose-hulman.edu

Here is a complete list of known typos and other minor erroneous wording (thanks to students and faculty who've used the book).

The table below contains some (but not all) of the errors in the list above.

location error
p. 8, line 5 "upper left corner" -> "lower right corner"
p. 19, equation 1.15 remove second t in the left hand side of the equation
p. 30, Remark 1.9, line 3 "some natural of measure of energy" -> "some natural measure of energy"
p. 44 , last equation m+h(k+1)/2 -> m+h(k+1/2)
p. 61, Exercise 1.6.a, line 3 "product vector" -> "produce vector"
p. 63, Exercise 1.14b the shift should be theta/omega time units to the left (remove "a fraction");
alternatively the shift is a "fraction theta/(2*pi)" cycles
p. 79, Remark 2.1, line 4 "refereed" -> "referred"
p. 84 , line 12 change "(|X-k2|+|Xk2)/N" to "(|X-k2|+|Xk2|)/N", (missing "|")
p. 96, 2.8.1, part 3 "three (obviously) obviously largest frequencies" ->
"three frequencies of (obviously) largest amplitude"
p. 96, 2.8.1, part 4 "these largest frequencies" -> "frequencies of largest amplitude"
p. 100, second Matlab command omit period at the end, not a part of the command
p.101, Exercise 2.4, line 1 insert "the" after "denote"
p. 252, 6.8.2 part 3 "Repeat steps 2 through 3" ->  "Repeat steps 1 through 2"
p. 252, 6.8.2 part 4 "Repeat steps 2 through 4" ->  "Repeat steps 1 through 3"
p. 292, equation (7.32) The first part of the equation should say that the union is DENSE in L2, not equals L2
p. 333, solution to 6.22 second (ls)0 should be (ls)2
second (hs)0 should be (hs)2