THE RAMPAGE IMAGE PROCESSING ARCHITECTURE	

A C++ Library for High-Quality Image Processing
(c) 1997 Mayur Patel



Most image processing libraries are based on the concept of ping-ponging data
between buffers.  Image processing operations are functions. The application
programmer applies each function to the appropriate data and collects the
output into another buffer.  This output may become input for the next
operation.  This methodology in known as push-forward execution and requires
the application programmer to implement buffer management.

The design criteria for most image processing libraries are implicitly set as
follows:
   (1) Processing speed
   (2) Constrained memory consumption
   (3) Quality

Most libraries optimize file i/o and processing speed.  Few features are
included to help control the huge memory demands inherent in manipulating image
data.  Furthermore, integer arithmetic is usually used and the pixel models
suffer from range-clamping artifacts.

RAMPAGE was designed for large-scale high-quality image processing tasks.  The
design criteria for RAMPAGE are as follows:
   (1) Quality
   (2) Constrained memory consumption
   (3) Processing speed

RAMPAGE supports pixel models that preserve over-exposure and under-exposure
information, preventing clamping artifacts.  When quality is an issue,
floating-point math is used.

Furthermore, the application programmer may specify limits on how much memory
RAMPAGE should use.  Details of buffer management are hidden.  Settings exist
to optimize performance, but the busy-work is off-loaded as much as possible.

Maximizing quality slows processing.  Also, speed varies with the amount of
available memory.  Computer memory is a fixed resource, so it is often more
difficult to deal with an excessive memory demand than an excessive CPU demand.
RAMPAGE lets execution time grow in order to accommodate memory constraints.

RAMPAGE should handle image processing pipelines of arbitrary complexity. 
Currently, a memory-frugal pull-through execution engine and a faster scalable
push-forward engine are implemented.  An open architecture allows clients to
easily implement new processing operators and engines which work as smoothly in
the pipeline as native library components.

Silicon Graphics' ImageVision Library is a commercial product with a similar
API and features. I have attempted to engineer RAMPAGE to be lighter and more
flexible.  And cross-platform. :-)

Mayur.
