Files
scikit-image/doc/examples/plot_peak_local_max.py
T

56 lines
1.6 KiB
Python

"""
===============================================================================
Peak local maximum
===============================================================================
The peak local maximum return coordinates of peaks in a image. The maximum
filter is used for finding the maximum peaks in the image. It dilates the
original image and is used within peak local max function to find the
coordinates of maximum peaks, comparing the dilated image with the original.
Then, the peak local max function returns the coordinates of points where
image = dilated image.
"""
from scipy import ndimage
import matplotlib.pyplot as plt
import numpy as np
from skimage.feature import peak_local_max
from skimage import data, img_as_float
im = img_as_float(data.coins())
image = im.copy()
# The image_max is the dilation of im with a 20*20 structuring element
# It is used within peak_local_max function
image_max = ndimage.maximum_filter(image, size=20, mode='constant')
# Comparison between image_max and im to find the coordinates of maximum peaks
coordinates = peak_local_max(im, min_distance = 20)
# display results
plt.figure(figsize=(8, 3))
plt.subplot(131)
plt.imshow(im, cmap=plt.cm.gray)
plt.axis('off')
plt.title('Original')
plt.subplot(132)
plt.imshow(image_max, cmap=plt.cm.gray)
plt.axis('off')
plt.title('Maximum filter')
plt.subplot(133)
plt.imshow(im, cmap=plt.cm.gray)
a, b = im.shape
plt.plot([p[1] for p in coordinates],[p[0] for p in coordinates],'r.')
plt.xlim(0,b)
plt.ylim(a,0)
plt.axis('off')
plt.title('Peak local max')
plt.subplots_adjust(wspace=0.02, hspace=0.02, top=0.9,
bottom=0.02, left=0.02, right=0.98)
plt.show()