使用具有突出参数的scipy.signal.find_peaks方法时,并非所有峰都能检测到

g52tjvyc  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(148)

我尝试使用scipy.signal.find_peaks方法及其prominence参数来检测具有特定突出度的峰。但该方法似乎只检测满足条件的某些峰,而不是所有峰。图像中显示了信号和检测到的峰(红色十字)。根据我的理解,我已经圈出了一个满足条件的峰,但find_peaks方法没有检测到它。有人能给我解释一下,如果我只是误解了突出的概念,或者问题可能是什么?

这是我用来检测峰值的代码:

# load image file and apply blur filter

image = cv2.imread(file)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.bilateralFilter(gray,9,75,75)

# detect edges in grayscale value for one horizontal line

peaks,_ = signal.find_peaks(-blur[200,:], prominence=20)
plt.plot(-blur[200,:])
plt.plot(peaks,-blur[200,:][peaks],'rx')
plt.show()

我希望被包围的峰值也满足突出参数,因为参考将是峰值和信号左边界之间的最低值。

dl5txlt9

dl5txlt91#

通过在峰的**两侧而不是左侧找到碱基来确定突出度。在所讨论的峰值的右侧,你很快就达到了比峰值更高的点。因此,峰的底部是您的峰和峰右侧的高点之间的低点。结果,峰值具有非常小的突出。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.peak_prominences.html
计算峰值突出度的策略:
1.从当前峰值向左和向右延伸一条水平线,直到该线到达窗口边界(参见wlen)或在更高峰值的斜率处再次与信号相交。具有相同高度的峰的交点将被忽略。
1.在每一侧上,在上面定义的间隔内找到最小信号值。这些点是山峰的底部。
1.两个底中较高的一个标志着山峰的最低轮廓线。然后可以将突出度计算为峰高度本身与其最低轮廓线之间的垂直差。

相关问题