Skip to content

Technical specifications

Richard Domander edited this page Nov 30, 2017 · 33 revisions

This is the main page of the technical specification for BoneJ2 - a collection of plugins for Fiji/ImageJ2. Most of the project's code reimplement functionality from BoneJ1. However the code has been heavily refactored to improve quality among other things. A lot of it has been moved away from the BoneJ packages to other components such as net.imagej.ops and org.scijava.

Ops and wrapper plugins

This is the list plugins in BoneJ2. The plugins in the menus visible to the user are just simple wrappers that call ops from elsewhere. The role of the wrappers is just to present the results of the ops in a familiar manner to skeletal biologists. We wanted to offload code in this way to make BoneJ2 lightweight, and to make the generally applicable algorithms available for all ImageJ users and developers.

Analyse skeleton

Connectivity

Element fraction

Erode/Dilate

  • Use Erode/Dilate commands from vanilla ImageJ2, no wrappers or implementation needed

Fractal dimension

Fit ellipsoid

Help

  • Menu path: Help>About Plugins>BoneJ2
  • Uses PlatformService to open HTML user documentation in the default browser (doesn't use Java window like in BoneJ1)

Isosurface

Kontron IMG

  • The BoneJ1 plugin that offered support for the Kontron IMG files has been reimplemented as a part of SCIFIO
  • Works in ImageJ "out-of-the-box" when SCIFIO is enabled
  • Supports arbitrarily large images
  • Can open images by dragging and dropping
  • Location io.scif.formats

Scanco ISQ

  • The BoneJ1 plugin that offered support for the Scanco ISQ files has been reimplemented as a part of SCIFIO
  • Works in ImageJ "out-of-the-box" when SCIFIO is enabled
  • Supports arbitrarily large images
  • Can open images by dragging and dropping
  • Location io.scif.formats

Skeletonise

Stratec pQCT

  • The BoneJ1 plugin that offered support for the Stratec pQCT files has been reimplemented as a part of SCIFIO
  • Works in ImageJ "out-of-the-box" when SCIFIO is enabled
  • Supports arbitrarily large images
  • Can open images by dragging and dropping
  • When using legacy UI, doesn't work with ij-1.50e.jar or older. Tested successfully with ij-1.51g.jar.
  • Location io.scif.formats

Surface fraction

Test Images

  • Menu path: Plugins>BoneJ>Test Images
  • A set of tools for creating test images for integration tests
  • Forms its own Maven artefact, which won't be deployed in BoneJ2 user releases
  • Based on the methods in the TestDataMaker class
  • Produce ImgPlus<BitType> images which are binary images
  • Option for adding calibration
  • Option for deliberately creating bad calibration
  • Can create "hyperstacks", i.e. images with channels and/or time frames

Thickness

Triple point angles

Utilities

A list of utilities used by the wrappers and other classes in BoneJ2

ResultsInserter


Challenges and future developments

  • Duplicate plugins: some have more than one menu path. For example the Thickness plugin can be found under Plugins>BoneJ>Thickness and Analyze>Local Thickness. These paths point to the same plugin, but calls from the BoneJ submenu go through the wrappers of this project. Thus the user experience may differ.
  • Plugins need to written either in the style of ImageJ1 or ImageJ2. You can’t really mix and match the best of both worlds, or write “transitive” versions of the plugins, where only part of the functionality is written in the new way. This is because backwards compatibility in ImageJ2 is very complicated.
  • BoneJ2 and macros: ImageJ2 is moving away from the ImageJ macro language. Have to learn one of the scripting languages ImageJ2 supports, and figure out how macros are supposed to work with BoneJ2.
  • Gathering usage data: Apparently ImageJ2 offers a UsageService class, but the community reacted negatively to it. Should BoneJ2 use a modified version of the UsageReporter class from BoneJ1, or utilize UsageService once its issues have been solved?
  • Bug reporting mechanism
  • Should the run-time help for BoneJ2 inform how users should cite it or its plugins? (Should be coded as a mechanism in ImageJ2)
  • Headless mode
  • How to deal with inconsistencies between UIs?
  • SciJava UI: populating ImagePlus @Paremeters, or resolving conversion issues between composite ImagePlus / Dataset
  • ImageJ status messages with StatusService
  • Replacing calls to ResultsTable in ImageJ2?
  • Interoperation with other tools in the ecosystem
  • Display full SCIFIO image metadata to user
    • E.g. from Scanco ISQ, Kontron, Stratec pCQT...
    • Either follow up developments in ImageJ2 UI, or create a purpose built command
  • Rename wrapperPlugins artefact / package to DPL (domain presentation layer)
Clone this wiki locally