The Olena project aims at building a scientific computation platform oriented towards image processing, image recognition, and artificial vision. This environment is composed of a high performance generic library, a set of tools for shell scripts, together with, in the more distant future, an interpreter (a la Octave, MatLab etc.) and a visual programming environment.
Each step includes its own difficulties and requires the invention of new solutions. For instance, the library --the low level service set on top of which is built the whole project-- shall be both fast and generic. These objectives are quite antagonist in programming. Fortunately, the scientific computation field recently realized that genericity, as found in object oriented languages, is no longer a tool useful to implement auxiliary classes, but constitutes a new programming paradigm in its own right. Contrary to the usual oject oriented modelizations with inheritance and dynamic polymorphism, (static) genericity enables the generation of performant and reusable code. The Olena library is written using this paradigm.
We have already found effective solutions to delicate problems, such as the wide variety of data types and data structures expected to be offered by such a library. In addition, we have generalized these solutions as design patterns to be reused in similar conditions.
Olena is also effective for us to perform research on image processing.
Learn More about Olena
Some slides that describe the rationale for Olena and some aspects of this project are available from the documentation page.
The C++ library provides:
- Generic basic image types (1-D, 2-D, 3-D images, etc.)
- Morphers: generic, composable and lightweight objects built on one or several images, that can be used as
- mixins: a morpher can add extra data (e.g. a neighborhood) or operations (e.g., an ordering on the values) to an image;
- adapters: e.g., a slice morpher can be used to view a slice of a 3-D image (spacemap) as a 2-D image (bitmap);
- modifiers: a morpher can add a mask to an image, to restrict its (iterable) domain;
- lazy function applications: a morpher can present an image seen through a function, either bijective or not;
- Generic image processing algorithms
- Auxiliary tools, necessary to write generic algorithms:
- points, delta-points;