From Computer Vision at Waterloo

The following code libraries are freely available for research purposes only.
Check each download for documentation, usage requirements (what to cite), and licensing information.

Soft Self-labeling for Potts Relaxations

This github repository implements the SSL. The code was implemented by Zhongwen (Rex) Zhang.


EM for Collision Cross Entropy

This github repository implements the EM. The code was implemented by Zhongwen (Rex) Zhang.


Vascular Tree Reconstruction


Regularized Losses for CNN Segmentation

This github repository implements the Regularized Lossesfor training weakly-supervised semantic segmentation. The weak-supervision are in the form of scribbles. Our weakly supervised approach achieves segmentation almost as accurate as that with full-supervision. The regularized losses are applicable to any CNN for segmentation. The library is based on Caffe and DeepLabV2. The code was implemented by Meng Tang.


Convexity Shape Prior

This library implements the TR_Convexity algorithm for binary image segmentation with convexity shape prior and L1 color separation term (see OneCut below). The library includes matlab files, C++ code/executable for maxflow/mincut and user interface for scribbles. The code was implemented by Lena Gorelick.



The LSA_TR library is a general optimization algorithm for arbitrary binary pairwise energies. It implements the LSA-TR algorithm. The library includes matlab files along with C++ code for maxflow/mincut. The code was implemented by Lena Gorelick.


OneCut with Seeds

The OneCutWithSeeds library is an interactive figure/background segmentation tool. It implements the OneCut algorithm. The library includes C++ code, executable and user interface for scribbles. The code was implemented by Lena Gorelick.



The maxflow-v3.01 library computes max-flow/min-cut on arbitrary graphs. It implements the Boykov-Kolmogorov algorithm, which tends to be is fast for computer vision problems. The B-K algorithm and its first implementation were developed while the authors were at Siemens Corporate Research, but we cannot distribute the original version. The code here was independently re-implemented by Vladimir Kolmogorov based on published materials.


Planar Graph Cut

The PlanarCut-v1.0.2 library computes max-flow/min-s-t-cut on planar graphs. It implements an efficient algorithm, which has almost linear running time. The library also provides for several easy-to-use interfaces in order to define planar graphs that are common in computer vision applications. The code was implemented by Eno Töppe and Frank R. Schmidt

Note: This code only works for planar graphs (including the terminal nodes). For more general problems, please use maxflow or gco (see below).


Multi-label optimization

The gco-v3.0 library is for optimizing multi-label energies via the α-expansion and α-β-swap algorithms. It supports energies with any combination of unary, pairwise, and label cost terms. Written in C++, it comes bundled with a MATLAB wrapper. The code was developed by Olga Veksler and Andrew Delong. alpha-expansion code in C++ and alpha-expansion matlab wrapper Andreas Mueller (U. Bonn) has written a Python wrapper for gco.

New in version 3.0older versions here

  • Label cost support in α-expansion, including costs on subsets of labels ("category costs").
  • Sparse data cost support, for when each label is feasible for only a small fraction of sites; a fast special case!
  • Adaptive cycles for α-expansion are used by default; often faster, but sometimes slower, so try both.



  • Visual C++ 2005 (VC8); GCC 4.03 (warning: not well-tested with GCC)
  • MATLAB 7.4 (R2007a) for 32-bit wrapper; MATLAB 7.6 (R2008) for 64-bit wrapper

Max-flow/min-cut for massive grids

The regionpushrelabel-v1.08 library computes max-flow/min-cut on huge N-dimensional grid-graphs in graphics, vision, and medical imaging. The C++ implementation is designed specifically for multi-core systems and graphs larger than available memory. Besides nearest-neighbour graphs, the library also supports more complex regular structures to speed up things like QPBO, cell complexes, and Ishikawa-like constructions. The public implementation was developed by Sameh Khamis who is now at the University of Maryland.



Max-flow/min-cut for shape fitting

The TouchExpand library efficiently computes globally optimal max-flow on a special type of graph. The touch-expand algorithm relies on sparse unary terms (source/sink arcs) to solve max-flow in a memory-efficient manner. Such sparse unary terms arise, for example, in shape-from-points problems. The algorithm works within a narrow band, growing it in an on-demand fashion, until a global optimum of the full problem is guaranteed. The code is by Victor Lempitsky and is based on the maxflow-v3.0 library.