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

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).

Core

Trunk build Daily build Maven site Browse source
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; and a thread service, for managing running threads. This component also includes some basic utility classes.
 
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 Extensibility Framework
ij-ext.jar ij-ext.jar ij-ext imagej.ext
The ext component is 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 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 Core: Options
ij-options.jar ij-options.jar ij-options imagej.options
The options component provides a service for managing shared preferences between areas of ImageJ. For example, two plugins that both wish to respect a particular setting can retrieve the option value using the options service.
 
ImageJ Platform Framework
ij-platform.jar ij-platform.jar ij-platform imagej.platform
The platform component provides the framework for defining platform-specific functionality. A "platform" can be an operating system, CPU architecture, or version of Java.
 
ImageJ Core Plugins: Application
ij-plugins-app.jar ij-plugins-app.jar ij-plugins-app imagej.core.plugins.app
Core application routines for ImageJ.
 
ImageJ Core Plugins: Data
ij-plugins-data.jar ij-plugins-data.jar ij-plugins-data imagej.core.plugins
Core image processing routines for ImageJ.
 
ImageJ Core Plugins: Debug
ij-plugins-debug.jar ij-plugins-debug.jar ij-plugins-debug imagej.core.plugins.debug
Core debugging routines for ImageJ.
 
ImageJ Core Plugins: Display
ij-plugins-display.jar ij-plugins-display.jar ij-plugins-display imagej.core.plugins
Core image display routines for ImageJ.
 
ImageJ Core Plugins: Miscellaneous
ij-plugins-misc.jar ij-plugins-misc.jar ij-plugins-misc imagej.core.plugins.misc
Miscellaneous example plugins for ImageJ.
 
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

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.
 
ImageJ Platform: Mac OS X
ij-platform-macosx.jar ij-platform-macosx.jar ij-platform-macosx imagej.platform.macosx
Platform-specific code for Mac OS X.
 
ImageJ Platform: Windows
ij-platform-windows.jar ij-platform-windows.jar ij-platform-windows imagej.platform.windows
Platform-specific code for Windows.
 
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.
 
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.
 

UI: Swing

Trunk build Daily build Maven site Browse source
ImageJ Extensibility Framework: Swing
ij-ext-swing.jar ij-ext-swing.jar ij-ext-swing imagej.ext.ui.swing
The ext-swing component provides Swing-based user interface components for use with the ImageJ extensibility framework--i.e., a collection of Swing UI classes for working with modules. It includes facilities for harvesting input parameters from a user dialog, as well as building a Swing JMenuBar containing available modules.
 
ImageJ UI: Swing Plugins
ij-ui-swing-plugins.jar ij-ui-swing-plugins.jar ij-ui-swing-plugins imagej.ui.swing.plugins
Plugins for Swing-based ImageJ user interfaces.
 
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 UI: Swing (base classes)
ij-ui-swing-base.jar ij-ui-swing-base.jar ij-ui-swing-base imagej.ui.swing
Base classes for Swing-based ImageJ user interfaces.
 
ImageJ UI: Swing (MDI)
ij-ui-swing-mdi.jar ij-ui-swing-mdi.jar ij-ui-swing-mdi imagej.ui.swing.mdi
A Swing-based ImageJ user interface (MDI).
 
ImageJ UI: Swing (SDI)
ij-ui-swing-sdi.jar ij-ui-swing-sdi.jar ij-ui-swing-sdi imagej.ui.swing.sdi
A Swing-based ImageJ user interface (SDI).
 
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).
 

UI: AWT

Trunk build Daily build Maven site Browse source
ImageJ Extensibility Framework: AWT
ij-ext-awt.jar ij-ext-awt.jar ij-ext-awt imagej.ext.ui.awt
The ext-awt component provides AWT-based user interface components for use with the ImageJ extensibility framework--i.e., a collection of AWT UI classes for working with modules. It includes facilities for harvesting input parameters from a user dialog, as well as building an AWT MenuBar containing available modules.
 
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 Extensibility Framework: Pivot
ij-ext-pivot.jar ij-ext-pivot.jar ij-ext-pivot imagej.ext.ui.pivot
The ext-pivot component provides Apache Pivot-based user interface components for use with the ImageJ extensibility framework--i.e., a collection of Pivot UI classes for working with modules. It includes facilities for harvesting input parameters from a user dialog, as well as building a Pivot BoxPane of MenuButtons containing available modules.
 
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 Extensibility Framework: SWT
ij-ext-swt.jar ij-ext-swt.jar ij-ext-swt imagej.ext.ui.swt
The ext-swt component provides Eclipse SWT-based user interface components for use with the ImageJ extensibility framework--i.e., a collection of SWT UI classes for working with modules. It includes facilities for harvesting input parameters from a user dialog, as well as building an SWT Menu containing available modules.
 
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.
 

Extra

Trunk build Daily build Maven site Browse source
VisAD plugin for ImageJ
visad_plugin.jar visad_plugin.jar visad_plugin imagej.visad
A package for displaying ImageJ images using VisAD in a freeform way.
 
Workflow
workflow.jar workflow.jar workflow imagej.workflow
A library to facilitate efficient chaining of modules and plugins with various inputs and outputs.
 
Workflow Pipes
workflowpipes.jar workflowpipes.jar workflowpipes imagej.workflowpipes
Web-based workflow editor using Yahoo! Pipes.
 
Zoom Viewer
zoomviewer.jar zoomviewer.jar zoomviewer imagej.display.zoomview
A multi-level, tile-based zoomable viewer.
 

Background and references

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