masadcv / numpymaxflow

Numpy-based implementation of Max-flow/Min-cut (graphcut) for 2D/3D data
https://pypi.org/project/numpymaxflow/
BSD 3-Clause "New" or "Revised" License
2 stars 3 forks source link
numpy python segmentation

numpymaxflow: Max-flow/Min-cut in numpy for 2D images and 3D volumes

License

CI Build PyPI version

Numpy-based implementation of Max-flow/Min-cut based on the following paper:

If you want same functionality in PyTorch, then consider PyTorch-based implementation

Citation

If you use this code in your research, then please consider citing:

Asad, Muhammad, Lucas Fidon, and Tom Vercauteren. "ECONet: Efficient Convolutional Online Likelihood Network for Scribble-based Interactive Segmentation." Medical Imaging with Deep Learning (MIDL), 2022.

Installation instructions

pip install numpymaxflow

or

# Clone and install from github repo

$ git clone https://github.com/masadcv/numpymaxflow
$ cd numpymaxflow
$ pip install -r requirements.txt
$ python setup.py install

Example outputs

Maxflow2d

./figures/numpymaxflow_maxflow2d.png

Interactive maxflow2d

./figures/numpymaxflow_intmaxflow2d.png

figures/figure_numpymaxflow.png

Example usage

The following demonstrates a simple example showing numpymaxflow usage:

image = np.asarray(Image.open('data/image2d.png').convert('L'), np.float32)
image = np.expand_dims(image, axis=0)

prob = np.asarray(Image.open('data/image2d_prob.png'), np.float32)

lamda = 20.0
sigma = 10.0

post_proc_label = numpymaxflow.maxflow(image, prob, lamda, sigma)

For more usage examples see:

2D and 3D maxflow and interactive maxflow examples: demo_maxflow.py

References

This repository depends on the code for maxflow from latest version of OpenCV, which has been included.