tjy/RespirationRate/README.md

78 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Video-based Respiration Rate Detection Algorithm
该项目是一个基于视频图像的呼吸频率检测算法的实现。它可以从视频中提取人体的呼吸曲线并计算呼吸频率。该算法使用了光流法、相关性引导的光流法、滤波、归一化等技术来提高检测精度。同时它提供了多种呼吸频率计算方法供选择包括FFT、Peak Counting、Crossing Point和Negative Feedback Crossover Point等。
## 文件结构
- `params.py`: 包含所有可配置的参数及其默认值。
- `RespirationRateDetector.py`: 实现了呼吸频率检测算法的核心逻辑。
- `demo.py`: 演示程序,从摄像头读取视频流并实时显示呼吸曲线和呼吸频率。
## 使用方法
1. 克隆该项目到本地。
2. 安装所需的Python依赖包OpenCV、NumPy、SciPy、Matplotlib。
3. 根据需要在`params.py`中调整参数设置。
4. 运行`demo.py`启动演示程序。
程序将打开一个窗口显示从摄像头捕获的视频流,并在另一个窗口中绘制实时呼吸曲线。同时,它还会在视频窗口上显示使用不同方法计算得到的呼吸频率值。
## 核心算法
该算法的核心步骤包括:
1. **光流法**:使用光流法跟踪视频中的特征点,并计算这些特征点的运动幅度和。
2. **相关性引导的光流法**:通过计算每个特征点与呼吸曲线的相关性,筛选出与呼吸相关的特征点,以提高检测精度。
3. **滤波**:对原始呼吸曲线进行带通滤波,去除高频和低频噪声。
4. **归一化**:将滤波后的呼吸曲线进行归一化处理。
5. **呼吸频率计算**使用FFT、Peak Counting、Crossing Point和Negative Feedback Crossover Point等多种方法计算呼吸频率。
## 参数说明
`params.py`中包含了该算法的所有可配置参数及其默认值。主要参数包括:
- `--video-path`: 输入视频文件的路径。默认值为'./1.mp4'。
- `--FSS`: 是否启用特征点选择策略(Feature Point Selection Strategy)。默认为True。
- `--CGOF`: 是否启用相关性引导的光流法(Correlation-Guided Optical Flow Method)。默认为True。
- `--filter`: 是否对呼吸曲线进行滤波。默认为True。
- `--Normalization`: 是否对呼吸曲线进行归一化。默认为True。
- `--RR_Evaluation`: 是否计算呼吸频率。默认为True。
其他参数控制光流法、特征点选择策略、滤波和呼吸频率计算的具体设置。
- `--OFP-maxCorners`: 光流法中检测特征点的最大数量。默认为100。
- `--OFP-qualityLevel`: 光流法中特征点检测的质量等级。默认为0.1。
- `--OFP-minDistance`: 光流法中特征点之间的最小距离。默认为7。
- `--OFP-mask`: 光流法中使用的mask,用于指定感兴趣区域。默认为None。
- `--OFP-QualityLevelRV`: 当无法检测到足够数量的特征点时,降低质量等级的步长值。默认为0.05。
- `--OFP-winSize`: 光流法中金字塔Lucas-Kanade光流估计器的窗口大小。默认为(15,15)。
- `--OFP-maxLevel`: 光流法中的金字塔层数。默认为2。
- `--FSS-switch`: 是否启用特征点选择策略。
- `--FSS-maxCorners`: 特征点选择策略中检测特征点的最大数量。默认为100。
- `--FSS-qualityLevel`: 特征点选择策略中特征点检测的质量等级。默认为0.1。
- `--FSS-minDistance`: 特征点选择策略中特征点之间的最小距离。默认为7。
- `--FSS-mask`: 特征点选择策略中使用的mask。默认为None。
- `--FSS-QualityLevelRV`: 当无法检测到足够数量的特征点时,降低质量等级的步长值。默认为0.05。
- `--FSS-FPN`: 特征点选择策略中要选择的特征点数量。默认为5。
- `--CGOF-switch`: 是否启用相关性引导的光流法。
- `--Filter-switch`: 是否对呼吸曲线进行滤波。
- `--Filter-type`: 滤波器的类型,可选'lowpass'、'highpass'、'bandpass'和'bandstop'。默认为'bandpass'。
- `--Filter-order`: 滤波器的阶数。默认为3。
- `--Filter-LowPass`: 带通滤波器的低通频率(次/分钟)。默认为2。
- `--Filter-HighPass`: 带通滤波器的高通频率(次/分钟)。默认为40。
- `--Normalization-switch`: 是否对呼吸曲线进行归一化。
- `--RR-switch`: 是否计算呼吸频率。
- `--RR-Algorithm-PC-Height`: Peak Counting算法中使用的峰值高度阈值。默认为None。
- `--RR-Algorithm-PC-Threshold`: Peak Counting算法中使用的峰值门限。默认为None。
- `--RR-Algorithm-PC-MaxRR`: Peak Counting算法中呼吸频率的最大值(次/分钟)。默认为45。
- `--RR-Algorithm-CP-shfit_distance`: Crossing Point算法中使用的移位距离。默认为15。
- `--RR-Algorithm-NFCP-shfit_distance`: Negative Feedback Crossover Point算法中使用的移位距离。默认为15。
- `--RR-Algorithm-NFCP-qualityLevel`: Negative Feedback Crossover Point算法中使用的质量等级。默认为0.6。