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

    Click :ref:`here <sphx_glr_download_auto_examples_segmentation_plot_multiotsu.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_segmentation_plot_multiotsu.py:


=======================
Multi-Otsu Thresholding
=======================

The multi-Otsu threshold [1]_ is a thresholding algorithm that is used to separate
the pixels of an input image into several different classes, each one obtained
according to the intensity of the gray levels within the image.

Multi-Otsu calculates several thresholds, determined by the number of desired
classes. The default number of classes is 3: for obtaining three classes, the
algorithm returns two threshold values. They are represented by a red line in
the histogram below.

.. [1] Liao, P-S., Chen, T-S. and Chung, P-C., "A fast algorithm for multilevel
       thresholding", Journal of Information Science and Engineering 17 (5):
       713-727, 2001. Available at:
       <http://ftp.iis.sinica.edu.tw/JISE/2001/200109_01.pdf>.




.. code-block:: pytb

    Traceback (most recent call last):
      File "/build/skimage-Lp2Zl4/skimage-0.16.2/doc/examples/segmentation/plot_multiotsu.py", line 1
        =======================
        ^
    SyntaxError: invalid syntax





.. code-block:: python

    =======================
    Multi-Otsu Thresholding
    =======================

    The multi-Otsu threshold [1]_ is a thresholding algorithm that is used to separate
    the pixels of an input image into several different classes, each one obtained
    according to the intensity of the gray levels within the image.

    Multi-Otsu calculates several thresholds, determined by the number of desired
    classes. The default number of classes is 3: for obtaining three classes, the
    algorithm returns two threshold values. They are represented by a red line in
    the histogram below.

    .. [1] Liao, P-S., Chen, T-S. and Chung, P-C., "A fast algorithm for multilevel
           thresholding", Journal of Information Science and Engineering 17 (5):
           713-727, 2001. Available at:
           <http://ftp.iis.sinica.edu.tw/JISE/2001/200109_01.pdf>.
    """

    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np

    from skimage import data
    from skimage.filters import threshold_multiotsu

    # Setting the font size for all plots.
    matplotlib.rcParams['font.size'] = 9

    # The input image.
    image = data.camera()

    # Applying multi-Otsu threshold for the default value, generating
    # three classes.
    thresholds = threshold_multiotsu(image)

    # Using the threshold values, we generate the three regions.
    regions = np.digitize(image, bins=thresholds)

    fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(10, 3.5))

    # Plotting the original image.
    ax[0].imshow(image, cmap='gray')
    ax[0].set_title('Original')
    ax[0].axis('off')

    # Plotting the histogram and the two thresholds obtained from
    # multi-Otsu.
    ax[1].hist(image.ravel(), bins=255)
    ax[1].set_title('Histogram')
    for thresh in thresholds:
        ax[1].axvline(thresh, color='r')

    # Plotting the Multi Otsu result.
    ax[2].imshow(regions, cmap='Accent')
    ax[2].set_title('Multi-Otsu result')
    ax[2].axis('off')

    plt.subplots_adjust()

    plt.show()

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


.. _sphx_glr_download_auto_examples_segmentation_plot_multiotsu.py:


.. only :: html

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



  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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


.. only:: html

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

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