基于图像的指尖 PPG(iPPG)心率测量算法设计

离线指尖遮挡镜头视频的 iPPG 心率测量算法:ROI 选取、RGB 通道组合、带通滤波、Welch PSD 频域与时域峰值对照,Qt 界面可视化并导出 CSV,适合生物医学信号处理毕业设计。

评分:4.8/5.0
销量:95
发布:3/18/2026
难度:L3 高级

获取完整源码

演示视频仅作效果参考。完整源码、项目说明与运行答疑,请私聊沟通(适合毕业设计 / 课程设计 / 课设参考)。

获取完整源码观看演示视频
含项目说明文档,便于对照学习
可本地运行,适合课设演示
沟通获取后可咨询运行问题

项目封面

截图 1

项目概览

全流程覆盖视频导入、首帧 ROI 交互框选、逐帧 RGB 均值构造 PPG 序列(g/g-r/gnorm)、去趋势 Butterworth 带通、10s 滑窗心率估计与置信度评估;支持有真值 MAE/RMSE/Bland-Altman 与无真值 PSD-Peaks 一致性双口径。PyQt 界面可导出 ppg_signals.csv、hr_psd.csv 与 run_config.json,适合数字图像处理、生理信号算法类 Python 毕业设计。

项目说明

基于图像的指尖 PPG(iPPG)心率测量算法设计

本项目不接入实时摄像头,使用离线采集的指尖遮挡镜头视频/图像数据完成算法验证与演示(“基于图像”输入不变,仅把采集环节离线化,便于复现与对比测试)。

目标(全流程)

导入指尖遮挡镜头视频 → 选取 ROI → 提取 iPPG 序列(ROI 内 RGB 统计/通道组合)→ 预处理(去趋势 + 带通 + 标准化)→ 心率估计(频域 PSD 主结果 + 时域峰值对照)→ 评估(有/无真值两套口径)→ 导出结果(CSV/参数 JSON/图表)。

数据与采集建议(默认条件)

  • 数据形式mp4/avi/mov 等常见视频文件(手机拍摄均可)
  • 拍摄方式:指尖完全覆盖镜头与补光灯(优先“闪光灯常开”),尽量保持稳定
  • 帧率:优先 30 fps 或更高;程序会自动读取视频 FPS,读取失败则默认 30 fps
  • 注意:若环境光强烈变化/移动明显,会导致 iPPG 质量下降(可通过 ROI 选择更稳、缩短移动、提高光照稳定性改善)

默认实验条件

  • 采样率(FPS):视频自带 FPS 优先;失败则 30 fps
  • 心率频段:0.7–4 Hz(42–240 bpm)
  • 滤波:Butterworth 带通 3 阶 + filtfilt 零相位
  • 滑窗:10 s;步长 1 s
  • 通道组合(可做对比)g / g-r / gnorm

功能清单(对应“技术路线”)

  • 视频导入:读取离线视频、展示首帧、记录 FPS/时长
  • ROI 交互选取:在首帧拖拽矩形 ROI(指尖区域)
  • iPPG 提取:逐帧计算 ROI 内 RGB 均值,构造时间序列并做通道组合
  • 预处理:去趋势、带通滤波、标准化(输出“原始 vs 预处理后”对比)
  • 心率估计
    • 频域法(主结果):Welch PSD,取心率频段内主峰频率 (f*{max}),(HR=60f*{max})
    • 时域法(对照):峰值检测得到 RR 间期,(HR=60/\overline{RR})
    • 置信度:频域主峰能量占比、时域 RR 稳定性(用于“质量/可信度”展示)
  • 评估与分析(两套口径)
    • 有真值:对齐 ECG/脉搏氧仪心率,计算 MAE、RMSE、MAPE、相关系数、Bland–Altman
    • 无真值(默认口径):PSD 与 Peaks 的一致性(平均绝对差)、心率序列稳定性(标准差)、有效窗占比/置信度分布
  • 导出与复现:导出信号与心率 CSV、运行配置 JSON(便于复现与对比测试)

算法实现说明

1) 从图像生成 iPPG 信号

  1. 对视频逐帧读取图像 (I_t),在 ROI 区域计算 RGB 均值:
    • (r[t]=mean(R_{ROI})), (g[t]=mean(G_{ROI})), (b[t]=mean(B_{ROI}))
  2. 选择通道组合得到原始 iPPG 序列 (x[t]):
    • g:(x[t]=g[t])
    • g-r:(x[t]=g[t]-r[t])
    • gnorm:(x[t]=g[t]/(r[t]+g[t]+b[t]))

2) 预处理

  • 去趋势(线性 detrend)抑制缓慢漂移
  • 0.7–4 Hz 带通滤波保留脉搏主频成分
  • z-score 标准化增强跨视频/跨光照可比性

3) 心率估计

  • 频域法(Welch PSD):在 0.7–4 Hz 内取主峰频率 (f*{max}),输出 (HR=60f*{max})
  • 时域法(峰值检测):在带通后信号中检测峰值并约束最小峰距,计算 RR 间期平均得到 HR
  • 置信度
    • 频域:(\text{conf}=\frac{P(f*{max})}{\sum*{f \in band} P(f)})
    • 时域:RR 变异系数 (CV=\sigma*{RR}/\mu*{RR}),(\text{conf}=1-CV)(截断到 0–1)

