pgmLink - A Tracking-by-Assignment Software
C++ CMake Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

pgmLink - A Tracking-by-Assignment Software

pgmLink is about tracking by assignment with probabilistic graphical models and other approaches. It is written in C++ (core) and Python (high level, optional).

A graphical user interace (GUI) for methods (1) and (2) is freely available on, with binaries for Windows/Mac/Linux.

pgmlink provides an implementation of

  1. Conservation tracking, as it is described in

    M. Schiegg, P. Hanslovsky, B. X. Kausler, L. Hufnagel, F. A. Hamprecht. Conservation Tracking. Proceedings of the IEEE International Conference on Computer Vision (ICCV 2013), 2013.

  2. Chaingraph tracking, as it is described in

    B. X. Kausler, M. Schiegg, B. Andres, M. Lindner, H. Leitte, L. Hufnagel, U. Koethe, F. A. Hamprecht. A Discrete Chain Graph Model for 3d+t Cell Tracking with High Misdetection Robustness. Proceedings of the European Conference on Computer Vision (ECCV 2012), 2012.

  3. Joint segmentation and tracking, as it is described in

    M. Schiegg*, P. Hanslovsky*, C. Haubold, U. Koethe, L. Hufnagel, F. A. Hamprecht. Graphical Model for Joint Segmentation and Tracking of Multiple Dividing Cells. Bioinformatics, in press, 2014. [* contributed equally]

    Note that the research code for this method can be found in the joint-segmentation-and-tracking branch.

Please cite the appropriate paper if you use this software. Feel free to contact us if you have any questions or suggestions.


Dependencies that have to be built and installed manually:

Dependencies that should be available as packages:

  • ann
  • boost
    • boost-serialization
    • boost-random
    • boost-program-options
    • boost-python (optional)
    • boost-test (optional)
  • armadillo
  • libxml2-dev
  • doxygen (optional)


pgmLink depends on IBM ILOG CPLEX, in particular libcplex, libilocplex and libconcert. If you are an academic you can obtain a free license from the IBM Academic Initiative.

Installation fails with an internal LaunchAnywhere application error

Some people encounter the following error during the CPLEX installation:

Launching installer...

An internal LaunchAnywhere application error has occured and this application cannot proceed. (LAX)

Stack Trace:
java.lang.IllegalArgumentException: Invalid Unicode sequence: illegal character
    at java.util.Properties.loadImpl(
    at java.util.Properties.load(
	at com.zerog.lax.LAX.<init>(DashoA10*..)
	at com.zerog.lax.LAX.main(DashoA10*..)

This installer bug happens when the installer is called from a shell with a modified appearance (in particular, a modified prompt via PS1). Install CPLEX from a unaltered shell to circumvent the bug.

CPLEX shared libraries

The CPLEX package does not provide shared versions of all required libraries, but only static variants (luckily with PIC). You can link your own shared libraries using the following commands

on Linux:

g++ -fpic -shared -Wl,-whole-archive libcplex.a -Wl,-no-whole-archive -o
g++ -fpic -shared -Wl,-whole-archive libilocplex.a -Wl,-no-whole-archive -o
g++ -fpic -shared -Wl,-whole-archive libconcert.a -Wl,-no-whole-archive -o

on Linux and

g++ -fpic -shared -Wl,-all_load libcplex.a -Wl,-noall_load -o libcplex.dylib
g++ -fpic -shared -Wl,-all_load libilocplex.a -Wl,-noall_load -o libilocplex.dylib
g++ -fpic -shared -Wl,-all_load libconcert.a -Wl,-noall_load -o libconcert.dylib

on Mac respectively.

on Mac:

g++ -fpic -shared -Wl,-all_load libcplex.a -Wl,-noall_load -o libcplex.dylib
g++ -fpic -shared -Wl,-all_load libconcert.a -Wl,-noall_load -o libconcert.dylib
g++ -fpic -shared -Wl,-all_load libilocplex.a -Wl,-noall_load -L/PATH/TO/CONCERT/LIB -L/PATH/TO/CPLEX/LIB -lconcert -lcplex -o libilocplex.dylib

How to Build

pgmLink is built with cmake:

cmake <path-to-pgmlink>/.

There are several build options which you can set - among others - with ccmake:

  • CMAKE_BUILD_TYPE: Set to RELEASE for maximal performance. DEBUG disables optimization, adds debugging symbols, and tolerates warnings (usually interpreted as errors).

  • LOGGING_LEVEL: The logging level is set at compile time. You have no performance impact due to logging at all when setting it to NO_LOGGING.

  • WITH_CHECKED_STL: Use a safety-enhanced STL (GCC only). May impact performance.

  • WITH_PYTHON: Add Python wrappers (requires boost-python).

  • WITH_TESTS: Compile unit tests. You can execute them via make test

Build instructions for armadillo

Before compilation, modify include/armadillo_bits/config.hpp to include

#define ARMA_USE_LAPACK   (needs liblapack)
#define ARMA_USE_BLAS     (needs libblas)
#define ARMA_USE_WRAPPER  (use wrapper for lapack and blas)

(uncomment if necessary).

Build instructions for mlpack:

After installation of libxml2-dev, create a softlink to libxml in your include directory. If installed globally, the appropriate command is

sudo ln -s /usr/include/libxml2/libxml /usr/include/

Build GUI

Pgmlink has been integrated into a ilastik. In particular, for both Chaingraph tracking and Conservation tracking, ilastik workflows have been implemented to ease use of these algorithms in a user-friendly software. For user documentation, please see the official ilastik homepage.

Binaries for ilastik are available on or you can build them yourself:

For this, it is enough to clone the ilastik build repository and follow the instructions in the readme there. It is essential to install CPLEX before building the binaries and to specify the CPLEX location as a build macro, as described in the said readme.