Skip to content

Connectivity specification

Richard Domander edited this page Aug 14, 2018 · 24 revisions

The connectivity plug-in calculates various topological numbers from the given 3D binary image. First it determines the Euler characteristic (χ), which describes a topological space's shape. It's a sum of objects - handles + cavities. A handle is a hole that punctures an object, while a cavity is enclosed in it. BoneJ uses a fast and simple algorithm developed by Toriwaki & Yonekura. They showed that you can calculate the χ of the image by adding up the contribution number Δχ of each 2 * 2 * 2 voxel neighbourhood in the image. There are only 256 different combinations of foreground and background voxels a 2 * 2 * 2 neighbourhood can have. Thus you can create a lookup table which lists the Δχ of each configuration. Now calculating the χ of an image becomes simply a matter of determining the index of each little neighbourhood in the table and summing the precalculated Δχ numbers up.

If an object in an image touches its edges, its χ is different from if it didn't. BoneJ treats all objects as if they were floating in space, i.e. not touching the edges of the image. It does this by effectively adding a lining of background voxels around the image space.

The images inspected in ImageJ are often small parts of a larger object. If you wanted to calculate the χ of the whole object, you cannot do it simply by summing the χ numbers of these smaller parts. That is because if you cut an object into smaller pieces its topology changes. Thus you need to apply a correction Δχ to the χ of the parts to get an accurate χ of the whole. The Δχ number estimates the contribution of the part to the whole. In many implementations this correction is added to the χ of an image. BoneJ reports both the "naive" χ value, and the corrected Χ = χ + Δχ. See Odgaard & Gundersen for more details on the correction.

Both Euler characteristic and correction were implemented as independent ops. Calculating connectivity and connectivity density is simple enough that they can be done in the wrapper before showing the results to the user. Connectivity is simply 1 - X. It describes the number of connected structures in a network - such as trabecular bone. Connectivity density is connectivity divided by the volume of the sample. Thus it's connectivity per unit volume.

Connectivity wrapper

  • Menu path: Plugins>BoneJ>Connectivity
  • Inputs
    • ImgPlus<UnsignedByteType> inputImage
  • Outputs
    • Table<DefaultColumn<String>, String> resultsTable
  • Calls
Setup dialog
  • No setup dialog
Messages
  • If there's no image open
    • Show an error dialog
    • Abort the run
  • If the input image doesn't have three spatial dimensions
    • Show an error dialog
    • Abort the run
  • If the input image is not binary colour
    • Show an error dialog
    • Abort the run
  • If connectivity is negative
    • Show an info dialog (you shouldn't get negative numbers with bone samples unless there's more than 1 particle)

*Calibration is unknown if spatial axes have no units, have incompatible units, or are not linear

Results
  • Euler char. (χ), Corrected Euler (χ + Δχ), Connectivity, and Connectivity density or each 3D subspace in the Shared table
    • Shows the unit of the Connectivity density, e.g. mm^3 ("pixel" if uncalibrated). If axes have different units, calibrations are converted into the unit of the first spatial axis (x-axis).
Differences from BoneJ1
  • Supports hyper stacks, i.e. 3D images with channels and/or time frames