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

频谱信号盲检:快速检测瀑布图中水平矩形的中心与宽度

瀑布图水平矩形快速检测方案(频谱信号盲检测)

满足0.1秒耗时的快速实现方法

针对你需要检测瀑布图中水平矩形的中心与宽度(不关注高度)的需求,推荐基于行投影+连通域合并的向量化处理方案,普通CPU上处理常规分辨率瀑布图(比如示例图尺寸)耗时可控制在0.05-0.1秒内,核心思路是利用numpy和OpenCV的矩阵运算替代循环,大幅提速:

步骤拆解

  1. 二值化预处理:将瀑布图转灰度后,用OTSU自动阈值二值化,快速区分信号矩形(前景)和背景噪声,这一步耗时仅毫秒级。
  2. 行方向区间提取:对每行二值图,用差分运算快速定位前景像素的连续起止点,得到每行的水平信号区间。
  3. 垂直区间合并:将垂直方向上连续行的相同水平区间合并,判定为同一个矩形,最终计算每个矩形的水平中心和宽度。

代码实现(Python)

import cv2
import numpy as np

def detect_horizontal_rects(image_path):
    # 读入灰度图
    img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
    # OTSU自动二值化(适配不同亮度的瀑布图)
    _, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    
    rows, cols = binary.shape
    # 对每行做差分,快速找前景区间的起止点
    padded_binary = np.pad(binary, ((0,0),(1,1)), mode='constant')
    row_diffs = np.diff(padded_binary, axis=1)
    
    rect_intervals = []
    for r in range(rows):
        # 差分结果为255的位置是前景起始点,-255是结束点
        starts = np.where(row_diffs[r] == 255)[0]
        ends = np.where(row_diffs[r] == -255)[0]
        for s, e in zip(starts, ends):
            rect_intervals.append((r, s, e))
    
    # 按水平区间分组,合并垂直方向的连续行
    interval_groups = {}
    for r, s, e in rect_intervals:
        key = (s, e)
        interval_groups.setdefault(key, []).append(r)
    
    # 生成最终结果(去重)
    unique_rects = []
    seen = set()
    for (s, e), _ in interval_groups.items():
        center_x = (s + e) / 2
        width = e - s + 1
        # 用中心和宽度做唯一标识去重
        key = (round(center_x, 2), width)
        if key not in seen:
            seen.add(key)
            unique_rects.append({"center_x": center_x, "width": width})
    
    return unique_rects

# 测试调用
if __name__ == "__main__":
    detected_rects = detect_horizontal_rects("waterfall.png")
    for idx, rect in enumerate(detected_rects, 1):
        print(f"矩形{idx}: 水平中心 = {rect['center_x']}, 宽度 = {rect['width']}")

其他替代建议

  1. 直接基于原始频谱数据处理:瀑布图本质是频谱的时间序列(每行对应一帧频谱),跳过图像转换,直接对原始频谱数据做阈值检测+连续区间合并,不仅速度更快,还能避免图像二值化带来的误差。比如对每帧频谱找高于阈值的连续频率区间,再将多帧中重叠的区间合并为信号矩形。
  2. 形态学降噪预处理:如果瀑布图存在较多噪声点,可先使用cv2.morphologyEx做水平方向的开运算(用水平结构元素),快速滤除垂直方向的噪声毛刺,不影响检测速度。
  3. 峰值聚类法:对每行频谱的峰值点做聚类,将连续频率上的峰值聚为一类,再结合时间维度的连续性判定信号区间,适合带宽较窄的信号检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:33