栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
在蒙版上使用以标记所有不同的对象。这样你就可以分别与他们一起玩了。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号