Files
scikit-image/doc/examples/plot_find_spots.py
T
2012-08-18 23:06:08 -04:00

70 lines
1.9 KiB
Python

"""
==========
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
"""