/pysegbase

3D graph cut segmentation

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

About

Segmentation tools based on the graph cut algorithm. You can see video to get an idea.

Graph-Cut segmentation

please cite:

@INPROCEEDINGS{jirik2013,
    author = {Jirik, M. and Lukes, V. and Svobodova, M. and Zelezny, M.},
    title = {Image Segmentation in Medical Imaging via Graph-Cuts.},
    year = {2013},
    journal = {11th International Conference on Pattern Recognition and Image Analysis: New Information Technologies (PRIA-11-2013). Samara, Conference Proceedings },
    url = {http://www.kky.zcu.cz/en/publications/JirikMmjirik_2013_ImageSegmentationin},
}

Links

https://github.com/mjirik/pysegbase

Authors

  • Miroslav Jirik
  • Vladimir Lukes

License

New BSD License, see the LICENSE file.

Install

pip install gcopython pysegbase

See INSTALL file for more information

Run

Create output.mat file:

python pysegbase/dcmreaddata.py -i directoryWithDicomFiles --degrad 4

See data:

python pysegbase/seed_editor_qt.py -f output.mat

Make graph_cut:

python pysegbase/pycut.py -i output.mat

Use is as a library:

import numpy as np
import pysegbase.pycut as pspc

data = np.random.rand(30, 30, 30)
data[10:20, 5:15, 3:13] += 1
data = data * 30
data = data.astype(np.int16)
igc = pspc.ImageGraphCut(data, voxelsize=[1, 1, 1])
seeds = igc.interactivity()

pysegbase_screenshot

More complex example without interactivity

import numpy as np
import pysegbase.pycut as pspc
import matplotlib.pyplot as plt

# create data
data = np.random.rand(30, 30, 30)
data[10:20, 5:15, 3:13] += 1
data = data * 30
data = data.astype(np.int16)

# Make seeds
seeds = np.zeros([30,30,30])
seeds[13:17, 7:10, 5:11] = 1
seeds[0:5:, 0:10, 0:11] = 2

# Run 
igc = pspc.ImageGraphCut(data, voxelsize=[1, 1, 1])
igc.set_seeds(seeds)
igc.run()

# Show results
colormap = plt.cm.get_cmap('brg')
colormap._init()
colormap._lut[:1:,3]=0

plt.imshow(data[:, :, 10], cmap='gray') 
plt.contour(igc.segmentation[:, :,10], levels=[0.5])
plt.imshow(igc.seeds[:, :, 10], cmap=colormap, interpolation='none')
plt.show()

example_img

Configuration

    segparams = {
        # 'method':'graphcut',
        'method': 'graphcut',
        'use_boundary_penalties': False,
        'boundary_dilatation_distance': 2,
        'boundary_penalties_weight': 1,
        'modelparams': {
            'type': 'gmmsame',
            'fv_type': "fv_extern",
            'fv_extern': fv_function,
            'adaptation': 'original_data',
        }
        'mdl_stored_file': False,
    }

mdl_stored_file: if this is set, load model from file

read more about configuration