Python-二维阵列中的峰值检测

Python-二维阵列中的峰值检测,第1张

Python-二维阵列中的峰值检测

我使用局部最大滤波器检测到峰值。这是第一个4个爪子的数据集的结果:

我还在9个爪子的第二个数据集上运行了它,效果也很好。

这是你的 *** 作方式:

import numpy as npfrom scipy.ndimage.filters import maximum_filterfrom scipy.ndimage.morphology import generate_binary_structure, binary_erosionimport matplotlib.pyplot as pp#for some reason I had to reshape. Numpy ignored the shape header.paws_data = np.loadtxt("paws.txt").reshape(4,11,14)#getting a list of imagespaws = [p.squeeze() for p in np.vsplit(paws_data,4)]def detect_peaks(image):    """    Takes an image and detect the peaks usingthe local maximum filter.    Returns a boolean mask of the peaks (i.e. 1 when    the pixel's value is the neighborhood maximum, 0 otherwise)    """    # define an 8-connected neighborhood    neighborhood = generate_binary_structure(2,2)    #apply the local maximum filter; all pixel of maximal value     #in their neighborhood are set to 1    local_max = maximum_filter(image, footprint=neighborhood)==image    #local_max is a mask that contains the peaks we are     #looking for, but also the background.    #In order to isolate the peaks we must remove the background from the mask.    #we create the mask of the background    background = (image==0)    #a little technicality: we must erode the background in order to     #successfully subtract it form local_max, otherwise a line will     #appear along the background border (artifact of the local maximum filter)    eroded_background = binary_erosion(background, structure=neighborhood, border_value=1)    #we obtain the final mask, containing only peaks,     #by removing the background from the local_max mask (xor operation)    detected_peaks = local_max ^ eroded_background    return detected_peaks#applying the detection and plotting resultsfor i, paw in enumerate(paws):    detected_peaks = detect_peaks(paw)    pp.subplot(4,2,(2*i+1))    pp.imshow(paw)    pp.subplot(4,2,(2*i+2) )    pp.imshow(detected_peaks)pp.show()

你需要做的就是

scipy.ndimage.measurements.label
在蒙版上使用以标记所有不同的对象。这样你就可以分别与他们一起玩了。

请注意,该方法效果很好,因为背景不嘈杂。如果是这样,你将在背景中检测到许多其他不需要的峰。另一个重要因素是邻里的大小。如果峰大小发生变化,则需要对其进行调整(应保持大致成比例)。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5508956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存