You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.signal.find_peaks prominence参数未检测全部符合条件峰值的问题排查

问题分析与解决

首先你对prominence(突出度)的理解确实有偏差:它的计算不是以信号左边界的最低值为基准,而是峰值到其左右两侧“最低鞍点”的垂直距离的最小值。所谓鞍点,是指从峰值向左/右移动时,第一个比当前峰值低的“局部最低点”;如果一直到信号端点都没有更低的点,就用端点值作为基准。

你的代码细节

你传入的是-blur[200,:],相当于把原灰度信号反转了——原信号的低谷变成了反转后的峰值,所以你设置的prominence=20,实际是要求反转后的峰值(原信号的谷)的突出度≥20,也就是原信号中该位置的灰度值要比左右鞍点低至少20。

为什么目标峰值没被检测到?

你圈出的那个峰值,实际计算出的突出度大概率没达到20。可以用以下代码验证每个候选峰值的真实突出度:

import scipy.signal as signal

# 先获取所有潜在峰值(不限制prominence)
all_peaks, _ = signal.find_peaks(-blur[200,:])
# 计算每个峰值的突出度
prominences = signal.peak_prominences(-blur[200,:], all_peaks)[0]

# 输出每个峰值的位置和对应突出度
for peak_pos, prom in zip(all_peaks, prominences):
    print(f"位置 {peak_pos} 的峰值,突出度为 {round(prom, 2)}")

运行后找到你圈出的峰值对应的位置,就能看到它的实际突出度是否满足≥20的要求。

补充说明

如果确实需要以左边界为基准计算“突出度”,可以手动计算每个峰值与左边界最低值的差值,再筛选符合条件的峰值,而不是依赖find_peaks的prominence参数。

内容的提问来源于stack exchange,提问作者Larsito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:22:17