使用ndimage.maximum_filter和skimage.peak_local_max找到图像峰值。
使用ndimage.maximum_filter和skimage.peak_local_max找到图像峰值。
我试图找到给定图像的一些相对最大值。我知道有两种可能的方法,第一种是使用scipy.ndimage.maximum_filter()
,第二种是使用skimage.feature.peak_local_max()
。\n为了比较这两种方法,我修改了一个来自skimage的示例,在这里展示,以便比较找到的峰值。\n
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()) # 使用ndimage找到最大峰值的坐标 image_max = ndi.maximum_filter(im, size=20) == im j, i = np.where(image_max) coordinates_2 = np.array(zip(i,j)) # 使用skimage找到局部最大值的坐标 coordinates = peak_local_max(im, min_distance=20) # 显示结果 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('最大值滤波') 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('局部最大值') fig.tight_layout() plt.show()
\n这给出了每种方法的峰值:\n\n我知道maximum_filter
的size
参数与peak_local_max
的min_distance
参数不等效,但我想知道是否有一种方法可以使两者得到相同的结果。这可能吗?\n一些相关的stackoverflow问题:\n获取大于某个值的二维数组的局部最大值的坐标\n在二维数组中检测峰值