OpticalFlow library and tools


This collection of C++ source codes consists of library routines dedicated to the computation of optical flow as well as many tools that support this aim.

The libraries

Variational optic flow methods and methods based on spatio-temporal filtering

This library aims to implement methods for the computation of optical flow on 2D and 3D images, especially on biomedical image data. We recognize two branches.

The state-of-the-art (as it was in 2006) variational optic flow methods initiated the development of this library. These were written by Honza Hubený. Refer to the page PDE-based methods for the optical flow computation for more details.

Optical flow computation methods based on the results of extensive Gabor filtering represent the second branch. We recently added the traditional Heeger's method for computation of optical flow, which is based on Gabor energies measured from time-lapse image, see the page Energy-based methods for the optical flow computation.

Methods in the first branch in the library are based solely on the i3dcore and i3dalgo libraries. Classes and functions from this branch work on just two consequent 2D or 3D images. The other optical flow methods require the i3dcore and the LinearFilters library, which is also included in this collection. Typically, 7 or more consequent 2D or 3D images are required to provide just enough temporal data for reasonable filtering responses. In general, time-lapse nD images can be interpreted as a (n+1)D image what results in 3D and 4D images for the representation of 2D+t and 3D+t, respectively. This raised the need for the i4dcore library, see the next subsection.

4D image representation

The i3dcore can handle spatial 3D images -- images based on the 3D Cartesian coordinate system regardles the dimensionality of the voxel intensity's type. The voxel values can be any of the most base types as well as of some composed types such as RGB. The later, in fact, increases the dimensionality of the image by adding the colour component. However, in this documentation when we are speaking about the image dimensionality, we always refer to the number of coordinates involved in the image represenation, irrespective the type of voxel value.

This sub-library provides the representation and some means to handle 4D images, i.e. time-lapse 3D images. Read more on the page 2D+t and 3D+t image representation library. It is maintained by Vladimír Ulman.

Fast recursive spatial Gauss and Gabor filtering methods

Owing to the optic flow methods based on spatio-temporal filtering, we also maintain the linear filtering sub-library. This one provides enhanced routines for computations of spatial filtering on 1D, 2D, 3D and 4D images (or spatio-temporal filtering on 1D+t, 2D+t and 3D+t, if you will). Specialized optimized routines for Gaussian and Gabor filtering including optimized bank filtering are available too. See the page Fast spatial image filtering.

The toolbox

Later on, this software package had absorbed variety of single-purpose tools such as

A complete list of tools can be found under the directory tools in the tab Files. This page is really nothing but the list of occasionally documentated programs. Anyway, the names are rather self-explanantory. And since every tool is focused on a single action, its usage should be relatively straightforward. Moreover, every program gives some help when called without parameters.


The libraries and the toolbox are all licensed under the GNU GPL license. Every tool and library in this collection is licensed separately what should give anyone the freedom to use only a certain piece of the collection if desired. That is, one may use every separate tool and/or some of libraries i4dcore, LinearFilters and OpticalFlow provided each library is used as a whole (and the terms of GNU GPL license are satisfied). However due to many inter-collection dependencies, we expect that the entire collection be shipped as a whole.

The license text is included and is also accessible from this documentation, see The GNU General Purpose License .

Software dependencies

The following software packages are required:

wxWidgets is mandatory only for the graphic demos.

Supported platforms

We haved succesfully compiled and tested this package on the following architectures:

The programs are written purely in C++. Supporting additional libraries were carefully selected to avoid portability issues. Hence, we hope that anyone can compile and run this piece of software on platforms other than listed.

Documentation how-to

A short information text with examples on how to write a documentation of classes, functions, etc. can be found on the page Writing a documentation.

Download and Install

The entire collection libraries and tools is available from the CBIA web pages: http://cbia.fi.muni.cz/projects/optical-flow-downloads.html .

The installation guide can be found at http://cbia.fi.muni.cz/user_dirs/of_doc/install/install.html .


This collection of libraries is a common work of Jan Hubený and Vladimír Ulman <xulman@fi.muni.cz>, former and current members of the CBIA at the Faculty of informatics, Masaryk University.