diff options
Diffstat (limited to 'docs/source/auto_examples/plot_convolutional_barycenter.rst')
-rw-r--r-- | docs/source/auto_examples/plot_convolutional_barycenter.rst | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/docs/source/auto_examples/plot_convolutional_barycenter.rst b/docs/source/auto_examples/plot_convolutional_barycenter.rst new file mode 100644 index 0000000..a28db2f --- /dev/null +++ b/docs/source/auto_examples/plot_convolutional_barycenter.rst @@ -0,0 +1,151 @@ + + +.. _sphx_glr_auto_examples_plot_convolutional_barycenter.py: + + +============================================ +Convolutional Wasserstein Barycenter example +============================================ + +This example is designed to illustrate how the Convolutional Wasserstein Barycenter +function of POT works. + + + +.. code-block:: python + + + # Author: Nicolas Courty <ncourty@irisa.fr> + # + # License: MIT License + + + import numpy as np + import pylab as pl + import ot + + + + + + + +Data preparation +---------------- + +The four distributions are constructed from 4 simple images + + + +.. code-block:: python + + + + f1 = 1 - pl.imread('../data/redcross.png')[:, :, 2] + f2 = 1 - pl.imread('../data/duck.png')[:, :, 2] + f3 = 1 - pl.imread('../data/heart.png')[:, :, 2] + f4 = 1 - pl.imread('../data/tooth.png')[:, :, 2] + + A = [] + f1 = f1 / np.sum(f1) + f2 = f2 / np.sum(f2) + f3 = f3 / np.sum(f3) + f4 = f4 / np.sum(f4) + A.append(f1) + A.append(f2) + A.append(f3) + A.append(f4) + A = np.array(A) + + nb_images = 5 + + # those are the four corners coordinates that will be interpolated by bilinear + # interpolation + v1 = np.array((1, 0, 0, 0)) + v2 = np.array((0, 1, 0, 0)) + v3 = np.array((0, 0, 1, 0)) + v4 = np.array((0, 0, 0, 1)) + + + + + + + + +Barycenter computation and visualization +---------------------------------------- + + + + +.. code-block:: python + + + pl.figure(figsize=(10, 10)) + pl.title('Convolutional Wasserstein Barycenters in POT') + cm = 'Blues' + # regularization parameter + reg = 0.004 + for i in range(nb_images): + for j in range(nb_images): + pl.subplot(nb_images, nb_images, i * nb_images + j + 1) + tx = float(i) / (nb_images - 1) + ty = float(j) / (nb_images - 1) + + # weights are constructed by bilinear interpolation + tmp1 = (1 - tx) * v1 + tx * v2 + tmp2 = (1 - tx) * v3 + tx * v4 + weights = (1 - ty) * tmp1 + ty * tmp2 + + if i == 0 and j == 0: + pl.imshow(f1, cmap=cm) + pl.axis('off') + elif i == 0 and j == (nb_images - 1): + pl.imshow(f3, cmap=cm) + pl.axis('off') + elif i == (nb_images - 1) and j == 0: + pl.imshow(f2, cmap=cm) + pl.axis('off') + elif i == (nb_images - 1) and j == (nb_images - 1): + pl.imshow(f4, cmap=cm) + pl.axis('off') + else: + # call to barycenter computation + pl.imshow(ot.bregman.convolutional_barycenter2d(A, reg, weights), cmap=cm) + pl.axis('off') + pl.show() + + + +.. image:: /auto_examples/images/sphx_glr_plot_convolutional_barycenter_001.png + :align: center + + + + +**Total running time of the script:** ( 1 minutes 11.608 seconds) + + + +.. only :: html + + .. container:: sphx-glr-footer + + + .. container:: sphx-glr-download + + :download:`Download Python source code: plot_convolutional_barycenter.py <plot_convolutional_barycenter.py>` + + + + .. container:: sphx-glr-download + + :download:`Download Jupyter notebook: plot_convolutional_barycenter.ipynb <plot_convolutional_barycenter.ipynb>` + + +.. only:: html + + .. rst-class:: sphx-glr-signature + + `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_ |