Practical Algorithms

for Image Analysis,

2nd Edition


by  Lawrence O’Gorman, Michael J. Sammon and Michael Seul

Cambridge University Press, 2008


Reviewed by Jason Dowling

Click here for Top of Page
Right Arrow: Next
Right Arrow: Previous

The authors of this useful and well-written book (including Larry O’Gorman the IAPR Newsletter editor) have a wealth of experience in applying image processing to various tasks.  This understanding is reflected in the practical cookbook style used in the second edition of this book

As a student I found the first edition of this book (published in 2000) particularly useful as an introduction to a number of image processing topics.  Coming from a programming background, I found it very useful to take an image, run one or more operations, view the results and then look through the C source code to see how it worked.  The book doesn’t overwhelm the reader with details but has a logical and concise structure.  Each of the six main chapters consists of four to eight page sections discussing a single image processing operation.

Binary and source code for the programs discussed in each section are provided on the CD (Windows and Linux).  The source code is written in C, which I think is a lot more useful than using Matlab or Java.  The choice of the Visual C++ v6.0 workspace files for Windows users seems a little strange, but I think most users would read the code to learn from it rather than extend it.

This new second edition has an additional 54 pages.  Some typos and bugs have been fixed from the first edition and the index is now much improved.  For those averse to the command line, a useful new addition on the CD is a Java GUI for running the book’s programs.

The first chapter of the book provides an introduction, discusses the code organization and provides an annotated section overview for the book.  The second part of this chapter provides an image analysis example (a “guided tour”) using various command line commands.

Chapter two deals with a number of global operations for image analysis, including histogram transformations, operations for combining images (addition, subtraction, etc), geometric transformations (rotation, translation and interpolation) and colour transformations.  The clear discussion and code for nearest neighbour and bilinear interpolation are highlights of this chapter.

The third chapter focuses on grey-scale image analysis.  Spatial domain convolution is discussed followed by sections on noise reduction, edge enhancement and flat fielding, edge detection (gradient filter masks, and the Boie-Cox algorithm), subsampling, multiresolution analysis and template matching.  An additional section for this edition on Gabor wavelet analysis has been added, with an emphasis on texture and pattern detection.  The final section presents binarization, with examples based on text image analysis (this edition also includes a new discussion of connectivity-preserving thresholding).

Chapter four addresses binary image analysis.  An introduction to mathematical morphology is given, followed by sections on binary noise removal, region detection and encoding, shape analysis (including moments and Fourier descriptors), convex hull construction, thinning, line width determination, global features, and finally a nice introduction to the Hough transform.

The analysis of lines and line patterns is the focal point of the fifth chapter and covers chain coding, line features and noise reduction, polygonalization, detection of critical points (by curvature estimation), straight line fitting (least squares and eigenvector evaluation), cubic spline fitting, morphology and topology of line patterns (including segment cluster analysis).

The sixth chapter focuses on the analysis of point patterns.  The construction and display of Voronoi diagrams are discussed.  Then the spatial statistics of point patterns are described (to assess the degree of randomness in an image), followed by a section on the topology and geometry of cellular patterns.  Finally the k-nearest neighbour problem is discussed, including code to find the k-nearest neighbours based on Voronoi analysis or for each point in a list with given x-y coordinates.

The focus of the final “algorithm chapter” (chapter seven) is frequency domain analysis. The first section is a very accessible introduction to the 2D Discrete Fourier Transform and the fast Fourier transform.  The second part of this chapter discusses frequency domain filtering (image smoothing, edge detection, etc).

A new addition for this edition is the list of program descriptions, sorted by chapter and title provided in chapter eight.  The notes on each program and the interactions between each program and others are quite useful.  For example, many of the line analysis programs in chapter five require input data in the primitives chain code format (which can be produced from the “pcc” program in section 5.1).  Also in this edition a new eight page chapter has been added with suggested student projects.  These appear to be reasonably simple (mainly using programs from the CD) and working through them should provide a useful introduction to various image processing applications.  The book concludes with an appendix providing a more formal mathematical summary of some of the concepts presented earlier in the book (the Fourier transform, sampling theorem, special purpose filters, convolution, etc).

