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

.. only:: html

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

        :ref:`Go to the end <sphx_glr_download_auto_examples_color_exposure_plot_ihc_color_separation.py>`
        to download the full example code.

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

.. _sphx_glr_auto_examples_color_exposure_plot_ihc_color_separation.py:


===============================================
Separate colors in immunohistochemical staining
===============================================

Color deconvolution consists in the separation of features by their colors.

In this example we separate the immunohistochemical (IHC) staining from the
hematoxylin counterstaining. The separation is achieved with the method
described in [1]_ and known as "color deconvolution".

The IHC staining expression of the FHL2 protein is here revealed with
diaminobenzidine (DAB) which gives a brown color.


.. [1] A. C. Ruifrok and D. A. Johnston, "Quantification of histochemical
       staining by color deconvolution," Analytical and quantitative
       cytology and histology / the International Academy of Cytology [and]
       American Society of Cytology, vol. 23, no. 4, pp. 291-9, Aug. 2001.
       PMID: 11531144

.. GENERATED FROM PYTHON SOURCE LINES 23-64

.. code-block:: Python


    import numpy as np
    import matplotlib.pyplot as plt

    from skimage import data
    from skimage.color import rgb2hed, hed2rgb

    # Example IHC image
    ihc_rgb = data.immunohistochemistry()

    # Separate the stains from the IHC image
    ihc_hed = rgb2hed(ihc_rgb)

    # Create an RGB image for each of the stains
    null = np.zeros_like(ihc_hed[:, :, 0])
    ihc_h = hed2rgb(np.stack((ihc_hed[:, :, 0], null, null), axis=-1))
    ihc_e = hed2rgb(np.stack((null, ihc_hed[:, :, 1], null), axis=-1))
    ihc_d = hed2rgb(np.stack((null, null, ihc_hed[:, :, 2]), axis=-1))

    # Display
    fig, axes = plt.subplots(2, 2, figsize=(7, 6), sharex=True, sharey=True)
    ax = axes.ravel()

    ax[0].imshow(ihc_rgb)
    ax[0].set_title("Original image")

    ax[1].imshow(ihc_h)
    ax[1].set_title("Hematoxylin")

    ax[2].imshow(ihc_e)
    ax[2].set_title("Eosin")  # Note that there is no Eosin stain in this image

    ax[3].imshow(ihc_d)
    ax[3].set_title("DAB")

    for a in ax.ravel():
        a.axis('off')

    fig.tight_layout()





.. image-sg:: /auto_examples/color_exposure/images/sphx_glr_plot_ihc_color_separation_001.png
   :alt: Original image, Hematoxylin, Eosin, DAB
   :srcset: /auto_examples/color_exposure/images/sphx_glr_plot_ihc_color_separation_001.png
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 65-66

Now we can easily manipulate the hematoxylin and DAB channels:

.. GENERATED FROM PYTHON SOURCE LINES 66-91

.. code-block:: Python


    from skimage.exposure import rescale_intensity

    # Rescale hematoxylin and DAB channels and give them a fluorescence look
    h = rescale_intensity(
        ihc_hed[:, :, 0],
        out_range=(0, 1),
        in_range=(0, np.percentile(ihc_hed[:, :, 0], 99)),
    )
    d = rescale_intensity(
        ihc_hed[:, :, 2],
        out_range=(0, 1),
        in_range=(0, np.percentile(ihc_hed[:, :, 2], 99)),
    )

    # Cast the two channels into an RGB image, as the blue and green channels
    # respectively
    zdh = np.dstack((null, d, h))

    fig = plt.figure()
    axis = plt.subplot(1, 1, 1, sharex=ax[0], sharey=ax[0])
    axis.imshow(zdh)
    axis.set_title('Stain-separated image (rescaled)')
    axis.axis('off')
    plt.show()



.. image-sg:: /auto_examples/color_exposure/images/sphx_glr_plot_ihc_color_separation_002.png
   :alt: Stain-separated image (rescaled)
   :srcset: /auto_examples/color_exposure/images/sphx_glr_plot_ihc_color_separation_002.png
   :class: sphx-glr-single-img






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

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


.. _sphx_glr_download_auto_examples_color_exposure_plot_ihc_color_separation.py:

.. only:: html

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

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

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

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

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

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_ihc_color_separation.zip <plot_ihc_color_separation.zip>`


.. only:: html

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

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