
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "auto_examples/cluster/plot_coin_ward_segmentation.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        Click :ref:`here <sphx_glr_download_auto_examples_cluster_plot_coin_ward_segmentation.py>`
        to download the full example code

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_cluster_plot_coin_ward_segmentation.py:


======================================================================
A demo of structured Ward hierarchical clustering on an image of coins
======================================================================

Compute the segmentation of a 2D image with Ward hierarchical
clustering. The clustering is spatially constrained in order
for each segmented region to be in one piece.

.. GENERATED FROM PYTHON SOURCE LINES 10-78



.. image-sg:: /auto_examples/cluster/images/sphx_glr_plot_coin_ward_segmentation_001.png
   :alt: plot coin ward segmentation
   :srcset: /auto_examples/cluster/images/sphx_glr_plot_coin_ward_segmentation_001.png
   :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    /build/scikit-learn-ZSX7SD/scikit-learn-0.23.2/examples/cluster/plot_coin_ward_segmentation.py:20: DeprecationWarning: Please use `gaussian_filter` from the `scipy.ndimage` namespace, the `scipy.ndimage.filters` namespace is deprecated.
      from scipy.ndimage.filters import gaussian_filter
    Compute structured hierarchical clustering...
    Elapsed time:  0.14852404594421387
    Number of pixels:  4697
    Number of clusters:  27






|

.. code-block:: default


    # Author : Vincent Michel, 2010
    #          Alexandre Gramfort, 2011
    # License: BSD 3 clause

    print(__doc__)

    import time as time

    import numpy as np
    from scipy.ndimage.filters import gaussian_filter

    import matplotlib.pyplot as plt

    import skimage
    from skimage.data import coins
    from skimage.transform import rescale

    from sklearn.feature_extraction.image import grid_to_graph
    from sklearn.cluster import AgglomerativeClustering
    from sklearn.utils.fixes import parse_version

    # these were introduced in skimage-0.14
    if parse_version(skimage.__version__) >= parse_version('0.14'):
        rescale_params = {'anti_aliasing': False, 'multichannel': False}
    else:
        rescale_params = {}

    # #############################################################################
    # Generate data
    orig_coins = coins()

    # Resize it to 20% of the original size to speed up the processing
    # Applying a Gaussian filter for smoothing prior to down-scaling
    # reduces aliasing artifacts.
    smoothened_coins = gaussian_filter(orig_coins, sigma=2)
    rescaled_coins = rescale(smoothened_coins, 0.2, mode="reflect",
                             **rescale_params)

    X = np.reshape(rescaled_coins, (-1, 1))

    # #############################################################################
    # Define the structure A of the data. Pixels connected to their neighbors.
    connectivity = grid_to_graph(*rescaled_coins.shape)

    # #############################################################################
    # Compute clustering
    print("Compute structured hierarchical clustering...")
    st = time.time()
    n_clusters = 27  # number of regions
    ward = AgglomerativeClustering(n_clusters=n_clusters, linkage='ward',
                                   connectivity=connectivity)
    ward.fit(X)
    label = np.reshape(ward.labels_, rescaled_coins.shape)
    print("Elapsed time: ", time.time() - st)
    print("Number of pixels: ", label.size)
    print("Number of clusters: ", np.unique(label).size)

    # #############################################################################
    # Plot the results on an image
    plt.figure(figsize=(5, 5))
    plt.imshow(rescaled_coins, cmap=plt.cm.gray)
    for l in range(n_clusters):
        plt.contour(label == l,
                    colors=[plt.cm.nipy_spectral(l / float(n_clusters)), ])
    plt.xticks(())
    plt.yticks(())
    plt.show()


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** ( 0 minutes  0.346 seconds)


.. _sphx_glr_download_auto_examples_cluster_plot_coin_ward_segmentation.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download sphx-glr-download-python

     :download:`Download Python source code: plot_coin_ward_segmentation.py <plot_coin_ward_segmentation.py>`



  .. container:: sphx-glr-download sphx-glr-download-jupyter

     :download:`Download Jupyter notebook: plot_coin_ward_segmentation.ipynb <plot_coin_ward_segmentation.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