项目结构

.
├─ main.py
├─ requirements.txt
├─ README.md
├─ core/
│  ├─ pipeline.py          # 端到端流水线:视频→PPG→预处理→心率
│  ├─ ppg_extract.py       # ROI 提取、RGB 均值、通道组合
│  ├─ preprocess.py        # 去趋势/带通/z-score
│  ├─ hr_estimate.py       # PSD 与峰值两类心率估计
│  └─ signal_quality.py    # 饱和/亮度/运动等质量特征(用于展示/扩展门控)
└─ ui/
   └─ main_window.py       # Qt 界面、绘图、导出

如何运行

安装依赖:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

启动界面:

python main.py

使用步骤

  1. 点击“打开视频…”
  2. 在“视频首帧/ROI”页拖拽黄色矩形框到指尖区域
  3. 点击“确认ROI”
  4. 点击“运行全流程”
  5. 在“信号/心率”页查看曲线与对比结果
  6. 点击“导出结果…”

导出文件说明

导出目录下默认生成:

  • ppg_signals.csvt_sec, r, g, b, ppg_raw, ppg_filt
  • hr_psd.csvt_sec, bpm_psd, conf_psd
  • hr_peaks.csvt_sec, bpm_peaks, conf_peaks
  • run_config.json:视频路径、FPS、ROI、滤波/窗口/通道组合等参数(用于复现)

评估口径建议

  • 若你最终能采到真值(脉搏氧仪或 ECG,同步时间戳):把真值序列导入后,按滑窗对齐计算 MAE/RMSE/MAPE,并给出 Bland–Altman 图与相关系数
  • 若只有离线视频:用“PSD vs Peaks 一致性(MAD)+ 稳定性(STD)+ 有效窗占比/置信度分布”作为主要评估指标,并明确属于“无真值一致性评估”

常见问题

  • 为什么心率曲线有 NaN/断点?
    • 该时间窗内信号太短、峰值不足或 PSD 频段内能量不明显,属于正常现象;可尝试更稳定的 ROI、更强的补光、或增大滑窗长度
  • 视频 FPS 读取为 0 怎么办?
    • 程序会自动回退到 30 fps;建议换一个编码更标准的视频或转码后再测试

获取完整源码

技术分类

包含内容

完整源码
项目说明文档
演示材料

适合方向

适合生物医学工程、电子信息、计算机毕业设计中 iPPG 算法、OpenCV 视频处理与 Qt 可视化方向;不依赖实时摄像头,便于离线复现实验。

关于 AI源码

AI源码 整理计算机毕业设计、课程设计向的可运行项目参考,含说明文档与演示材料。完整源码请通过联系方式沟通获取。

QQ: 861077046
邮箱: 861077046@qq.com
已帮助 95+ 位同学完成选题参考
问能不能做我的题目

相关推荐

查看全部 →
社区医疗服务可视化系统
高级

社区医疗服务可视化系统

Spring Boot+Vue2 社区医疗服务可视化管理系统,面向社区医疗机构,含患者管理、预约挂号、病历药品管理与 ECharts 数据统计,集成 Shiro 权限与百度 AI 辅助,适合 Java 医疗信息化毕业设计。

SpringBootVue2MySQL
4.876
大学生在线焦虑测试系统
高级

大学生在线焦虑测试系统

专为大学生设计的在线心理健康评估平台,Spring Boot 3+Vue3 实现焦虑测评、在线咨询与个性化建议,支持学生、医生、管理员三角色,含 JWT 认证与 ECharts 结果分析,适合 Java 心理健康类毕业设计。

SpringBootVue2MySQL
4.833
社区医院儿童健康信息管理系统
高级

社区医院儿童健康信息管理系统

Spring Boot 3+Vue 3 社区医院儿童健康信息管理系统,支持儿童档案、健康测评、疫苗预约与在线咨询,JWT 认证含管理员、医生与普通用户三角色,适合 Java 医疗健康类毕业设计。

SpringBootVue2MySQL
4.827
AI在线问诊平台
高级

AI在线问诊平台

基于若依框架的 AI 在线问诊平台,管理端、医生端与患者端三端分离,支持 WebSocket 即时聊天、AI 辅助诊断与 ECharts 数据可视化,Spring Boot+Vue2 技术栈,适合 Java 医疗 AI 毕业设计。

SpringBootVue2MySQL
4.892
社区医院儿童健康信息管理系统(java)
高级

社区医院儿童健康信息管理系统(java)

Spring Boot 3+Vue3 社区医院儿童健康档案管理平台,含儿童档案录入、健康数据统计、就诊记录、疫苗接种与成长曲线追踪,JWT 认证与医生工作台,适合 Java 社区医疗类毕业设计。

SpringBootVue2MySQL
4.836
心理健康教育小程序
进阶

心理健康教育小程序

微信小程序原生开发的心理健康教育与自助服务系统,涵盖情绪管理、压力应对、正念冥想、心理测评与自助工具箱等模块,纯前端 Mock 数据实现,适合心理健康主题毕业设计。

小程序
4.854