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

如何从一维信号中提取局部最大值?二进制图像信号处理场景

从一维信号中提取局部最大值的解决方案

针对你从二进制图像生成的一维信号count_non_zero,可以使用scipy.signal.find_peaks精准定位局部峰值,以下是具体实现步骤:

完整代码示例

import cv2
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks

# 原图像处理代码
pic = cv2.imread("img.png")
pic = pic[:,:,0]  # 取单通道
count_non_zero = np.sum(pic==255, axis = 1)

# 寻找局部峰值
# 参数说明:
# - height: 设定峰值最小高度,过滤低幅值噪声
# - distance: 设定峰值间最小距离,避免相邻过近的峰被重复识别
peaks, peak_properties = find_peaks(count_non_zero, height=0, distance=5)

# 筛选590~600区间内的峰值
target_peaks = peaks[(peaks >= 590) & (peaks <= 600)]
peak_heights = peak_properties['peak_heights'][(peaks >= 590) & (peaks <= 600)]

# 输出结果
print("590~600区间内的峰值对应的行数(X轴):", target_peaks)
print("对应峰值的列数(Y轴):", peak_heights)

# 可视化验证
plt.plot(count_non_zero)
plt.scatter(target_peaks, peak_heights, color='black', marker='x')
plt.show()

关键说明

  • find_peaks返回的peaks数组是峰值对应的行数索引(即X轴数值),peak_properties['peak_heights']是对应的列数计数(即Y轴数值)。
  • 可根据你的实际信号调整height和distance参数:如果峰值周围有小噪声峰,提高height阈值;如果峰值间距较近,减小distance值。
  • 筛选区间时使用numpy的布尔索引,精准锁定590到600之间的峰值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:10:42