Generic class for representation of 2D/3D...5D images with Matlab.
This package consists in the Image
class, that encapsulates a (possibly multidimensional)
data array together with various meta-data used to interpret the data (spatial calibration,
look-up table, grayscale extent...).
The Image class can manage up to five dimensions, corresponding to the X, Y, Z, Channels, and Time. Images are asociated to a type that indicates how the content should be interpreted: "color", "intensity", "binary", "label"...
Nearly 200 methods are provided for quickly applying image processing operators on image instances, by keeping relevant meta-data such as spatial calibration, and automatically inferring the type of the result images. A User Manual is available in pdf format.
The Image
class is at the basis of the development of the ImageM
application (http://github.com/mattools/ImageM). The MatStats package (https://github.com/mattools/matStats) may be necessary for some functions.
The following example performs a segmentation on a grayscale image. It uses computation of gradient, filtering, morphological processing, and management of label images.
% read a grayscale image
img = Image.read('coins.png');
% compute gradient as a vector image.
grad = gradient(img);
% Compute the norm of the gradient, and smooth
gradf = boxFilter(norm(grad), [5 5]);
figure; show(gradf, []);
% compute watershed after imposition of extended minima
emin = extendedMinima(gradf, 20, 4);
grad2 = imposeMinima(gradf, emin, 4);
lbl = watershed(grad2, 4);
% display binary overlay over grayscale image
show(overlay(img, lbl==0, 'g'));
% cleanup segmentation and convert to RGB image
lbl2 = killBorders(lbl);
show(label2rgb(lbl2, 'jet', 'w'));
The following example presents various ways to explore and display the content of a 3D image.
% read data, adjust contrast, and specify spatial calibration
img = adjustDynamic(Image.read('brainMRI.hdr'));
img.Spacing = [1 1 2.5];
% show as three orthogonal planes
figure; showOrthoPlanes(img, [60 80 13]); axis equal;
% show as three orthogonal slices in 3D
figure; showOrthoSlices(img, [60 80 13]); axis equal; view(3);
axis(physicalExtent(img));
% display as isosurface
figure; isosurface(gaussianFilter(img, [5 5 5], 2), 50);
axis equal; axis(physicalExtent(img)); view([145 25]); light;