| |
| |
List of Figures | |
| |
| |
List of Tables | |
| |
| |
List of List of Algorithms | |
| |
| |
List of List of Program Listings | |
| |
| |
Preface | |
| |
| |
| |
Introduction | |
| |
| |
| |
What are images? | |
| |
| |
| |
What is image processing? | |
| |
| |
| |
Example: contrast enhancement | |
| |
| |
| |
Example: removal of motion blur | |
| |
| |
| |
Example: image warping | |
| |
| |
| |
Exercises | |
| |
| |
| |
Imaging | |
| |
| |
| |
Introduction | |
| |
| |
| |
Passive and active imaging | |
| |
| |
| |
Energy sources | |
| |
| |
| |
The electronic camera | |
| |
| |
| |
Camera optics | |
| |
| |
| |
CCD sensors | |
| |
| |
| |
The human eye | |
| |
| |
| |
Structure | |
| |
| |
| |
Properties of the human visual system | |
| |
| |
| |
Three-dimensional imaging | |
| |
| |
| |
Stereoscopy | |
| |
| |
| |
Computed tomography | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Digital images | |
| |
| |
| |
Introduction | |
| |
| |
| |
Sampling | |
| |
| |
| |
Spatial resolution | |
| |
| |
| |
Sampling pattern | |
| |
| |
| |
Quantisation | |
| |
| |
| |
Colour | |
| |
| |
| |
The RGB model | |
| |
| |
| |
Other colour models | |
| |
| |
| |
Image representation | |
| |
| |
| |
8-bit greyscale images | |
| |
| |
| |
Other data types | |
| |
| |
| |
Representation of colour | |
| |
| |
| |
Volumetric data | |
| |
| |
| |
Object-oriented programming with images and volumes | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Images in Java | |
| |
| |
| |
Images in Java 1.0/1.1 | |
| |
| |
| |
Loading images | |
| |
| |
| |
Producers and consumers | |
| |
| |
| |
Acquiring and processing pixel data | |
| |
| |
| |
The Java2D API | |
| |
| |
| |
The BufferedImage class | |
| |
| |
| |
Raster and WritableRaster | |
| |
| |
| |
The DataBuffer classes | |
| |
| |
| |
RasterOp, BufferedImageOp and BufferedImageFilter | |
| |
| |
| |
Reading a BufferedImage | |
| |
| |
| |
Java Advanced Imaging | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Basic image manipulation | |
| |
| |
| |
Storage | |
| |
| |
| |
Storage media | |
| |
| |
| |
File formats | |
| |
| |
| |
The PBM, PGM and PPM formats | |
| |
| |
| |
The portable network graphics (PNG) format | |
| |
| |
| |
Reading and writing images in Java | |
| |
| |
| |
PBM, PGM and PPM images | |
| |
| |
| |
Creating your own format: an example | |
| |
| |
| |
PNG images | |
| |
| |
| |
Putting it all together | |
| |
| |
| |
Display | |
| |
| |
| |
Hardware | |
| |
| |
| |
Software: displaying images in Java | |
| |
| |
| |
Printing | |
| |
| |
| |
Greyscale images | |
| |
| |
| |
Colour images | |
| |
| |
| |
Manipulation of pixel data | |
| |
| |
| |
Extracting regions of interest | |
| |
| |
| |
Basic geometric manipulation | |
| |
| |
| |
Arithmetic and logical combination of images | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Grey level and colour enhancement | |
| |
| |
| |
Introduction | |
| |
| |
| |
Grey level mapping | |
| |
| |
| |
Linear mapping | |
| |
| |
| |
Non-linear mapping | |
| |
| |
| |
Efficient implementation of mapping | |
| |
| |
| |
Image histograms | |
| |
| |
| |
Computing histograms in Java | |
| |
| |
| |
Histogram equalisation | |
| |
| |
| |
Histogram equalisation in Java | |
| |
| |
| |
Colour processing | |
| |
| |
| |
Histograms of colour images | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Neighbourhood operations | |
| |
| |
| |
Introduction | |
| |
| |
| |
Convolution and correlation | |
| |
| |
| |
Calculating a convolution | |
| |
| |
| |
Computational problems | |
| |
| |
| |
Performance issues | |
| |
| |
| |
Correlation | |
| |
| |
| |
Convolution in Java | |
| |
| |
| |
Linear filtering | |
| |
| |
| |
Low pass filtering | |
| |
| |
| |
High pass filtering | |
| |
| |
| |
High frequency emphasis | |
| |
| |
| |
Implementations in Java | |
| |
| |
| |
Edge detection | |
| |
| |
| |
A simple edge detector | |
| |
| |
| |
The Laplacian | |
| |
| |
| |
The Canny edge detector | |
| |
| |
| |
Implementations in Java | |
| |
| |
| |
Rank filtering | |
| |
| |
| |
Median filter | |
| |
| |
| |
Minimum and maximum filters | |
| |
| |
| |
Range filter | |
| |
| |
| |
Implementation of rank filters in Java | |
| |
| |
| |
Hybrid filters | |
| |
| |
| |
Adaptive filters | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
The frequency domain | |
| |
| |
| |
Spatial frequency | |
| |
| |
| |
Fourier theory | |
| |
| |
| |
Basic concepts | |
| |
| |
| |
Extension to two dimensions | |
| |
| |
| |
The discrete Fourier transform | |
| |
| |
| |
The spectra of an image | |
| |
| |
| |
The fast Fourier transform | |
| |
| |
| |
Properties of the Fourier transform | |
| |
| |
| |
Java implementation | |
| |
| |
| |
Investigating spectra | |
| |
| |
| |
Display | |
| |
| |
| |
Interpretation | |
| |
| |
| |
Filtering of images | |
| |
| |
| |
Low pass filtering | |
| |
| |
| |
High pass filtering | |
| |
| |
| |
Band pass and band stop filtering | |
| |
| |
| |
Removal of periodic noise | |
| |
| |
| |
Implementations of filters in Java | |
| |
| |
| |
Deconvolution | |
| |
| |
| |
Point spread functions | |
| |
| |
| |
The inverse filter | |
| |
| |
| |
The Wiener filter | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Geometric operations | |
| |
| |
| |
Introduction | |
| |
| |
| |
Simple techniques and their limitations | |
| |
| |
| |
Affine transformations | |
| |
| |
| |
Affine transformations in Java | |
| |
| |
| |
Transformation algorithms | |
| |
| |
| |
Interpolation schemes | |
| |
| |
| |
Zero-order interpolation | |
| |
| |
| |
First-order interpolation | |
| |
| |
| |
Higher-order interpolations | |
| |
| |
| |
Affine image transformation in Java | |
| |
| |
| |
Warping and morphing | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Segmentation | |
| |
| |
| |
Introduction | |
| |
| |
| |
A simple non-contextual technique: thresholding | |
| |
| |
| |
Thresholding of pixel grey level | |
| |
| |
| |
Thresholding of colour | |
| |
| |
| |
Java tools for thresholding of grey level and colour | |
| |
| |
| |
Contextual techniques | |
| |
| |
| |
Pixel connectivity | |
| |
| |
| |
Region similarity | |
| |
| |
| |
Region growing | |
| |
| |
| |
The split and merge algorithm | |
| |
| |
| |
Segmentation using other image properties | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Morphological image processing | |
| |
| |
| |
Introduction | |
| |
| |
| |
Basic concepts | |
| |
| |
| |
Structuring elements | |
| |
| |
| |
Fitting and hitting | |
| |
| |
| |
Java classes to represent structuring elements | |
| |
| |
| |
Fundamental operations | |
| |
| |
| |
Erosion | |
| |
| |
| |
Dilation | |
| |
| |
| |
Implementations of erosion and dilation in Java | |
| |
| |
| |
Compound operations | |
| |
| |
| |
Opening | |
| |
| |
| |
Closing | |
| |
| |
| |
Hit and miss transform | |
| |
| |
| |
Java implementations | |
| |
| |
| |
Morphological filtering | |
| |
| |
| |
Greyscale morphology | |
| |
| |
| |
Erosion and dilation | |
| |
| |
| |
Opening and closing | |
| |
| |
| |
Other compound operations | |
| |
| |
| |
Java implementations of greyscale operations | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Image compression | |
| |
| |
| |
Introduction | |
| |
| |
| |
Redundancy | |
| |
| |
| |
Performance characterisation | |
| |
| |
| |
Lossless compression techniques | |
| |
| |
| |
Delta compression | |
| |
| |
| |
Run length encoding | |
| |
| |
| |
Statistical coding | |
| |
| |
| |
Dictionary-based coding | |
| |
| |
| |
Comparison of techniques | |
| |
| |
| |
Lossy compression techniques | |
| |
| |
| |
JPEG compression | |
| |
| |
| |
Fractal compression | |
| |
| |
| |
Compression of moving images | |
| |
| |
| |
Further reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Glossary of Image Processing Terms | |
| |
| |
Bibliography | |
| |
| |
Index | |