S. Allen Broughton and Kurt M. Bryan
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.
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:
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/ |
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 |
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 |
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 are the errors we know about (thanks to students who used a prepublication final copy).
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. 294, prior to (7.36) | right inequality for n should be weak (n can equal (N-1)/2), if latter is an integer. |
p. 333, solution to 6.22 | second (ls)0 should be (ls)2 second (hs)0 should be (hs)2 |