APP下载

基于CEEMDAN-FastICA算法的非接触心率检测

2021-05-19凌六一汪晴晴周孟然

凌六一,汪晴晴,周孟然

(1.安徽理工大学电气与信息工程学院,安徽 淮南 232001;2.安徽理工大学人工智能学院,安徽 淮南 232001)

人的心率(heart rate,HR),即心脏跳动的频率,是临床诊断和生命体征监测中最重要的参数之一。人类心率一般为45~120次/min,传统的接触式心率检测要求患者佩戴胸带或电极,远程光电容积描记法(remote photolethysmogracphic,rPPG)使用摄像机就可以监测心率。然而,rPPG技术的最大问题是噪声干扰,测量过程中照明变化、相机内在噪声以及被测者的运动,包括头部运动、面部表情、眨眼和说话等,这些都会给心率检测带来一定误差。

一直以来,从视频中提取心率经常成为顶级计算机视觉会议的主题,学者们致力于通过各种方法提高心率检测的准确性。例如,文献[7]将Kanade-Lucas-Tomasi算法跟踪识别到的人脸视频图像转换到Cg颜色通道来提取PPG信号,然后用Morlet复小波作为母波来提取随时间变化的心率参数,实验结果表明该方法能够有效减少运动伪影等噪声干扰的影响;文献[8]利用经验模态分解(Ensemble Empirical Mode Decomposition,EEMD)提取心率信号,该方法降低了环境光变化的影响;文献[9]先对面部感兴趣区域的绿色通道去趋势化,然后使用联合盲源分离和EEMD去除视频中光照变化噪声,实验结果表明该方法有效减小了照明变化对心率测量的影响,然而他们所提方法的前提是假设面部ROI和背景有相同的光照变化;为避免光照影响,文献[10]利用红外摄像头结合短时傅里叶变换提取心率,实验表明该方法是可行的,但是如何去除运动伪影仍需进一步研究;文献[11]使用无人机提取rPPG信号,采用自适应噪声完备集合经验模态分解(complete ensemble empirical mode decomposition with adaptive noise,CEEMDAN)以及典型相关分析结合的方法有效减小了环境光和运动伪迹对视频心率提取的影响。

针对照明变化、相机内部噪声等噪声影响,本文提出CEEMDAN与快速独立成分分析(fast independent component analysis ,FastICA)相结合的方法对心率源信号进行去噪来提取人体心率。通过与参考仪器检测结果对比,并进行Bland-Altman一致性分析以验证本文所提方法的有效性和准确性。

1 检测原理与流程

rPPG原理是基于每次心跳带来的血液流动会在人体皮肤组织的微血管中形成周期性变化,当光线照射到皮肤时,皮肤对光线的吸收会有所不同,从而引起皮肤颜色的变化,这个变化可以由摄像机捕捉,因此通过检测被测者面部连续的视觉图像来提取人体的生理参数。

基于rPPG心率检测流程由五个步骤组成,如图1所示。第一步,利用摄像头采集被测者正面视频,对每一帧图像进行基于Python的Dlib库人脸检测,并且利用68个关键特征点定位到所需要的感兴趣区域(Region of Interest,ROI);第二步,计算每一帧图像ROI中红色(Red,R)、绿色(Green,G)、蓝色(Blue,B)三个通道像素平均值,得到三通道的源信号;第三步,通过预处理对源信号进行处理,其中预处理包括对数据进行三次多项式插值、去趋势化、标准化和带通滤波;第四步,通过CEEMDAN对信号进行模态分解,选择合适频段内的固有模式函数(Intrinsic Mode Function,IMF)重构信号,进行带通滤波。然后对信号进行FastICA盲源分离,再进行带通滤波,获取去噪后的信号;第五步,对去噪后的信号进行快速傅里叶变换,选择频谱图中最高功率对应的频率带入公式计算出心率。

图1 基于CEEMDAN-FastICA算法的心率检测算法步骤

2 方法及实现

2.1 源信号获取

对于非接触式心率检测而言,大部分源信号是通过人脸检测获得ROI并进行处理后得到。ROI是指含有心率源信号的像素区域,检测ROI是为了找到最能反映出心率周期性变化的皮肤区域,因此,选择合适的ROI对 rPPG信号质量有重要影响。考虑到人眼眨动、女生额头刘海遮挡以及人脸运动伪迹等影响,本文选择脸颊和鼻子连通区域作为ROI。利用基于Python的Dlib库实现人脸检测,然后对人脸68个关键点进行定位,获取眼睛、鼻子、嘴巴等关键部位的位置信息,根据这些位置信息可以拟合出脸部的多边形区域,如图2所示,黄色多边形内部为本文确定的某测试者的ROI。

