78 lines
4.8 KiB
Markdown
78 lines
4.8 KiB
Markdown
# 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。
|