In [1]:
! apt install imagemagick
! convert --version
! pip install git+https://github.com/ColCarroll/imcmc


Reading package lists... Done
Building dependency tree       
Reading state information... Done
imagemagick is already the newest version (8:6.9.7.4+dfsg-16ubuntu6.4).
The following package was automatically installed and is no longer required:
  libnvidia-common-410
Use 'apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib
Collecting git+https://github.com/ColCarroll/imcmc
  Cloning https://github.com/ColCarroll/imcmc to /tmp/pip-req-build-sqw2hedh
Requirement already satisfied (use --upgrade to upgrade): imcmc==0.1.0 from git+https://github.com/ColCarroll/imcmc in /usr/local/lib/python3.6/dist-packages
Requirement already satisfied: matplotlib>=2.1.2 in /usr/local/lib/python3.6/dist-packages (from imcmc==0.1.0) (3.0.3)
Requirement already satisfied: Pillow>=5.0.0 in /usr/local/lib/python3.6/dist-packages (from imcmc==0.1.0) (6.0.0)
Requirement already satisfied: pymc3>=3.5 in /usr/local/lib/python3.6/dist-packages (from imcmc==0.1.0) (3.6)
Requirement already satisfied: scipy>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from imcmc==0.1.0) (1.2.1)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.1.2->imcmc==0.1.0) (2.4.0)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.1.2->imcmc==0.1.0) (2.5.3)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.1.2->imcmc==0.1.0) (0.10.0)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.1.2->imcmc==0.1.0) (1.0.1)
Requirement already satisfied: numpy>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=2.1.2->imcmc==0.1.0) (1.16.2)
Requirement already satisfied: theano>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (1.0.4)
Requirement already satisfied: pandas>=0.18.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (0.23.4)
Requirement already satisfied: patsy>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (0.5.1)
Requirement already satisfied: joblib<0.13.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (0.12.5)
Requirement already satisfied: tqdm>=4.8.4 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (4.28.1)
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (1.11.0)
Requirement already satisfied: h5py>=2.7.0 in /usr/local/lib/python3.6/dist-packages (from pymc3>=3.5->imcmc==0.1.0) (2.8.0)
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from kiwisolver>=1.0.1->matplotlib>=2.1.2->imcmc==0.1.0) (40.9.0)
Requirement already satisfied: pytz>=2011k in /usr/local/lib/python3.6/dist-packages (from pandas>=0.18.0->pymc3>=3.5->imcmc==0.1.0) (2018.9)
Building wheels for collected packages: imcmc
  Building wheel for imcmc (setup.py) ... done
  Stored in directory: /tmp/pip-ephem-wheel-cache-ozv93xba/wheels/2d/d4/e5/192b42e78de3cb502d3885dcf8cd12e48af1c3ee7ec4fab078
Successfully built imcmc

In [2]:
! ls


example.gif		    pic.jpg    pymc3.gif
imageedit_7_4676844898.png  pic.jpg.1  sample_data

In [0]:
import imcmc

In [5]:
# Image edited using https://www196.lunapic.com/editor/
image = imcmc.load_image('imageedit_7_4676844898.png', mode="L")

trace = imcmc.sample_grayscale(image, samples=5000, tune=500, nchains=10)


Sequential sampling (10 chains in 1 job)
Metropolis: [image]
100%|██████████| 5500/5500 [00:01<00:00, 4054.23it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7457.41it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7467.21it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7629.40it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7193.54it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7474.84it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7506.87it/s]
100%|██████████| 5500/5500 [00:00<00:00, 6841.02it/s]
100%|██████████| 5500/5500 [00:00<00:00, 6925.38it/s]
100%|██████████| 5500/5500 [00:00<00:00, 7459.49it/s]
The gelman-rubin statistic is larger than 1.05 for some parameters. This indicates slight problems during sampling.
The estimated number of effective samples is smaller than 200 for some parameters.

In [6]:
trace.varnames


Out[6]:
['image']

In [11]:
imcmc.plot_multitrace(
    trace, image, marker='o', alpha=0.1, ms=2, 
    colors=['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a']
);



In [12]:
imcmc.make_gif(trace, image, dpi=40, marker='', linestyle='-', alpha=0.1, filename='pymc3.gif')


Out[12]:
'pymc3.gif'

In [0]: