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 ilastik.org, with binaries for Windows/Mac/Linux.
pgmlink provides an implementation of
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.
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.
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:
- LEMON http://lemon.cs.elte.hu/trac/lemon
- VIGRA https://github.com/ukoethe/vigra
- openGM https://github.com/opengm/opengm
- cplex/concert http://www-01.ibm.com/software�/integration/optimization/cplex-optimizer/
- dlib http://dlib.net/
- mlpack (>= 1.0.8) http://mlpack.org/
Dependencies that should be available as packages:
- boost-python (optional)
- boost-test (optional)
- armadillo http://arma.sourceforge.net/
- doxygen (optional)
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(Properties.java:356) at java.util.Properties.load(Properties.java:288) at com.zerog.common.java.util.PropertiesUtil.loadProperties(DashoA10*..) 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
g++ -fpic -shared -Wl,-whole-archive libcplex.a -Wl,-no-whole-archive -o libcplex.so g++ -fpic -shared -Wl,-whole-archive libilocplex.a -Wl,-no-whole-archive -o libilocplex.so g++ -fpic -shared -Wl,-whole-archive libconcert.a -Wl,-no-whole-archive -o libconcert.so
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.
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>/. make
There are several build options which you can set - among others - with
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
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/
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 ilastik.org 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.