Overview
This section of the site describes the major design components of ImageJ2. There are six central considerations:
- Image data model – the core API for working with image data
- Regions of interest (ROIs) – segmentation and overlays
- Input and output (I/O) – storing and retrieving data for interoperability with other tools
- User interface – providing a rich graphical interface
- Extensibility – extending ImageJ with plugins and scripts
- 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.
- On Architecture, Design and Engineering
- Overview Map
- NetBeans IDE and Rich Client Platform
- The Lookup API provides a simple way to implements Service Providers, a CentralLookup, an EventBus, and Injectable Singletons.
- Java Imaging (AWT, Java2D, JAI)
- Issues in Developing ImageJ Add-ons
- ImageJ Diagrams (PowerPoint)
- Modularity Presentation (PowerPoint)
- References for NetBeans Platform Development

