Skip to main content

Design

Overview

This section of the site describes the major design components of ImageJ2. There are six central considerations:

  1. Image data model – the core API for working with image data
  2. Regions of interest (ROIs) – segmentation and overlays
  3. Input and output (I/O) – storing and retrieving data for interoperability with other tools
  4. User interface – providing a rich graphical interface
  5. Extensibility – extending ImageJ with plugins and scripts
  6. Compatibility – old plugins and macros must continue to work

Specific topics

There are some topics we have written about at length. We will add more topics to this section as time goes on.

  1. Service architecture - how ImageJ manages areas of functionality and provides extensibility
  2. Modules and plugins - how modules and plugins work, and the difference between them
  3. Menuing system – how the menu structure works

ImageJ2 component organization

The project is divided into several components. The diagram on the right represents the core dependency diagram, auto-generated from the most recent source code (click for full size).

App

Trunk build Daily build Maven site Browse source
ImageJ Application
ij-app.jar ij-app.jar ij-app imagej
The app component is the top-level ImageJ application. It brings together all the components into the final application. It launches the Swing user interface by default, but other interfaces are equally possible.
 

Core

Trunk build Daily build Maven site Browse source
ImageJ Core Commands: Application
ij-commands-app.jar ij-commands-app.jar ij-commands-app imagej.core.commands.app
Core application routines for ImageJ.
 
ImageJ Core Commands: Data
ij-commands-data.jar ij-commands-data.jar ij-commands-data imagej.core.commands
Core image processing routines for ImageJ.
 
ImageJ Core Commands: Debug
ij-commands-debug.jar ij-commands-debug.jar ij-commands-debug imagej.core.commands.debug
Core debugging routines for ImageJ.
 
ImageJ Core Commands: Display
ij-commands-display.jar ij-commands-display.jar ij-commands-display imagej.core.commands
Core image display routines for ImageJ.
 
ImageJ Core Commands: Miscellaneous
ij-commands-misc.jar ij-commands-misc.jar ij-commands-misc imagej.core.commands.misc
Miscellaneous example commands for ImageJ.
 
ImageJ Core Classes
ij-core.jar ij-core.jar ij-core imagej
The ImageJ core classes include the services framework with some basic services: an event service, which uses a publish/subscribe messaging pattern to manage events, which reduces direct dependencies between components; an object service, for keeping track of registered objects sorted by type; a thread service, for managing running threads; and a platform service, for defining platform-specific functionality. This component also includes some basic utility classes. The core component also includes ImageJ's framework for extensibility, which allows for the definition of ImageJ modules, plugins and tools. A module is a discrete piece of functionality with typed inputs and outputs. Plugins, scripts and workflows are all types of modules. A plugin is a piece of code that enables functionality (such as an image processing algorithm) within the program. A tool is a piece of code that defines user input behavior, such as drawing on the image with a pencil, or panning the display by dragging. The extensibility framework also provides a central discovery mechanism for plugins and tools, which allows ImageJ extensions to be loaded dynamically.
 
ImageJ Data Model
ij-data.jar ij-data.jar ij-data imagej.data
The data component contains the core image data model, based on ImgLib2. This is the primary mechanism by which image data is managed internally by ImageJ2. This component also provides the corresponding core image display logic for user interfaces.
 
ImageJ Core: I/O
ij-io.jar ij-io.jar ij-io imagej.io
The io component provides an input/output service for reading and writing data to and from data streams. It also provides several core plugins for importing image data, as well as a recent file service for keeping track of recently opened files.
 
ImageJ Launcher
ij-launcher.jar ij-launcher.jar ij-launcher imagej
The artist formerly known as the Fiji launcher. This is the executable which runs ImageJ2. Its purpose is also to make sure that updates downloaded by the ImageJ Updater will be put into place before starting the Java Virtual Machine.
 
ImageJ Legacy Bridge
ij-legacy.jar ij-legacy.jar ij-legacy imagej.legacy
The legacy component enables backward compatibility with the legacy version of ImageJ (1.x). It contains the code necessary to translate ImageJ images into ImageJ1 format and back, so that legacy plugins can be executed faithfully.
 
ImageJ Logging: SLF4J
ij-log-slf4j.jar ij-log-slf4j.jar ij-log-slf4j imagej.log.slf4j
This adapter package enables the use of SLF4J-based logging within ImageJ's logging framework. It is kept separate from the ImageJ core classes to avoid proliferating SLF4J dependencies to downstream code that does not need SLF4J-based logging.
 
