Striped Extent File Library for Volume Images

Large 3D volumes need to be segmented into smaller size subvolumes both for ensuring efficient access to the data and for storing the data on multiple disks. This is especially useful for large medical 3D volume data sets such as CT, MRI, or cryosections. We propose a striped file library which distributes the subvolumes onto multiple disks (multiple subfiles). The dataset is split into regular cubic subvolumes called extents, which are distributed onto the available subfiles.

To further improve data access speed, the data is stored at multiple resolutions in the subfiles, so that extents with a resolution near to the target display resolution can be read.

The data contained in the subfiles requires attached metadata, such as its physical resolution, image size, and component files. This metadata is stored in a standard XML file for optimal readability and ease of maintenance. Subfiles and associated metadata are denominated Extent Files.

The library is provided under the GPL. Currently, the source code is provided with project files for Windows platforms. This library is used for the data storage on our Visible Human Server.

Downloads

The libraries are available in their full version with sources from the following locations:

Compilation and test

To compile and test the library, it is recommended to download all three packages above and to unzip them to the same directory. The provided workspace contains three projects. The convert program must be compiled first, since it will be required to convert the provided sample data to an extent file. Before starting the conversion, the provided vhjpeg.xml file must be modified to contain appropriate paths for your machine. The convert program takes the name of the xml descriptors for the datasets as arguments.

Once the dataset is converted, you can test the other program, cubetest, which will extract data from the extent file using three different possibilities offered by the library: reading a subset of the volume data into memory, accessing individual voxels, and arbitrary slice extraction. The slice extractor is based on the sample principles as the one used on our Visible Human Server, although this version has been optimized for code size and clarity, at the expense of severe performance loss.