图2 某测试者的面部ROI

得到ROI后,通过将ROI进行红色(R)、绿色(G)、蓝色(B)三通道基色分离,记录各通道像素点的变化,即可得到包含心率的源信号。对ROI图片的RGB三通道按照公式(1)分别进行像素平均操作,假设ROI区域包含

M

×

N

个像素点,则第

n

帧的平均像素值

P

(1)

其中,

X

(

x

,

y

)是像素点(

x

,

y

)在第

n

帧的颜色强度值。对帧频为30fps,时长为26s即780帧的视频图片进行像素平均操作,得到RGB三基色通道一维像素均值源信号,如图3所示。对每个基色通道的源信号进一步进行处理,可以从中提取出心率信息。

图3 RGB通道像素均值源信号

2.2 基于CEEMDAN-FastICA算法的信号去噪

1)自适应噪声完备集合经验模态分解 经验模态分解(Empirical Mode Decomposition,EMD)是一种针对非平稳信号处理的时频域分析方法,通过EMD分解可得到一系列不同频段的IMF,但是EMD存在模态混叠和端点效应会影响分解效果,EEMD则通过添加白噪声来解决EMD带来的模态混叠的问题,然而EEMD由于多次添加不同幅值的白噪声导致信号中残留噪声会使信号出现误差。CEEMDAN则通过添加自适应的白噪声弥补了EEMD带来的误差问题,以及减轻了EMD的模态混叠现象。

添加满足

N

(0,1)分布的高斯白噪声

ω

[

n

](

i

=1,…,I,I为添加噪声的次数)到信号

y

[

n

]中,EMD(·)是对第

j

个模态进行EMD分解,则CEEMDAN具体步骤如下Step1原始信号为

y

[

n

]+

β

ω

[

n

],其中

β

是噪声标准偏差,在本文中

β

=0.2,对原始信号进行EMD分解得到第一个模态

(2)

得到第一个剩余分量

r

[

n

]=

y

[

n

]-IMF[

n

]

(3)

Step2第二个模态为

β

EMD(

ω

[

n

])))

(4)

则第

k

个剩余分量为

r

[

n

]=

r

-1[

n

]-IMF[

n

]

(5)

Step3第(

k

+1)个IMF为

β

EMD(

ω

[

n

])))

(6)

Step4一直重复step3~4直到剩余分量为单调函数,即不满足EMD条件时,此时剩余分量为

(7)

则原始信号表示为

(8)

在进行CEEMDAN分解之前,为了便于提取心率信号,要对源信号进行预处理,预处理包括三次多项式插值、去趋势化、标准化和带通滤波。预处理之后,通过CEEMDAN将信号分解为具有瞬时振幅和频率数据的IMF,每个通道信号分解得到11个IMF,图4给出了某测试者视频图像G通道信号分解结果。分解获得的IMF的频率由高到低顺序排列,对IMF做快速傅里叶变换,得到信号频谱,根据频谱得到每个IMF的频谱峰值对应频率如表1所示。

图4 某测试者视频图像G通道信号经过CEEMDAN得到的11个IMF

表1 IMF的频谱峰值频率 Hz

人类的心率信号一般在0.7~3Hz(对应心率42~180bpm)范围内,为了最大程度保留含有心率成分的源信号,选取IMF模态4、5、6重构信号,重构信号

Y

[

n

]为

Y

[

n

]=IMF[

n

]+IMF[

n

]+IMF[

n

]

(9)

选择IMF进行重构得到的三个通道信号如图5所示。

2)快速独立成分分析 FastICA是一种收敛速度快、分离效果好的盲源分离算法,它能很好地从观测信号中估计出相互统计独立的、被未知因素混合的原始信号。FastICA算法的基本思想如下

S

=[

S

,

S

,…,

S

],其中

S

S

,…,

S

为源信号,

X

=[

X

X

,…,

X

],其中

X

X

,…,

X

为观测信号,假设存在模型的混合矩阵使得

X

=

S

(10)

图5 利用IMF重构后的RGB通道信号

该算法目标是在源信号

S

和混合矩阵未知情况下,以负熵最大作为搜寻方向,通过合适的非线性函数对其进行优化迭代,找到解混矩阵,即≈

(11)

式(12)是计算解混矩阵的迭代公式

(12)

根据解混矩阵来恢复源信号

Y

Y