ImageJ Core Options
ij-options.jar ij-options.jar ij-options imagej.core.options
The core options component contains some built-in shared preferences for ImageJ. These options appear in the Edit > Options menu.
 
ImageJ Core Platforms
ij-platforms.jar ij-platforms.jar ij-platforms imagej.core.platforms
The core platforms component contains the platform-specific code for dealing with common desktop platforms, including Mac OS X and Windows.
 
ImageJ Core Tools
ij-tools.jar ij-tools.jar ij-tools imagej.core.tools
The core tools component contains the basic built-in tools for ImageJ. These tools take the form of toolbar icons accessible through the user interface.
 
ImageJ User Interface Framework
ij-ui.jar ij-ui.jar ij-ui imagej.ui
The ui component contains the user interface (UI) framework for ImageJ. Each ImageJ user interface uses this framework to make itself available for use.
 
ImageJ Updater Core
ij-updater-core.jar ij-updater-core.jar ij-updater-core imagej.updater
The UI-agnostic part of the ImageJ Updater (TAFKA Fiji Updater).
 
ImageJ Updater support for uploading via SSH/SFTP
ij-updater-ssh.jar ij-updater-ssh.jar ij-updater-ssh imagej.updater.ssh
The SSH/SFTP-specific part of the ImageJ Updater (TAFKA Fiji Updater).
 

UI: AWT & Swing

Trunk build Daily build Maven site Browse source
ImageJ UI: Common AWT Classes
ij-ui-common-awt.jar ij-ui-common-awt.jar ij-ui-common-awt imagej.ui.common.awt
Common AWT classes for use with AWT and Swing user interfaces. These classes depend on several ImageJ components, and are intended only to share code between AWT- and Swing-based user interfaces of ImageJ.
 
ImageJ Utility Classes: AWT
ij-util-awt.jar ij-util-awt.jar ij-util-awt imagej.util.awt
AWT utility classes for use with AWT and Swing user interfaces. These classes depend on ImageJ core only, and are considered general-purpose AWT utility classes, potentially useful outside the ImageJ framework.
 

UI: AWT

Trunk build Daily build Maven site Browse source
ImageJ UI: AWT
ij-ui-awt.jar ij-ui-awt.jar ij-ui-awt imagej.ui.awt
An AWT-based ImageJ user interface. Not yet fully functional.
 

UI: Pivot

Trunk build Daily build Maven site Browse source
ImageJ UI: Pivot
ij-ui-pivot.jar ij-ui-pivot.jar ij-ui-pivot imagej.ui.pivot
An Apache Pivot-based ImageJ user interface. Not yet fully functional.
 

UI: SWT

Trunk build Daily build Maven site Browse source
ImageJ UI: SWT
ij-ui-swt.jar ij-ui-swt.jar ij-ui-swt imagej.ui.swt
An Eclipse SWT-based ImageJ user interface. Not yet functional.
 

UI: Swing

Trunk build Daily build Maven site Browse source
ImageJ UI: Swing
ij-ui-swing.jar ij-ui-swing.jar ij-ui-swing imagej.ui.swing
A Swing-based ImageJ user interface. Both SDI and MDI implementations are provided.
 
ImageJ UI: Swing Commands
ij-ui-swing-commands.jar ij-ui-swing-commands.jar ij-ui-swing-commands imagej.ui.swing.commands
Commands for Swing-based ImageJ user interfaces.
 
The Script Editor
ij-ui-swing-script-editor.jar ij-ui-swing-script-editor.jar ij-ui-swing-script-editor imagej.script.editor
The artist formerly known as the Fiji Script Editor, now based on the next generation architecture provided by ImageJ2
 
ImageJ UI: Swing Tools
ij-ui-swing-tools.jar ij-ui-swing-tools.jar ij-ui-swing-tools imagej.ui.swing.tools
Tools for Swing-based ImageJ user interfaces.
 
ImageJ Updater (Swing)
ij-ui-swing-updater.jar ij-ui-swing-updater.jar ij-ui-swing-updater imagej.updater.gui
The updater for ImageJ (formerly known as Fiji Updater).
 
ImageJ Utility Classes: Swing
ij-util-swing.jar ij-util-swing.jar ij-util-swing imagej.util.swing
Swing utility classes for use with Swing user interfaces. These classes do not depend on ImageJ, and are considered general-purpose Swing utility classes, potentially useful outside the ImageJ framework.
 

Background and references

These are sections devoted to general design and engineering issues in Java, software development and architecture, ImageJ, Imaging, etc.