从视频估计心率
由于皮肤下血流导致的皮肤颜色改变可以在视频中捕获并用来估计心率. 尽管该变化很难被人眼识别,但可以从连续帧的皮肤像素中提取信号并进行分析.
获取视频帧和其采集时间.
In[1]:= | ![]() X |
In[2]:= | ![]() X |
确定全部画面中脸部的边界框,并突出显示脸部的第一张画面.
In[3]:= | ![]() X |
Out[3]= | ![]() |
取定边界框的正规化移动,并用中值尺寸的边界框把所有画面修整为检测到的脸部大小.
In[4]:= | ![]() X |
In[5]:= | ![]() X |
In[6]:= | ![]() X |
确定第一帧的脸部位移,通过撤销位移稳定视频.
In[7]:= | ![]() X |
In[8]:= | ![]() X |
用基于 Lab 颜色的标准皮肤分类器检测面部皮肤,确定脸部边界框内的平均皮肤概率分布.
In[9]:= | ![]() X |
In[10]:= | ![]() X |
In[11]:= | ![]() X |
Out[11]= | ![]() |
对于每张画面,从所有像素提取由上述皮肤概率分布加权的平均 Lab 颜色.
In[12]:= | ![]() X |
In[13]:= | ![]() X |
Out[13]= | ![]() |
通过搜索最少微分波动的信号,找出最优分层角度 α.
In[14]:= | ![]() X |
Out[14]= | ![]() |
提取最理想的脉冲信号,并用 0.5Hz 到 3Hz 频率的带通滤波器调整脉冲信号.
In[15]:= | ![]() X |
In[16]:= | ![]() X |
In[17]:= | ![]() X |
Out[17]= | ![]() |
用 FindPeaks 提取心跳数.
In[18]:= | ![]() X |
Out[18]= | ![]() |
In[19]:= | ![]() X |
Out[19]= | ![]() |
将画面数转化成时间并提取心跳间隔的区间.
In[20]:= | ![]() X |
Out[20]= | ![]() |
心率的中位数和其偏差.
In[21]:= | ![]() X |
Out[21]= | ![]() |
In[22]:= | ![]() X |
Out[22]= | ![]() |
In[23]:= | ![]() X |
Out[23]= | ![]() |