Image Processing Notes

This site contains series of articles I've written on image processing for computer programmers. This site contains general techniques, including some rather high powered algorithms. Some articles contain computer code demonstrating how the techniques described are coded. Some do not, depending on the article. Either way, this site is intended for people who have a general knowledge of computer programming. It is not site on how to use various image processing packages.

To read this site, a programmer should have had at three semesters of instruction, including data structures. Some examples are object oriented, so an understanding of object orientation is helpful but not necessary. The site does not assume a knowledge of computer graphics, however if you have never done computer graphics programming read the first few articles carefully. Later articles do assume a basic knowledge of this field.

This is a work in process. As papers are written the general outline, as indicated by the index below, may change. Throughout the site there are markers that look like (XXXX add link). These are links to papers that have not been written yet. As papers are written the links will be updated.

Coding Style Guide

Rather than including a coding style with each example, the style guide is given here.

Code appears in C++, Java or a psuedocode that is similar to these two languages. Certain older papers give examples in a more Pascal like psuedocode. The difference between C++ and the psuedocode is simply that no attempt has been made to compile the psuedocode and it probably will not compile.

Each data element begins with a scope specifier, and underscore then a type specifier. The scope specifiers are:

g - global
m - member
p - parameter
l - local

Type specifiers are the first letter of a basic type or the first few letters of a class, enough to identify the class type. Pointers use the letter p. Thus a parameter which is a pointer to a surface, given that the surface class is defined as class cSurface, would look like

cSurface *p_pSurface

Programmer defined classes begin with a lower case c.

class cMyClass

Code is rarely tested, and will usually require modifications before use. Make sure you understand the code and test it thoroughly before using.

Index

  1. Storage of Image Data -- Mostly about how images are stored in RAM, but also some discussion of how images are stored in files and when being transmitted over LANs and the Internet.
  2. Image Sources -- Includes a discussion on digital camera design (generic discussion, no brands) and scanners. Also a discussion on how many pixels (samples) are needed for a given image and the Nyquist frequency.
  3. Color Quantization -- How to convert true color images to 256 color images.
    1. Oct Trees (or Octrees) -- a data structure usually used for 3D graphics, but also used for color quantization.
  4. Linear Transformations
    1. Review of Matrix Math
    2. Basic Transformations
    3. High Quality Image Stretching (Resampling)
    4. Overview of Bresenham's Method (from Pixels to Animation)
    5. High Speed Image Rotation using Bresenham's Method
      1. Round Sparse Arrays A nifty data structure for holding the minimum amount of data required to rotate an image.
    6. High Speed Image Stretching using Bresenham's Method
  5. Image Correction Techniques
    1. Spatial Filters
    2. Multiple Sampling and Averaging of Images
    3. Frequency Filtering
      1. The Fourier Transformation
      2. Filtering techniques in the frequency domain
  6. Color Manipulation
  7. Compression and Encryption
    1. Entropy and Order
    2. Non-Lossy Techniques
      1. Huffman Encoding
      2. Run Length Encoding (RLE)
      3. Predictive Encoding
    3. Lossy Techniques
      1. Fourier Compression (JPEG Compression)
      2. Vector Quantization
    4. Encryption
      1. The .enc format (original format for image encryption)
      2. Public Key Encryption
  8. Handwriting Recognition
    1. Overview of Neural Networks
    2. Handwriting Recognition with Neural Networks
  9. Links to other sites containing image processing libraries, code to read JPEGs and such. (Don't ever write new code when someone's already done it for you!)

This page was last updated on 02/18/02

Return to the High Tech page

Send your comments and suggestions to j_alan@prodigy.net