.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/segmentation/plot_random_walker_segmentation.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_segmentation_plot_random_walker_segmentation.py: ========================== Random walker segmentation ========================== The random walker algorithm [1]_ determines the segmentation of an image from a set of markers labeling several phases (2 or more). An anisotropic diffusion equation is solved with tracers initiated at the markers' position. The local diffusivity coefficient is greater if neighboring pixels have similar values, so that diffusion is difficult across high gradients. The label of each unknown pixel is attributed to the label of the known marker that has the highest probability to be reached first during this diffusion process. In this example, two phases are clearly visible, but the data are too noisy to perform the segmentation from the histogram only. We determine markers of the two phases from the extreme tails of the histogram of gray values, and use the random walker for the segmentation. .. [1] *Random walks for image segmentation*, Leo Grady, IEEE Trans. Pattern Anal. Mach. Intell. 2006 Nov; 28(11):1768-83 :DOI:`10.1109/TPAMI.2006.233` .. GENERATED FROM PYTHON SOURCE LINES 23-63 .. image-sg:: /auto_examples/segmentation/images/sphx_glr_plot_random_walker_segmentation_001.png :alt: Noisy data, Markers, Segmentation :srcset: /auto_examples/segmentation/images/sphx_glr_plot_random_walker_segmentation_001.png :class: sphx-glr-single-img .. code-block:: Python import numpy as np import matplotlib.pyplot as plt from skimage.segmentation import random_walker from skimage.data import binary_blobs from skimage.exposure import rescale_intensity import skimage rng = np.random.default_rng() # Generate noisy synthetic data data = skimage.img_as_float(binary_blobs(length=128, rng=1)) sigma = 0.35 data += rng.normal(loc=0, scale=sigma, size=data.shape) data = rescale_intensity(data, in_range=(-sigma, 1 + sigma), out_range=(-1, 1)) # The range of the binary image spans over (-1, 1). # We choose the hottest and the coldest pixels as markers. markers = np.zeros(data.shape, dtype=np.uint) markers[data < -0.95] = 1 markers[data > 0.95] = 2 # Run random walker algorithm labels = random_walker(data, markers, beta=10, mode='bf') # Plot results fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(8, 3.2), sharex=True, sharey=True) ax1.imshow(data, cmap='gray') ax1.axis('off') ax1.set_title('Noisy data') ax2.imshow(markers, cmap='magma') ax2.axis('off') ax2.set_title('Markers') ax3.imshow(labels, cmap='gray') ax3.axis('off') ax3.set_title('Segmentation') fig.tight_layout() plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.120 seconds) .. _sphx_glr_download_auto_examples_segmentation_plot_random_walker_segmentation.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/scikit-image/scikit-image/v0.24.0?filepath=notebooks/auto_examples/segmentation/plot_random_walker_segmentation.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_random_walker_segmentation.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_random_walker_segmentation.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_random_walker_segmentation.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_