=[

y

y

,…,

y

],即

Y

=

X

=

S

S

(13)

利用FastICA算法进行盲源分离得到的三通道信号如图6所示。

2.3 提取心率信号

根据心率信号的周期性,从信号的频谱图中可以计算出心率。对去噪后的心率信号进行快速傅里叶变换,找到频谱图中最高功率对应频率

f

,计算出心率

HR

。计算心率公式如下

HR

=60×

f

(14)

图7给出了某测试者心率信号频谱图,计算得到其心率为73.44 bpm。

图6 经FastICA算法得到的RGB通道信号

图7 某测试者心率信号频谱图

3 结果与分析

3.1 实验设计

实验视频在室内白天自然光环境下和夜晚日光灯环境下拍摄,拍摄设备为HD Webcam PLUM,型号为PLUM-001,采样频率30fps,视频为MP4格式。实验共选取了10位测试者,他们都是在校大学生和老师,其中包括8名男性和2名女性,年龄23~40岁,测试者面部正对摄像头,在拍摄过程中,测试者脸部应避免较大运动,同时手上使用指夹式脉搏血氧检测仪检测心率作为参考值,视频拍摄时长为30s左右。

3.2 实验结果与分析

采用CEEMDAN- FastICA的方法去噪,通过快速傅里叶变换提取心率,并与EEMD-FastICA去噪方法所得的心率结果进行比较,两种方法的测试结果和绝对误差如表2所示。

从表2可以看到,基于CEEMDAN- FastICA方法的检测结果都很接近血氧计值,其误差都在2bpm以内,其中最小误差是0.09bpm,最大误差是1.32bpm;EEMD-FastICA方法所测结果部分与血氧计值也比较接近,但是其中有三位参与者心率的绝对误差分别达到了57.5bpm、48.4bpm和69.5bpm。与此方法相比,本文算法具有较强的鲁棒性。

表2 心率检测结果及其绝对误差

另外,在本次测试结果中,测试者5和10的心率绝对误差高于EEMD-FastICA算法的绝对误差。尽管如此,但是将两位测试者数据进行时频分析,并与血氧计的历史记录数据进行比较,发现随着时间推移本文提出的算法测得心率更趋于稳定,符合实际测得的值。如图8所示,测试者5采用EEMD-FastICA算法获得的心率值波动较大,而采用CEEMDAN- FastICA算法获得的心率较为稳定,如图9所示。

图8 EEMD-FastICA算法的时频图

图9 本文方法的时频图

Bland-Altman一致性分析是评价两种方法结果是否具有一致性的常用方法,利用Bland-Altman 法分别对血氧检测仪与rPPG测量结果进行一致性评估,结果如图10所示。图中蓝色实线代表两者测量结果偏差均值,中间橙色虚线代表零偏差均值。两种测量方法的一致性越高,蓝色实线越靠近橙色虚线。可以看到,血氧检测仪与 rPPG 测量结果的偏差均值为0.34bpm,相应的95%一致性区间为[-0.97 1.65] bpm,表明两种测量方法具有较高的一致性。

图10 Bland-Altman一致性分析

另外,采用均方根误差(Root Mean Square Error,RMSE)、平均绝对误差(Mean Absolute·Error,MAE)、平均误差(Mean Error ME)、相关系数(Correlation coefficient ,CC)和标准差(Standard Deviation,SD)这五种评测指标与各文献方法进行对比,对比结果如表3所示。

表3 不同文献数据误差结果对比

从表3中可以看到,本文提出的基于CEEMDAN- FastICA方法的均方根误差为0.72bpm,平均绝对误差为0.60bpm,平均误差为0.34bpm,相关系数为0.996,标准差为0.635bpm,与其他方法对比可以看出本文方法的准确性较高。同时,本文方法的测试结果误差远低于中华人民共和国医药行业规定的误差标准(≤5bpm误差),表明了静止状态下本文方法的有效性。

4 结论

本文提出基于Python的Dlib库中人脸关键点检测获取ROI,结合基于CEEMDAN- FastICA的去噪方法非接触式检测心率,实验结果的均方根误差和平均绝对误差分别为0.72 bpm 和0.60 bpm,解决了照明变化、相机内部等噪声的问题,同时该结果与接触式设备有较高的一致性,验证了本文方法的准确性和鲁棒性。基于视频的心率检测方法简单易实现,在日常生活中有一定实用性。接下来还可以针对人脸运动状态下的心率检测、利用深度学习进行心率的提取等进一步研究来提高心率检测技术的实用性。