The purpose of ImgLib, a Generic Java Image Processing Library, is to provide an abstract framework enabling Java developers to design and implement data processing algorithms without having to consider dimensionality, type of data (e.g. byte, float, complex float), or strategies for data access (e.g. linear arrays, cells, paged cells).
This kind of programming has significant advantages over the classical way. An algorithm written once for a certain class of Type will potentially run on any compatible Type, even if it does not exist yet. Same applies for data access strategies and the number of dimensions.
We achieve this abstraction by accessing data through Iterators and Type interfaces. Iterators guarantee efficient traversal through pixels depending on whether random coordinate access is required or just all pixels have to be visited once, whether real or integer coordinates are accessed, whether coordinates outside of image boundaries are accessed or not. Type interfaces define the supported operators on pixel values (like basic algebra) and hide the underlying basic type from the algorithmic implementation.
Imglib provides interfaces to ImageJ for importing, exporting and visualizing data.
As a consequence of its generic aims, the library allows and requires a different way of designing and implementing algorithms. We will first give an overview of ImgLib and its basic design elements and will then hands-on implement a selection of simple algorithms to mediate the way of programming.
- An overview of the workshop
- The corresponding ImgLib publication in the Proceedings of the ImageJ Conference 2010
- Code examples and images including all libraries (16MB, for non-Fiji users)
- Code examples and images without libraries (4MB, for Fiji users)
- Code examples without images and libraries (15KB, for Fiji users)