User Documentation
RAVL, Recognition And Vision Library
Ravl - Core - Data Processing - Introduction


Imaging processing nearly always involves chains of processing operations. In languages like C++ many tools for representing and abstracting the data and algorithms are used. The language itself is designed to be object oriented. It is based on 'C' a procedural language. However some aspects of image processing are more easily expressed in terms of the 'data flow' approach. This is much harder to express in C++, but with some tools this aspect of a program can be clearly expressed.

In `data flow' program design, the program is modelled as a flow of data through several processing operations. This kind of approach is used successfully in unix for piping text between Unix processes.

One of the key design features of the mechanisms described here is that they are designed to make the minimum impact on the user classes they work with. The mechanisms work with all the built in types of C++, and only require a working copy constructor for most of its operations. In addition the assignment operator is used for some but not all functionality. Even if the user's classes do not meet weak constraints, it is still possible to use most of the mechanisms here, as all kinds of pointers work well within the framework. If the user decides to use raw pointers, memory management is left to them. In order to make this possible the C++ RTTI (Real Time Type Informat) mechanism is used.

The framework presented here is designed to work with the RAVL. C++ programming library. RAVL uses reference counting to manage all large data structures. This means that the cost of using assignment operator and copy constructor can be assumed to be low. This has bearing on the choices made when passing data around. The reference counting mechanism is also thread safe, which means several different threads can hold references to an object without any problems. This does not ensure the objects themselves are thread safe, however if the data processing model is adhered to, the input to a process is never modified and if we are only reading information from an object, no conflicts should arise.

Maintainer:Charles Galambos, Documentation by CxxDoc: Tue Aug 13 10:00:52 2002