Нахождение пиков изображения с помощью ndimage.maximum_filter и skimage.peak_local_max - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь найти некоторые относительные максимумы данного изображения. Я понимаю, что есть два возможных метода: первый - scipy.ndimage.maximum_filter(), второй - skimage.feature.peak_local_max().

Чтобы сравнить оба метода, я изменил пример с Skimage , показанного здесь , чтобы сравнить найденные пики.

from scipy import ndimage as ndi
import matplotlib.pyplot as plt
from skimage.feature import peak_local_max
from skimage import data, img_as_float

im = img_as_float(data.coins())

# use ndimage to find the coordinates of maximum peaks
image_max = ndi.maximum_filter(im, size=20) == im

j, i = np.where(image_max)
coordinates_2 = np.array(zip(i,j))

# use skimage to find the coordinates of local maxima
coordinates = peak_local_max(im, min_distance=20)

# display results
fig, axes = plt.subplots(1, 2, figsize=(8, 3), sharex=True, sharey=True)
ax = axes.ravel()

ax[0].imshow(im, cmap=plt.cm.gray)
ax[0].plot(coordinates_2[:, 0], coordinates_2[:, 1], 'r.')
ax[0].axis('off')
ax[0].set_title('Maximum filter')

ax[1].imshow(im, cmap=plt.cm.gray)
ax[1].autoscale(False)
ax[1].plot(coordinates[:, 1], coordinates[:, 0], 'r.')
ax[1].axis('off')
ax[1].set_title('Peak local max')

fig.tight_layout()

plt.show()

Это дает следующие пики для каждого метода: image

Я понимаю, что параметр size для maximum_filter не эквивалентен min_distance из peak_local_max, но я хотел бы знать, существует ли метод, в котором оба дают одинаковый результат. Это возможно?

Некоторые связанные с этим вопросы о stackoverflow:

Получить координаты локальных максимумов в 2D массиве выше определенного значения

Обнаружение пиков в двумерном массиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...