I enjoyed reading through the new edition of this book and particularly like the writing style and logical layout of sections.  Sample input and output from each program is either shown in the book or clearly explained.  I didn’t notice any editing errors.  References to original papers and further reading notes are well written.  A minor criticism is that the website for the book ( has not been updated for this edition.   I think it would be great to have a future edition or separate volume that uses a similar style to introduce more advanced segmentation or registration methods.  Also I think a chapter on 3D image processing could be useful, as would a section on B-spline image warping.

I think this book would be excellent for a short course on image processing or as a supplementary text for students new to this field.  I would recommend it also as a valuable reference for practitioners in this field.


Click above to go to the publisher’s web page where you see a Description of the book and can link to the Table of Contents, an Excerpt, the Index, Copyright information, and Frontmatter. 

Book Reviews Published in

the IAPR Newsletter


The Dissimilarity Representation for Pattern Recognition:  Foundations and Applications

by Pekalska and Duin

             (see review in this issue)


Handbook of Biometrics

by Jain, Flynn, and Ross (Editors)

             (see review in this issue)


Advances in Biometrics –

Sensors, Algorithms, and Systems

by Ratha and Govindaraju, (Editors)

             (see review in this issue)


Dynamic Vision for Perception and Control of Motion

by Dickmanns

             Jan ‘08   [html]     [pdf]



by Polanski and Kimmel

             Jan ‘08   [html]     [pdf]


Introduction to clustering large and high-dimensional data

by Kogan

             Jan ‘08   [html]     [pdf]


The Text Mining Handbook

by Feldman and Sanger

             Jan ‘08   [html]     [pdf]


Information Theory, Inference,

and Learning Algorithms

by Makay

             Jan ‘08   [html]     [pdf]


Geometric Tomography

by Gardner

           Oct ‘07   [html]     [pdf]


“Foundations and Trends in Computer Graphics and Vision”

Curless, Van Gool, and Szeliski., Editors

           Oct ‘07   [html]     [pdf]


Applied Combinatorics on Words

by M. Lothaire

           Jul ‘07    [html]     [pdf]



Human Identification Based on Gait

by Nixon, Tan and Chellappar

             Apr ‘07   [html]     [pdf]


Mathematics of Digital Images

by Stuart Hogan

             Apr ‘07   [html]     [pdf]


Advances in Image and Video Segmentation

Zhang, Editor

             Jan ‘07 [html]      [pdf]


Graph-Theoretic Techniques for Web Content Mining

by Schenker, Bunke, Last and Kandel

             Jan ‘07 [html]      [pdf]


Handbook of Mathematical Models in Computer Vision

by Paragios, Chen, and Faugeras (Editors)

           Oct ‘06     [html]     [pdf]


The Geometry of Information Retrieval

by van Rijsbergen

           Oct ‘06     [html]     [pdf]


Biometric Inverse Problems

by Yanushkevich, Stoica, Shmerko and Popel

           Oct ‘06     [html]     [pdf]


Correlation Pattern Recognition

by Kumar, Mahalanobis, and Juday

           Jul. ‘06     [html]     [pdf]


Pattern Recognition 3rd Edition

by Theodoridis and Koutroumbas

           Apr. ‘06    [html]     [pdf]


Dictionary of Computer Vision and

Image Processing

by R.B. Fisher, et. Al

           Jan. ‘06    [html]     [pdf]


Kernel Methods for Pattern Analysis

by Shawe-Taylor and Cristianini

           Oct. ‘05    [html]     [pdf]


Machine Vision Books

           Jul. ‘05     [html]     [pdf]


CVonline:  an overview

           Apr. ‘05    [html]     [pdf]


The Guide to Biometrics by Bolle, et al

           Jan. ‘05    [html]     [pdf]


Pattern Recognition Books

           Jul. ‘04                  [pdf]