Endrov

Endrov is an open-source plugin architecture aimed for image analysis and data processing. Being based on Java, it is portable and can both be run locally and as an applet. It grew out of the need for an advanced open source software that can cope with complex spatio-temporal image data, mainly obtained from microscopes in biological research. It lends much of the philosophy from ImageJ but aims to supersede it by having a more modern design.

Endrov grew out of the needs of a software to map the embryogenesis of C.elegans.

The lead developer, Johan Henriksson, is a Ph.D. student at Karolinska Institute.

Specifications
Endrov is both a library and an imaging program. The design has made strong emphasis on separating GUI code from data types, filters and other data processing plugins. The idea is that the program can be used for most daily use or prototyping, and for bigger batch processing or integration, the code is invoked as a library.

As a program, Endrov can do what you expect from normal image processing software. It is meant to be hackable; integrating new editing tools, windows and data types is meant to be simple. The main features that set it apart from other imaging software is that it can handle additional dimensions (XYZ, time, channel) which is needed for more serious microscopy. Filters can also be used without being directly applied, and can be composed into filter sequences. Data (for example derived from analysis) is stored together with the images.

The native image format is OST but most common formats are supported.

Comparison with ImageJ
ImageJ is older and hence it is more mature and has more plugins. This limits how much of ImageJ can be changed without breaking backwards-compatibility, which has caused design flaws to accumulate over time. Endrov sacrifices all backwards-compatibility for a clean design. While ImageJ consists of a core and rather independent plugins, Endrov has few core functions and plenty of plugin-plugin dependencies. The goal is to tighten the integration and increase encapsulation, thus reduce code redundancy and ease maintenance. As an example, the GUI is separate from most algorithm plugins; algorithms merely provide descriptions of input and output.