现实场景中非接触式心率检测方法研究
2022-05-15杨学志吴克伟
牟 睿,陈 鲸,杨学志,吴克伟,方 帅
1.合肥工业大学 计算机与信息学院,合肥230009
2.工业安全与应急技术安徽省重点实验室,合肥230009
3.合肥工业大学 科研院,合肥230009
随着社会的发展,人们的生活水平在不断提高,生活方式也发生了很大变化。人们越来越注重自己的身体健康情况,生命科学已然成为了人类研究的重点。心率是人体最基本也是最重要的生命特征,它反映人体健康水平,更是与人的心脏疾病密切相关,因此心率检测成为了解自身健康的重要手段[1]。传统的接触式检测法中传感器设备需要与人体皮肤接触,无法满足特定环境和特定人群的心率检测。为了避免接触,寻找一种基于视频的心率检测技术具有重要意义。基于成像式光学体积描记技术(imaging photoplethysmography,IPPG)来进行心率检测是最多的一类不依赖于硬件的心率检测方法[2]。IPPG 是一种利用血液中血红蛋白对不同波段的光线吸收不同,通过测量传输或反射回来的光线变换来提取血容量脉冲,进而检测心率的一类代表性、非接触和低成本的心率测量方法。但这类方法需要被测试人员处于光照稳定的环境中。若干学者将心冲击描记技术应用于非接触式的心率测量中[3],BCG克服了IPPG需要稳定光照的缺点,并且具有非接触式的特点,仅需成像设备采集一段视频就能进行心率检测。
文献[4]创新性地提出了一种基于BCG原理的非接触式心率测量方法。该方法从一段记录头部运动的视频中,通过追踪大量特征点后使用主成分分析来讲轨迹分解成一系列的主成分,进而提取心率。然而,由于文献[4]只使用了Y轴方向上的轨迹成分信号进行分析,因此往往需要跟踪多达500~1 000个特征点的运动。识别这些特征点,然后对大量的特征点进行跟踪将会需要很长的求解运行时间,难以满足实际心率测量的需要[5]。文献[6]通过框选脸部区域,定位出Shi-Tomas 角点[7]之后,采用KLT[8]跟踪算法来进行目标点跟踪,获取人体头部的运动轨迹信号,完成了基于单角点的心率检测。虽然该方法克服了文献[4]需要跟踪大量特征点,但是在复杂的光照条件下,会增加角点计算的不可靠性导致算法鲁棒性较差。文献[9]提出了一种基于预决策金字塔层数的视频微弱运动放大技术,对原始输入视频中的微弱运动(包括头部运动)进行放大,再对放大后的视频进行处理,从而提取心率信号,但该方法在放大头部运动的同时也放大了视频中其他噪声信号,心率测量精度较低[10]。文献[11]利用激光作为主动光源,结合附着在头部的平面镜与人体身后的平面镜,实现头部运动的放大;同时利用加权质心跟踪算法提取头部运动轨迹得到BCG信号。该方法需要较为复杂的实验环境和需要提前进行距离的矫正,不便于实际心率测量的应用。文献[12]同样通过追踪多个特征点,取所有特征点垂直方向的平均位移值作为BCG 信号,最后通过改进的经验模态分解[13](improved complete ensemble empirical modes decomposition,ICEEMD)对BCG 信号进行处理获取心率值。虽然该方法在静态场景中利用ICEEMD获得的脉搏波信噪比较小,但是在具有较多干扰的场景下,该方法的鲁棒性较差。
针对上述方法的缺陷,现提出一种方法能够克服光照干扰并能快速实现心率检测SD-BCG,提高现实环境中视频心率检测的鲁棒性。该方法通过方向可调滤波器过滤包含头部运动信息的视频信号获得头部在垂直方向上的振动轨迹,计算振动轨迹的相位差分信号,以此弱化光照变化及运动干扰对振动检测的影响。在此基础上,通过带通滤波和主要成分分析等方法从相位差分信号中分离出脉搏信号,并利用傅里叶变换从脉搏信号的频率中提取心率。
1 本文算法
本文提出一种基于方向可调滤波器的头部微小振动检测方法(SD-BCG)。该算法以头部视频为基础,利用设计的空间方向可调滤波器提取竖直方向上的头部微小振动获得头部BCG信号。检测心率的方法具体框图如图1所示。首先对输入视频进行人脸检测,选择脸颊或者额头ROI区域,将该区域所有像素点输入空间方向可调滤波器中得到垂直方向的相位差信号,对其进行时域带通滤波得到包含心率信息的相位差信号,再使用主成分分析[14](principal component analysis,PCA)对信号进行降维处理,选择最大频率和其一次谐波占总功率谱百分比最大的信号,将该信号进行心率计算就能得到心率值。
1.1 特征区域选择
实验首先需要获取人脸部区域的视频,即选择感兴趣的区域(region of interest,ROI)。可以手动或编程实现自动地选取较小的区域,当编程实现ROI 选择时:实验使用OpenCV中的ViolaJones脸部检测器[15]找到包含人脸的矩形区,如图1 人脸检测与特征提取提取所示,将眼球之间的距离定义为4d。那么ROI区域为距两眼连线上方水平距离d,宽度为眼距中间3d,高度为3/2d的红色矩形区域。考虑到实验过程中被测人员会有不自觉的眨眼动作,眼睛的微弱运动会影响实验的鲁棒性,因此,实验把矩形区域的人眼绿色区域去掉,移除的人眼区域占整个矩形区域的20%到50%。
图1 SD-BCG算法流程图Fig.1 SD-BCG algorithm workflow
1.2 构造空间方向可调滤波器与相位差信号提取
1.2.1 空间方向可调滤波器
实验方法需要提取竖直方向上头部微小振动,根据文献[16]可知,可以通过让图像与可调滤波器卷积能够获取任意方向上图像的细节信息。高斯的二阶导数是光滑的并且与边界非常相似,它可以写成成一个圆对称的窗函数和一个多项式的乘积。因此本文使用高斯的二阶导数作为基函数,插值函数为高斯的二阶导数在90°方向上对应的常数。空间方向可调滤波器的一般表达式:
式中,q(x,y,θ)表示θ方向的滤波图像,hi(x,y)表示基滤波器,ωi(θ)表示插值函数。
然后定义三个基滤波器hi(x,y)以高斯二阶导数作为基函数,θ=0,π/3,2π/3 作为基滤波器的方向,则有表达式:
根据文献[17]选插值函数ωi(θ)去掉所有非零项在去除实部和虚部得到等式:
对公式(5)进行计算,得到:
由公式(2)~(4)和(6),对θ取90°,得到能提取竖直方向信息的空间滤波器,滤波器公式为:
将图像与θ=π/2 方向上的滤波器做卷积运算,可以有效地提取图像在与θ=π/2 方向上的细节特征,这里就可以提取到每幅图像竖直方向的相位信息。
1.2.2 相位差信号提取
上文设计的空间方向可调滤波器可以提取图像竖直方向的相位信息,将视频每帧卷积滤波器得到每帧的相位信号然后进行算数处理得到相位差信号。假设视频输入信号在时刻t,以视频中ROI 区域内的1 个像素点为例,位置x处的像素,该像素点强度表示为I(x,t),随着时间的变换,像素竖直方向的位移变化导致像素点的强度发生变化,可以表示成如下公式:
式中,δ(t)表示竖直方向的运动幅度。首先,利用傅里叶级数分解,将位移图像轮廓f(x-δ(t))表示成多个复杂的正弦曲线之和,具体公式如公式(9)所示:
其中,每一个子带都对应着1个频率ω,ϕω则代表着相位信号。根据FFT(fast Fourier transform,FFT)变换的平移性质,可以计算出I(x,t)的傅里叶变换结果为:
对于上式中的每一个频率ω,其复指数形式均如式(11)所示:
在t=0 的时候,相位是ϕω,其他时刻的相位为ϕω-ωδ(t)。将t≠0 时刻的相位与t=0 时刻的相位做减法,得相位差表示如下:
则点x处的相位差是ROI 区域所有像素点的1 维信号,500 是视频帧的个数。然后计算ROI 中所有像素点的相位差信号,就完成了头部相位信号的提取。
1.3 时域滤波
通过方向可调滤波器得到的头部相位差信号包含多种组成成分,需要进行时域滤波选择出包含尽可能多心率信息的信号。通常在静息条件下,一个正常成人心率在[0.75,2]Hz,也就是心跳每分钟跳[45,120]次[18]。频率在0.75 Hz 以下的信号主要由低频运动导致,如呼吸和姿势变化,需要舍弃这部分信息,频率在[2,5]Hz的信号在后续实验过程峰值检测中选择中提供一次谐波信号,该部分信号需要保留。考虑保留相位差信号的频带范围,结合巴特沃斯滤波器具有最大平坦幅度的特性,选择通频带为[0.75,5]Hz的5阶巴特沃斯滤波器对头部相位差信号进行滤波,去除不包含心率信息的信号。头部其中一个橡树点的相位信号差如图2(a)所示,经过带通滤波后相位信号差如图2(b)所示。
图2 相位差时域图Fig.2 Wave in time domain of phase difference
1.4 主成分分析
经时域滤波后的头部相位差信号包含了由心血脉冲引起的头部运动以及呼吸、前庭运动和其他面部表情变换等运动信号。必须将这种混合运动分解成子信号来隔离脉冲。将ROI 区域的所有像素点在每个帧上的多维位置作为一个单独的数据点,并使用PCA 找到一组位置变化的主要维度。选择一个维度,将数据点序列投影到该维度获得心率的脉冲信号。
将每一个点的相位差信号作为1个样本数据,组成1个输入数据矩阵:
其中,t表示视频帧数,N表示ROI分块中的像素个数,N=60×60-20×20×2,共计2 800个像素点。
求输入矩阵的协方差矩阵如式(14)、式(15)所示:
协方差矩阵的特征向量和特征值如式(16)所示:
式中,Λm为对角矩阵,对应求出的特征为λ1,λ2,…,λN;Φm为对应的特征向量,ϕ1,ϕ2,…,ϕm组成特征向量矩阵。
将特征向量按特征值的大小进行从上到下的排列,取前T个特征值所对应的特征向量,并组成矩阵QL。这里,T个特征值对应着T个主要成分,其中参数T是通过计算主成分的贡献率而得到的。T个主成分一一对应的信号都可以通过对特征向量矩阵进行反投影得到[18],如式(17)所示:
视频中有头部在其中异常移动,如吞咽、姿势调整等动作。这种移动增加了位置向量的方差,从而影响PCA 分解。为了处理这个问题,可以在执行PCA 之前丢弃具有最大L2 范数的向量的百分比α。然而,所有最大L2范数仍然必须在投影步骤中使用用来产生完整的信号。实验表明,当α等于25%时,能够有效地消除头部异常移动带来的影响,实验效果最佳。因此本实验α值设定为25%。
1.5 信号选择
BCG头部相位差信号通过带通滤波和PCA主成分分析后得到需要从中提取出心率信息的特征向量。虽然排序靠前的主成分方差较小能够解释大部分心率信息,但是方差最小的主成分信号可能无法清晰地表示为心率信号,需要选择周期性最强的主成分。实验证明原始相位差信号的98%以上的信息在前5个主成分,故选择前5个主成分其中一个解释为心率信号,然后计算主成分最大频率和其一次谐波频率相对于功率谱的占比,选择占比最大的主成分,即为提取的脉搏波波形。所提取的脉搏波图如图3所示。
图3 脉搏波示意图Fig.3 Schematic diagram of pulse wave
1.6 心率计算
上文提取到代表心率信号的主成分信号。进行呼吸率估计最常用的方法是用快速傅里叶变换(FFT)分析功率谱,最大功率对应的频率即为心率[19]。估算心率流程如下:
输入视频总帧数为N=500 帧,及一维信号长度为500的脉搏信号y和功率谱p(f),计算功率谱中峰值所对应的频率fmax。
根据公式(18)求得的最大频率,计算心率值:
式中,HRy为心率值,实现心率检测。
2 实验装置和结果分析
2.1 实验装置
实验装置如图4 所示。使用一个普通的网络摄像头连接笔记本电脑,摄像头对准人体头部,距离被测人员1 m 左右距离。所有被测试人员需要静止坐在固定椅子上,保持自然状态。
图4 实验场景Fig.4 Experimental scene
电脑通过Matlab 控制摄像头录制视频。设置摄像设备采集图像为RGB 彩色空间,帧率为30 frame/s,视频分辨率为1 280×720,总计500 帧图像。本文对40 位测试者进行了对比实验,其中包括28 名男性和12 名女性,志愿者的年龄分布于18~60岁之间。在每次测试的时候,采集受测者的头部视频信息,同时使受测者佩戴基于指尖的PWS-20D 脉搏波检测设备,该设备采用光学体积描记术原理,基于指尖进行脉搏波的采集,可以精确地采集受测者的脉搏波信息,在拍摄视频时,使用该设备测量脉搏波作为参考值。
为了全面的估计本文提出SD-BCG,本文复现了文献[4]、文献[7]心率检测算法作为对比分析,采用了5 个相关参数对其定量描述。
如果测得N组心率值和真实值数据,定义心率值与脉搏波检测设备之间的误差为eN=PBCG-Preal,其中PBCG为通过SD-BCG 测得的心率值,Preal为通过脉搏波检测设备测得的心率值。
平均误差Me表示对在N组实验数据,对误差的绝对值求平均,用来表示其期望值,其计算公式:
标准方差Se表示N组实验数据的离散程度,其计算公式:
均方根误差RMSE表示N组实验数据中检测值与真实值的偏差,其计算公式为:
平均准确率HRac表示N组实验数据中检测值相对于真实值的准确性,其计算公式为:
皮尔森相关系数ρ表示N组实验数据中检测值与真实值的线性关系,其计算公式为:
2.2 实验装置
2.2.1 抗光照变换能力的心率检测
由于本文方法是基于头部运动提取心率,所以在光照变化对实验结果影响较小。为了充分验证所提出的方法抗光照干扰的能力,在自然光、日光灯和室内环境3个不同光照度环境下,按照上述实验步骤,对10位志愿者进行非接触式心率检测,其中,每一种光照环境采集5组视频,视频长度为20 s,帧率为30 frame/s,共计50 组数据,同时使用PWS-20S 脉搏波检测仪同步检测心率信息。结果如表1所示。
表1 不同光照条件下的心率检测结果Table 1 Heart rate detection results under different light conditions
如表1 可知,在三个不同的光照强度下的Me低于1.6 beat/min,Se和RMSE低于2.3 beat/min,HRac和ρ都在94%以上。数据说明:不同光照强度下,SD-BCG都可以准确地检测出心率,具有良好的准确性和稳定性。经实验分析,本算法具有较好的对光照变化的抗干扰能力是因为提取BCG 运动未利用亮度信息,场景变换导致性能略微变化其原因可能是:光照变换可能导致采集的视频质量较差,让算法性能有轻微降低。
2.2.2 抗运动干扰能力的心率检测
上述实验验证了本文方法的抗光照干扰能力,下面进一步验证本文算法的准确性和抗运动干扰的能力。在本次实验中,每位志愿者可以自由地左右小幅度摇晃头部或者上下小幅度晃动头部,按照本文算法的实验步骤,在自然光条件下,对10名志愿者进行非接触式心率检测,其中包括静止状态的SD-BCG检测和头部轻微摇晃的SD-BCG检测2组数据,同时使用PWS-20S脉搏波检测仪同步检测心率信息,每名受测者包括非接触式和接触时心率测量各3次,共60对数据。具体的实验结果如表2所示,为了进一步直观展示本文算法的准确性和抗运动干扰的能力,使用Bland-Altman法和一元线性回归法对实验结果进行一致性分析,图5展示了实验结果的散点图。
表2 不同运动场景下的心率检测结果Table 2 Heart rate detection results under different exercise scenarios
由图5(a)可知,在静态场景和动态场景,通过SDBCG 检测的心率数据集中在线性回归线附近,动态场景比静态场景略微分散,线性回归线的斜率接近1,表明SD-BCG 方法的检测值与心率参考值相关性很强。由图5(b)的Bland-Altman法对检测结果进行分析,静态场景置信区间为[-2.348 6,2.456 1]动态场景的置信区间为[-3.198 4,3.305 5],说明在静态场景和动态场景,SDBCG方法检测心率与接触式脉搏波测量设备具有很好的一致性。
图5 结果散点图Fig.5 Result scatter plot
由表2可知,静态场景和左右晃动场景下,Me小于3 beat/min,Se和RMSE均小于3.3 beat/min,HRac和ρ均大于0.95。实验数据表明:SD-BCG 的性能受左右运动相较于上下运动影响较小,更能抗左右方向上的运动干扰,能够在运动干扰的条件下较为准确完成心率检测。
2.2.3 逐步实验
上述实验验证了SD-BCG 检测心率的正确性和抗干扰的能力,下一步研究每个步骤的单独贡献。本次实验中,光照环境为自然光,志愿者保持静止状态坐在摄像机前,对10位志愿者进行非接触式心率检测,实验步骤按照表所示分别进行,每种实验步骤进行一次,采集3组视频,同时使用PWS-20S 脉搏波检测仪同步检测心率信息。如表3所示。
表3 可知,实验步骤会影响本文算法的整体性能,缺少算法的步骤会对心率检测结果产生严重影响。算法步骤中对实验结果Me的准确率分别上升了3.38%、7.29%和1.52%,Mmax的准确率分别上升了5.05%、7.28%和2.19%,其中对算法性能影响最大的步骤是PCA,影响最小的步骤是SS。经实验分析:未经PCA 处理的信号包含很多与心率信号无关的信息,带通滤波并不能过滤这部分信息,经PCA 处理后能够较为准确的心率信号,SS该步骤主要的作用是完成信号的筛选,对实验结果影响程度较低。
表3 对所提方法各步骤的检测结果Table 3 Detection results for each step of proposed method
2.2.4 干扰环境下的对比实验
抗光照变换能力的心率检测验证了SD-BCG 进行心率检测具有抗光照干扰的能力,抗运动干扰能力的心率检测验证了SD-BCG 进行心率检测具有抗运动干扰的能力,为了进一步验证SD-BCG
抗运动干扰和抗光照干扰的具体性能。设置了两组实验,第一组实验为志愿者静止坐在摄像机前,选择不同的光照环境,第二组实验为稳定的光照环境,志愿者坐在摄像机前方,允许自由地左右小幅度摇晃头部。按上述实验步骤,完成SD-BCG 心率检测,同时使用PWS-20S 脉搏波检测仪同步检测心率信息。为了充分验证所提方法抗运动干扰和抗光照干扰能力,在上述两组实验场景中分别与文献[4]、文献[6]和文献[12]进行对比。其中文献[4]利用LK 光流法追踪头部多个特征点获取BCG 信号完成心率检测,文献[6]利用KLT 追踪单个取Shi-Tomas 角点后通过KLT 光流追踪角点Y轴坐标获得BCG 信号,文献[12]利用LK 光流追踪头部多个特征点后对特征点信号进行ICEEMD 处理获得心率值。将实验结果与文献[4,6,12]比较,对比结果如表4所示。
表4 干扰场景下的心率检测结果Table 4 Heart rate detection results in disturbed scenes
根据表中数据分析,在有光照干扰或者运动干扰的实验场景下,本文所提出的方法Me均小于3 beat/min,Se和RMSE均小于3.5 beat/min,HRac和ρ均大于0.95。本文所提出的方法相较于献[4,6,12]的方法在有光照干扰下,准确率提高分别提高了8.28%、5.97%和4.44%在运动干扰下准确率分别提高了11.86%、5.09%和4.76%。且各方面指标均优于相比于文献[4,6,12]的方法,具有明显优势,主要原因如下:
(1)本文方法是利用方向可调滤波器提取竖直方向上的相位信息,然后进行带通滤波过滤与心率信息无关的频率,在通过主成分分析得到噪声较小的心率信号。因为提取的信号是竖直方向的相位信号所以本文方法受光照影响程度低具有较强的抗光照干扰的能力,同时具有一定的抗运动干扰能力。
(2)文献[4,6,12]都是利用运动追踪获取特征点的运动轨迹从而得到关于心率的BCG 信号,这类方法对光照和运动干扰较为敏感,检测精度随之降低。虽然文献[12]对信号进行了进一步的ICEEMD信号处理,去处了部分同频噪声干扰,可抗干扰能力与本文算法相比较弱。
3 结束语
非接触式BCG心率检测技术检测微弱头部运动聚焦在通过运动追踪获取运动信息。但是,由于运动追踪本身存在的缺点,存在运动干扰、算法复杂度高和易受光照影响等问题。针对以上问题,提出一种基于头部运动的非接触式心率测量方法。该算法利用方向可调滤波器提取头部运动的相位差信息,通过对相位差信息进行滤波和主成分分析后计算出心率值。在多组实验数据集上进行对比实验首先进行了抗光照干扰实验和抗运动干扰实验验证了本文算法的抗干扰能力,接着分析了本文算法每步骤的贡献度,实验证明主成分分析能够有效的提高检测正确率。最后与其他三种主流BCG检测心率方法对比,有光照干扰下,准确率提高分别提高了8.28%、5.97%和4.44%,在左右方向上的运动干扰下准确率分别提高了11.86%、5.09%和4.76%。实验结果表明,本文在存在光照干扰和左右方向上的运动干扰下能够有效提高心率检测精度。在实验中发现,当头部存在竖直方向上的运动干扰时,本文方法效果没有特别理想,在未来工作中会提高算法鲁棒性。