[ImageJ-devel] ImgLib2 Release Announcement

Tobias Pietzsch pietzsch at mpi-cbg.de
Tue Dec 16 08:12:39 CST 2014

Hi everyone,

We are happy to announce the first stable release version of the ImgLib2 core library!

This release was a central goal of the recent hackathon at LOCI in Madison, during the week of October 13 - 17.

The ImgLib2 core library is now available on Maven Central [1], and the source code for all ImgLib2 projects is accessible on GitHub [2].

Like the SciJava and ImageJ2 projects, ImgLib2 releases now follow the “semantic versioning” scheme [3]. Also, the project and git repository structure has changed. The main imglib repository has been split into multiple repositories, named consistently with the artifact names and java package prefixes [4]. Projects are now coupled using non-SNAPSHOT versions, in order to achieve reproducible builds [5].

For further technical details on project structure, see http://imagej.net/Architecture

Before coming out of beta, we have made several last-minute changes to the
  • All @Deprecated methods and classes have been removed.
  • All metadata handling (formerly imglib2-meta subproject) is being moved
    into imagej-common. From ImgLib2 core, the classes AnnotatedSpace,
    AbstractAnnotatedSpace, and Axis where moved to imagej-common.
  • The current ROI representation wss not considered stable enough to be
    included in a release. The net.imglib2.roi and net.imglib2.labeling
    packages where moved to the new imglib2-roi subproject which will remain
    in beta for now.
  • The net.imglib2.multithreading package was moved to imglib2-algorithm and
  • We merged work by Albert Cardona and Stephan Preibisch on "fractional"
    types. ImgLib2 NativeTypes map pixels into primitive arrays, where often
    the mapping is one-to-one. For example, a UnsignedByteType pixel maps into
    one byte of a primitive byte[] array. With fractional types this mapping
    maybe non-integral, for example Unsigned12BitType maps pixels into a long[]
    array, where each pixel occupies 12/64 longs.
  • Superfluous generic parameters were removed from Projector<A,B> interface
    which is now only Projector. Projector implementations were fixed
  • Several classes were renamed or moved to more suitable places:
     ◦ Extended[Real]RandomAccessibleInterval moved to the net.imglib2.view
     ◦ RandomAccessibleOnRealRandomAccessible moved to the net.imglib2.view
     ◦ Binning moved to the net.imglib2.util package.
     ◦ The contents of package net.imglib2.collection (KDTree etc) moved to the
       net.imglib2 package.
     ◦ net.imglib2.concatenate.Util was renamed to
     ◦ Bounded moved to the net.imglib2.outofbounds package.
     ◦ The class NearestNeighborInterpolator from package
       net.imglib2.interpolation.neighborsearch was renamed to
       NearestNeighborSearchInterpolator (to avoid confusion with the
     ◦ The Pair interface moved to the net.imglib2.util package.
  • The net.imglib2.util.Util class was cleaned up:
     ◦ Methods getTypeFromRandomAccess() and getTypeFromRealRandomAccess() were
       removed. We considered them too dangerous because the RandomAccess may
       be pointing to invalid position.
     ◦ Unused methods setCoordinateRecursive() and getRecursiveCoordinates()
       were removed.
     ◦ Some variants of computeLength() and computeDistance() were removed. Use
       methods distance() and length() from net.imglib2.util.LinAlgHelpers
     ◦ Methods computeMedian(), computeAverage(), etc. were renamed to
       median(), average(), etc.
  • These unused classes were removed:
     ◦ IterableIntervalSubsetT
     ◦ Triple
     ◦ RealPositionableFloorPositionable
     ◦ RealPositionableRoundPositionable
     ◦ ImgTranslationAdapter
  • Packages net.imglib2.img.constant and net.imglib2.sampler.special were
    removed (ConstantImg, ConstantRandomAccessible, etc). Similar functionality
    can now be achieved through the net.imglib2.util.ConstantUtils class and

All ImgLib2 subprojects have been adapted to these changes and released (in some cases as new beta versions).

One thing still pending is to upload these new ImgLib2 releases to the ImageJ and Fiji update sites, making them available to users of ImageJ and Fiji. This change has been rather involved, since there is a lot of downstream code affected by the API changes. But we expect to make the new ImgLib2 available to users before the end of the calendar year. Stay tuned for further announcements!

Best regards from the ImgLib2 release team,
Tobias Pietzsch
Stephan Saalfeld
Stephan Preibisch
Curtis Rueden
Johannes Schindelin
Mark Hiner

[1] http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.imglib2%22
[2] https://github.com/imglib
[3] http://imagej.net/Architecture#Versioning
[4] http://imagej.net/Architecture#Git_repositories
[5] http://imagej.net/Architecture#Reproducible_builds

More information about the ImageJ-devel mailing list