2D+t and 3D+t image representation library


This library provides a representation of 4D images. Clearly, it also handles 1D, 2D and 3D images. The need for 4D images comes from the need to store time-lapse sequences of 3D images. Hence, we refer to such 3D image often as the frame and to the whole time-lapse sequence as the sequence image.

The 4D image is governed by the class Image4d<VOXEL>. It aims to provide the same support via its methods as i3d::Image3d<VOXEL> does for 3D images. In fact, this class is more or less a wrapper to Image3d owing to the memory model employed. It also provides means to load/store 3D image sequence.

Technically, 3D sequence image (= 4D image) is stored in a std::vector of i3d::Image3d. That implies that separate frames lay in the memory separately while voxels within each frame lay in a single continuous block. This setup allows for swaping some frames out of the main memory as well as for high utilization of caches when working with single frame.

The 2D sequence image (= 3D image) is supported by using the class i3d::Image3d. See the next section for more details. This model enables the user to use functions that were originally designed for the pure 3D static image whenever appropriate. Additionaly, compared to the i3d::Image3d class, the ability to load and manipulate 3D image sequences was added.

The 2D+t sequence image

The 2D "sequence" image is i3d::Image3d<VOXEL> with the following interpretation: xy plane holds 2D image at given time while z axis represents time-line. The time-line will be denoted as t axis from this time on. The time-line is to be understood as non-empty continuous integer interval where higher numbers represent later frames. The interval must not contain holes. In other words: the z-value denotes the frame number (starting from zero).

The 3D+t sequence image

The 3D "sequence" image is a vector of i3d::Image3d<VOXEL>. It provides almost all methods, apropriately modified, that one may find in the class i3d::Image3d. The 3D sequence image is implemented in the class Image4d whose documentation is the best source for details.


The 2D sequence image, which is technically nothing but differently interpreted 3D image, is stored using some of the fileformats supported by i3dcore. On the other hand, the 3D sequence image, which is a vector of 3D images, is stored as a set of files supported by i3dcore. These files obey some specified naming convention. This is explained in the documentaion of the function Image4d::ReadSequence ().

Download and license information

The library is called i4dcore. It is a property of the CBIA.

It is licensed under The GNU General Purpose License. It can be downloaded from the CBIA web pages: http://cbia.fi.muni.cz/projects/optical-flow-downloads.html .

Software dependencies

This library is written in pure C++. It is directly dependent on the i3dcore ( http://cbia.fi.muni.cz/user_dirs/i3dlib_doc/i3dcore/ ) and libraries i3dcore further depends on. See the Software map.


This library was developed and is maintained by VladimĂ­r Ulman <xulman@fi.muni.cz>.