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

图像ECG信号曲线提取效果不佳,如何优化改进?

ECG曲线提取优化方案

原始输入的ECG图像中,彩色信号曲线与背景网格、文字等元素重叠,原方法依赖灰度阈值和最大轮廓提取,未利用曲线的颜色特征,导致噪声残留、曲线断裂。以下是针对性优化方案:

1. 基于颜色特征精准分离曲线

ECG信号曲线具有鲜明的色彩(如红色),相比灰度阈值,利用HSV颜色空间的颜色范围掩码能更精准地分离曲线:

import numpy as np
import cv2

# 读取图像
img = cv2.imread('frame.png')
# 转换为HSV颜色空间,便于颜色筛选
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 定义目标曲线的HSV颜色范围(以红色为例,需根据实际曲线颜色调整)
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])

# 生成颜色掩码
mask1 = cv2.inRange(hsv_img, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_img, lower_red2, upper_red2)
color_mask = cv2.bitwise_or(mask1, mask2)

2. 形态学操作修复曲线并去除噪声

通过闭运算填补曲线的微小缺口,开运算清除孤立噪声点,同时保留曲线的完整性:

# 闭运算:先膨胀后腐蚀,填补曲线缺口
close_kernel = np.ones((3, 3), np.uint8)
closed_mask = cv2.morphologyEx(color_mask, cv2.MORPH_CLOSE, close_kernel, iterations=1)

# 开运算:先腐蚀后膨胀,去除小噪声点
open_kernel = np.ones((2, 2), np.uint8)
clean_mask = cv2.morphologyEx(closed_mask, cv2.MORPH_OPEN, open_kernel, iterations=1)

3. 生成清晰的曲线结果

利用清理后的掩码提取曲线,并将背景设为白色,突出信号曲线:

# 提取曲线区域
curve_region = cv2.bitwise_and(img, img, mask=clean_mask)
# 创建白色背景
white_bg = np.ones_like(img) * 255
# 合并曲线与白色背景
final_result = np.where(clean_mask[:, :, None] == 255, curve_region, white_bg)

# 展示结果
cv2.imshow('Clean ECG Curve', final_result)
cv2.waitKey(0)
cv2.destroyAllWindows()

额外优化技巧

  • 精准颜色范围获取:若不确定曲线的HSV值,可使用cv2.setMouseCallback工具,点击曲线像素获取对应的HSV参数,调整掩码范围
  • 图像预处理:若图像存在模糊,可先执行cv2.bilateralFilter(img, 9, 75, 75)进行双边滤波,在保留边缘的同时平滑噪声
  • 轮廓过滤:若仍有残留干扰,可提取掩码中的轮廓,通过cv2.contourArea过滤掉面积过大或过小的轮廓,仅保留符合ECG曲线形态的区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:07:55