diff --git a/doc/examples/plot_fill_holes.py b/doc/examples/plot_fill_holes.py new file mode 100644 index 00000000..7257d2bb --- /dev/null +++ b/doc/examples/plot_fill_holes.py @@ -0,0 +1,70 @@ +""" +========== +Fill holes +========== + +In this example, we fill holes (i.e. isolated, dark spots) in an image using +morphological reconstruction by erosion. Erosion expands the minimal values of +the seed image until it encounters a mask image. Thus, the seed image and mask +image represent the maximum and minimum possible values of the reconstructed +image. + +We start with an image containing both peaks and holes: +""" +import matplotlib.pyplot as plt + +from skimage import data +from skimage.exposure import rescale_intensity + +image = data.moon() +# Rescale image intensity so that we can see dim features. +image = rescale_intensity(image, in_range=(50, 200)) + +# convenience function for plotting images +def imshow(image, **kwargs): + plt.figure(figsize=(5, 4)) + plt.imshow(image, **kwargs) + plt.axis('off') + +imshow(image) +plt.title('original image') + +""" +.. image:: PLOT2RST.current_figure + +Now we need to create the seed image, where the minima represent the starting +points for erosion. To fill holes, we initialize the seed image to the maximum +value of the original image. Along the borders, however, we use the original +values of the image. These border pixels will be the starting points for the +erosion process. We then limit the erosion by setting the mask to the values +of the original image. +""" + +import numpy as np +from skimage.morphology import reconstruction + +seed = np.copy(image) +seed[1:-1, 1:-1] = image.max() +mask = image + +filled = reconstruction(seed, mask, method='erosion') + +imshow(filled, vmin=image.min(), vmax=image.max()) +plt.title('after filling holes') + +""" +.. image:: PLOT2RST.current_figure + +As shown above, eroding inward from the edges removes holes, since (by +definition) holes are surrounded by pixels of brighter value. Finally, we can +isolate the dark regions by subtracting the reconstructed image from the +original image. +""" + +imshow(image - filled) +plt.title('dark holes') +plt.show() + +""" +.. image:: PLOT2RST.current_figure +""" diff --git a/doc/examples/plot_find_spots.py b/doc/examples/plot_find_spots.py new file mode 100644 index 00000000..ff6e2196 --- /dev/null +++ b/doc/examples/plot_find_spots.py @@ -0,0 +1,69 @@ +""" +========== +Find spots +========== + +In this example, we find bright spots in an image using morphological +reconstruction by dilation. Dilation expands the maximal values of the seed +image until it encounters a mask image. Thus, the seed image and mask image +represent the minimum and maximum possible values of the reconstructed image. + +We start with an image containing both peaks and holes: +""" +import matplotlib.pyplot as plt + +from skimage import data +from skimage.exposure import rescale_intensity + +image = data.moon() +# Rescale image intensity so that we can see dim features. +image = rescale_intensity(image, in_range=(50, 200)) + +# convenience function for plotting images +def imshow(image, **kwargs): + plt.figure(figsize=(5, 4)) + plt.imshow(image, **kwargs) + plt.axis('off') + +imshow(image) +plt.title('original image') + +""" +.. image:: PLOT2RST.current_figure + +Now we need to create the seed image, where the maxima represent the starting +points for dilation. To find spots, we initialize the seed image to the minimum +value of the original image. Along the borders, however, we use the original +values of the image. These border pixels will be the starting points for the +dilation process. We then limit the dilation by setting the mask to the values +of the original image. +""" + +import numpy as np +from skimage.morphology import reconstruction + +seed = np.copy(image) +seed[1:-1, 1:-1] = image.min() +mask = image + +rec = reconstruction(seed, mask, method='dilation') + +imshow(rec, vmin=image.min(), vmax=image.max()) +plt.title('') + +""" +.. image:: PLOT2RST.current_figure + +As shown above, dilating inward from the edges removes peaks, since (by +definition) peaks are surrounded by pixels of darker value. Finally, we can +isolate the bright spots by subtracting the reconstructed image from the +original image. +""" + +imshow(image - rec) +plt.title('"holes"') +plt.show() + +""" +.. image:: PLOT2RST.current_figure +"""