Introduction
Graph Cut library  Gc
in short  is a library focusing on combinatorial
optimization via graph cuts and its use in digital image analysis, especially for finding optimal solutions to energy minimization based discrete labeling problems such as image segmentation. This research field
has become very popular in the last decade and many interesting
algorithms are built upon graph cuts. The library is being developed in C++ and places emphasis especially on speed and low memory usage as well as clean and extensible objectoriented design.
Algorithms
The library offers implementation of several popular algorithms from
the field. Here is the list of the most interesting ones:
 Maximum flow algorithms  The library includes a wide range
of the most popular maximum flow algorithms in image processing (such as BoykovKolmogorov or PushRelabel methods) all of
which are highly optimized and exception safe. It contains implementations for both general directed graphs and grid graphs.
 Metric approximation  Implementation of Euclidean and Riemannian metric approximation via graph cuts.
 Multilabel discrete energy optimization  Implementation of popular alpha/beta swap and alpha expansion algorithms.
 Image segmentation  Implementation of the graph cut based minimization of the popular ChanVese and MumfordShah segmentation models.
Supported platforms
One of the primary goals of the library is to be crossplatform
and to avoid ugly platform or compiler specific hacks. Basically, it
should be possible to build the library on any platform using a C++ compiler
with decent support for modern standards (particularly templates). The library does not have any 3rd party library dependencies. We
have sucesfully compiled and used the library on the following
platforms:
 Microsoft Windows XP and newer, both x86 and x8664 architectures, using Visual Studio compiler (versions 2008 and 2010 tested).
 Linux, both x86 and x8664 architectures, using GCC compiler (several versions including 4.1 and above tested).
License
The library is licensed under the GNU Lesser General Public License. Its text is included with the library and is also accessible from the documentation, see The GNU General Purpose License and The GNU Lesser General Purpose License.
We also encourage you to reference this library if you use it. Finally,
note that some of the algorithms implemented in this library may have
their own licensing rules (like not being available for commercial use
or requiring citation of some publications) and some may have patents
pending. We tried to mention these in the detailed documentation of such
algorithms, but we can't guarantee this information is complete, so be
careful.
Authors
The library has been developed at Centre for Biomedical Image Analysis at the Faculty of Informatics, Masaryk University, Brno, Czech Republic. Currently it has only one author:
 Ondrej Danek, contact:
This email address is being protected from spam bots, you need JavaScript enabled to view it
, web: http://www.ondrejdanek.net
Download
Downloads are free but protected by login and password which one may obtain after filling the Registration form.
Documentation
Documentation can be generated from the sources using the Doxygen tool .
MATLAB interface
Currently the MATLAB interface is avilable for several graphcut based segmentation algorithms. A compiled binary version of the interface for 32bit and 64bit Windows can be downloaded here:
Sources are supplied together with the main library (see above). The interface has been compiled and tested in MATLAB version 2010a.
ChanVese segmentation example:
a = imread('img/cameraman.tif');
imshow(a)
an = gc_normalize_image(single(a));
seg1 = gc_chan_vese(an, 1, 10, 10);
figure; imshow(seg1)
seg2 = gc_chan_vese(an, 1, 1, 1);
figure; imshow(seg2)
Results:
MumfordShah segmentation example:
a = imread('img/fruit.tif');
imshow(a)
an = gc_normalize_image(single(a));
seg = gc_mumford_shah(an, 4, 10);
figure; imshow(seg*64)
Results:
