Wave - an Wavelet framework for images
======================================

The Wave classes include images, wavelets, two-dimensional wavelet
transforms, and a number of utilities, like file names and statistical
information on images.

The Wavelet-part has been largely inspired by Geoff Davis' Wavelet
toolkit, but it does a number of things differently (e.g. the Wavelet
transforms are strictly one-dimensional, so that two-dimensional
decomposition algorithms can be added easily).

Documentation-wise there is currently only the reference extracted
from the sources available. A users' guide will have to be there
someday, but this will have to wait at the moment. For getting an
idea about how to use the library I recommend taking a look at the
programs in the tools/ directory and generating a class hierarchy
diagram using whatever appropiate tool.

To build the library follow the (generic) instruction in the INSTALL
file. A self test can be performed using the `test' target ("make 
test"). The tested platforms are: Linux (g++ 2.95 and higher), IRIX
(SGI CC), Win32 (MSC 6.0 and cygwin g++ 2.95 and higher), OS/2 
(OpenWatcom with STLPort).


Programming Interfaces
======================

The library is divided into three subpackages: `WImage' (images and 
some basic type definitions etc.), `Wave' (Wavelet transforms) and
`WTools' (image-related tools, some using Wavelet transforms).

For each subpackage there is a header file which should be included
for using the library: `WImage.hh' (image stuff only), `Wave.hh'
(image and Wavelet stuff) and `WTools.hh' (image, Wavelet and tools).


Features
========

Subpackage `WImage':

 Class `StillImage' (greyscale images):

  - Access to pixels using row/col tuples and absolute offsets
  - Max, min or average pixel value
  - Beautification of Wavelet-transformed image for saving in bitmap
    format
  - Comparison
  - Inner product
  - Normalization
  - PGM import and export
  - Clone, Cut and Paste, Sub-image
  - Resize, Shift
  - Row- and column-wise pixel access using `ReferenceVector' objects

 Class `ColorImage' (color images): 

  - Load and save color images (PPM and JPEG format)
  - Switch between color models RGB and YUV
  - Produce average greyscale image
  - Delegate any operation on greyscale images to its color channels


Subpackage `Wave':

 Class `WaveletTransform':

  - Analysis and Synthesis using a given number of steps
  - Produce subimage from a given subband channel (e.g. HL2)
  - Calculate the coordinates of a given subband channel
  - Fill a given subband channel


Subpackage `WTools':

 Class `Histogram':

  - Set deltas
  - Print the histogram values to stdout

 Class `ImageComparison':
 
  - Distance in MSE, PSNR, LQ, LQ^d
  - Difference Image

 Class `ImageInformation':

  - Max, min or average pixel value
  - Sort pixel values
  - Clone, Head, Tail operation
  - Standard deviation
  - Variance
  - Shuffle values

BUGS
====

When using some of the filters (Haar, Daub4, Daub6, Daub8, Villa3, 
Villa5) on images with side lengths which are not powers of two, 
the precision is far from satisfactory. This was inherited from 
Geoff Davis' Wavelet sources which show the same behaviour, and a 
cure to this has not yet been found.

THIS IS BETA SOFTWARE!
======================

The code has been in use for a while now and can thus be considered
fairly stable. Still it is of course not free of bugs! If you use 
this software you know what you are doing. I am not responsible for 
any damage it does to your system.

License
=======

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

This software is free software in terms of the GNU General Public
License which can be found in the COPYING file which is part of this 
package.


Author
======

  Herbert Martin Dietze <herbert@spamcop.net>


Homepage:

  http://herbert.the-little-red-haired-girl.org/en/software/wavelet
