刘鸿程, 王笑梅, 陈桂安
(上海师范大学 信息与机电工程学院,上海 201400)
胎心检测是围产期的常规检测之一[1,2]. 胎儿心率异常通常是由于缺氧或者缺血导致的,缺氧或者缺血会导致胎儿先天生理缺陷. 对胎儿进行胎心监护可以有效的检测胎儿健康状况,确保胎儿和孕妇安全. 围产期的胎儿心率检测对提高胎儿生育质量,降低孕期风险就显得尤其重要.
对于高危妊娠孕妇为了避免可能的意外发生,每天都需要进行多次的胎心率检测,及时获得胎儿的健康状况. 传统的胎心检测主要依靠孕妇到医院做产前检测,增加了孕妇体力和经济上的负担. 便携式的胎心率检测仪方便了孕妇可以家中定期自检,自我健康评价.
目前主流的胎心检测仪按照原理主要分为三种.第一种是通过声音传感器采集胎心的搏动[3],由于是被动接受声波,检测对孕妇体内的胎儿损害很小,但是信号处理电路复杂,灵敏度差. 第二种是基于胎儿心电[4],孕妇腹壁采集到的胎儿心电信号较微弱,检测难度大,需要复杂的硬件电路和降噪算法. 第三种是基于超声多普勒原理[5],这种胎心率检测仪的优点是电路较简单、灵敏度高,但是检测信号成分复杂,干扰多,给胎心率检测的准确性和稳定性带来一定挑战. 传统的系统需要和别的检测仪或传感器相连,受试者需要佩戴相应的检测仪器,且接触式检测方法成本较高也造成了一些使用的不便.
最近几年已有部分学者对基于视频的非接触式心率检测进行了研究,如文献[6]和文献[7]并且已经取得了良好的效果,然而目前为止还没有任何学者进行相应的非接触式胎儿心率检测的研究.
本文提出的胎心检测算法利用普通摄像头在日光作为光源的条件下实现非接触式的胎心检测. 通过欧拉颜色放大算法,实现胎儿心率的检测,对测量环境要求不高. 无需佩戴任何额外的监测仪器,也不需要医生的参与,使用简单,方便实现低成本、便携式胎心监护.
最近几年,基于普通摄像头录制视频提取的信息正被用于生理检测. 比如能运用于非接触式心率检测中[8-11]. 2012年Wu HY,Rubinstein M等提出的欧拉放大算法[12,13],放大心脏跳动引起的皮肤颜色变化,以实现非接触式胎心检测. 除此之外摄像头还可用于血氧饱和度的检测[14,15]. 在自然光下的非接触式生命体征检测[16]. 通过数码相机的测量改善远端心肺功能[17]在移动端应用的,非接触式睡眠呼吸检测系统[18].
光学体积描记术(Photo Plethysmo Graphy,PPG)[19]是一种利用光电设备照射人体表面肌肤,通过反射光强度检测人体微动脉,毛细血管中血液容积变化的光电检测算法. 1981年,Nijboer等提出影响PPG信号强度的因素包括血液容量、红血球的位置和血管运动等.随着对PPG信号的研究深入,发现PPG信号中包含着:心跳、呼吸、由中枢神经系统引起的压力反射和体温调节等人体生理信息. 研究表明,从普通摄像头拍摄的人体视频中能够检测到血液容积脉冲信号(Blood Volume Pulse,BVP),分析该信号的频率,可实现非接触式的心率检测. 胎儿心脏的收缩与舒张使孕妇脐带处的血液容量发生周期性的变化,血液吸收和反射光强度也会随之改变,从而导致孕妇脐带位置的皮肤颜色发生周期性的变化,这种变化对应着BVP,但是这种变化是极其微小的,很难被人眼感知. 近年的视频放大技术,可以有效的放大视频中的颜色变化,提取所需的BVP.
人体的血管分布于皮肤表层,从而血液周期性循环时皮肤会因光的反射及透射产生周期性的颜色改变,这种周期性的颜色改变即能代表人体的心率. 母体内是个复杂的环境,有胎儿心脏跳动,母体心脏跳动,母体血液流动,子宫肌肉收缩等噪声干扰,因此胎心信号信噪比较低,噪声干扰较大,BVP本身信号较弱,很难直接从原始信号中提取出所需的BVP信号[20]. 本文利用欧拉颜色放大算法将所需的信号频段放大. 并所提取的胎心信号进行适当的归一化处理以便调整波形,滤除噪声干扰,提取相应的BVP信号,用于胎心检测,胎心检测的算法如下:
1) 使用普通摄像头获取母体腹部视频;
2) 利用欧拉视频放大算法将获取的视频进行颜色放大处理;
3) 将颜色放大后的视频分解为到三个颜色通道,分别获取三个颜色通道的血液容积脉冲信号,并对血液容积脉冲信号进行规范化处理;
4) 利用独立成分分析算法(Independent Component Analysis,ICA)以三颜色通道的血液容积脉冲信号作为输入,分解为三个信号;
5) 计算信号功率谱密度,提取胎心率.
本实验视频是通过手持式移动设备拍摄,不可避免的产生轻微抖动,为了减小误差需要对视频进行去抖动的预处理[21].
视频实际上是帧序列. 视频的抖动用运动矢量表示,通过在前后帧中根据搜索算法寻找匹配块,得到宏块的运动位移即运动矢量. 视频稳定时视频内的运动矢量是平稳变化的,当视频出现抖动时,由于整体场景的位移,所有的运动矢量都会在短时间内发生变化,在运动矢量时间曲线上表现为高频部分. 去除高频部分的运动矢量,实现去抖动.
根据欧拉视频放大算法,使用高斯金字塔和理想带通滤波器对视频从空间和时间两个角度进行处理,以抑制噪声的干扰,放大所需的BVP信号频,并在得到的频段上进行视频的放大和合成.
高斯金字塔通过高斯平滑和下采样,获得一系列的下采样图像. 高斯金字塔的处理公式如下:
其中,0<l≤N (N表示金字塔的最大层数),0≤i<Cl(Cl表示金子塔第l层凸显的列数),0≤j<Rl(Rl表示金字塔第l层图像的行数),w(m,n)表示5×5的高斯核. 高斯金字塔底层包含图像的更多细节,顶层包含图像的更多轮廓信息. 包含BVP信号的序列位于中间层基带.
胎儿心率信号一般处于90~162 bit/min范围内,为了抑制噪声的干扰,本论文采用通频带为1.5 HZ~2.7 HZ的理想带通滤波器.
对滤波后的视频进行颜色放大,每一个像素通道乘以一个放大倍数,本论文所采用的放大系数为50. 再将放大后的视频叠加到原视频上,即可得到所需的颜色放大的视频.
对孕妇腹部视频进行欧拉视频放大处理后,使得放大后的微弱的胎儿心率能够被后续的算法分离出来.
Lab是一种与设备无关的基于生理特征的颜色系统,将图像的亮度特征和散色特征分离. L通道存储的是图像的亮度信息,a,b通道存储的是图像的色度信息. a表示从洋红色至绿色的范围,b表示从黄色至蓝色的范围.
在已经转换为Lab的颜色空间上分别计算每一帧三通道的空间像素平均值,以提取三个通道的血液容积脉搏波信号,用于后续心率计算. 即:
式中,bs是第s帧的图像其中一个颜色通道的像素平均值,xs(z)表示放大后的视频颜色变化序列中第s帧的第z个像素值,M是每一帧的像素点数目. 图1所示是从实验视频中提取出的血液容积脉冲波形,波形的震荡反映出胎儿的心跳变化.
图1 血液容积脉冲波形
由于母体内并不是一个完全纯净的环境. 母体心率为主的噪声会对需提取的胎儿血液容积脉搏波信号产生一定的干扰,但母体信号和胎心信号相对独立,使用忙分离将信号分解,以获取较干净的胎心率血液容积脉冲信号. 本文基于负熵判据的FastICA算法来解决相互独立的信号分离问题.
首先对信号x(t)进行去均值和白化处理. 将信号减去它的均值,变成零均值矢量,并将信号线性变换为各分量互不相关,去均值和白化处理可简化ICA. 依据负熵判据来寻找解混矩阵W,由信号的解混算法,通过Y=WX实现独立分量的分离. 牛顿迭代定理得定点ICA算法为:
式中,w*是某一次牛顿迭代得结果,w是w*归一化后的更新值. 式(4)只分离了一个独立分量,要分离多个独立分量,在每次分离一个分量之后,从观测信号中减去该独立分量,如此重复,直到所有分量都被分离出来为止.
ICA需要不同的信号源信号作为输入信号并且和输出信号数量相同. 采用Lab颜色空间的三个颜色通道作为ICA的三个输入信号,通过ICA将信号分解为三个输出信号. 由于ICA具有不确定性,既输出信号顺序并不确定. 将这三个信号进行规范化处理,以抑制基线漂移滤除50 HZ的工频干扰. 本文选用Z-score标准化方法.
Score标准化方法的公式为:
其中,μ为数据的均值,而σ为标准差.
将得到的血液容积脉冲波形用快速傅里叶变换变换到频域内. 计算功率谱密度,最大功率谱所对应的频率即为估算的胎心值. 本文采用周期图法计算功率谱.是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅里叶变换,得到x(k),然后再取其幅值的平方,并除以N,作为序列x(n)的真实功率谱的估计,图2所示为功率谱密度图.
功率谱密度的计算公式如下:
其中,FT(ω)为信号fT(t)的傅里叶变换.
图2 标准化后的功率谱密度曲线
分别计算3个信号的最大功率谱密度,选择中间值作为提取的胎心率.
因为ICA算法中触式混合矩阵A是随机产生的[22],它可能收敛于不同局部极值. 为了提高分离精度,需要对同一信号做多次FastICA计算,从多次结果中选出误差最小者作为最终的分离结果. 因此需要由每次得到的分离结果计算出一个评价量,这个评价量能够反映分离结果的误差最小.
ICA可用最大似然估计作为评价指标,理论上最大似然指标的最大值对应于误差最小的分离结果. 基于概率密度的线性变换,在原分量互相统计独的情况下,混合矩阵A的对数似然函数可表示为:
式中独立分量的密度函数可用特定的函数模型来逼近,对于非独立的分量,例如正弦和余弦分量,采用独立子空间分析法,适用于本应用的似然指标RL可表示为:
用最大似然指标确定误差最小分离算法步骤如下:
1) 输入观测信号,置初始值i=1,j=1,初始最大似然指标数组RL(j)=0;
2) 运行基于负熵判据的FastICA算法,得到一次分离结果;
3) 计算第i次分离结果的最大似然指标存入数组RL(i);
4) 比较RL(i)和RL(j)值的大小,把值大者存入数组RL(j),把该次数存入变量j,转到第2步,重复运行2)~4)步N次;
5) 输出第j次分离结果. 第j次分离结果为N次分离结果中误差最小的分离结果.
基于Qt的跨平台特性和c++对于图像和信号处理方便的考虑,移动端的开发选用Qt for android来实现算法.
这款程序只包含测量部分,通过调用手机摄像头实现视频的录制然后转为立即对该视频进行分析提取所需的胎心信号. 如图3所示.
本实验所有视频均利用普通手机摄像头,在室内拍摄,窗户照射进来的自然光为唯一光源. 在拍摄时应尽量保持摄像镜头的稳定,并且使被试者自然的呼吸,且保持静止. 拍摄时的视频图像如图4所示.
视频长度约为30 s,分辨率为640×480. 视频的帧率为25 帧/s. 拍摄完成后立即对受试者利用医院专用的胎心仪检测胎心数据. 本次实验选取七个不用的测试者在相同的环境下完成.
1) 颜色空间的影响
不同的颜色空间代表着不同的颜色表示方法. 本文选取常见的RGB,YIQ,Lab三个颜色空间来研究颜色空间域的不同对于实验准确度的影响. 专用的医疗检测设备获取的胎心心率作为实验的参考数据,图5所示不同颜色空间域的实验数据与实际值所做的对比.
图5 不同颜色空间胎儿心率提取实验结果
由本实验结果看,Lab颜色空间下的实验数据最为准确. 7次实验中最大误差仅为4%,而RGB和YIQ颜色空间域都具有较大的实验误差,其中RGB颜色空间的最大实验误差更是达到了12.2%. 所以本文算法采用实验误差最小的Lab颜色空间.
2) 视频长度的影响
除了颜色空间域的不同,视频的长短也对实验结果产生一定的影响.
本文用以上7次实验视频分别截取5 s,10 s,15 s,20 s,25 s,30 s,在Lab颜色空间上进行实验,选取每一时刻实验误差绝对值均值作为每一时刻的准确度标注,绘制的结果曲线如图6所示.
图6 不同视频时长下的准确率曲线
由对比实验可以看出,视频长度在25 s~30 s的时候具有最高的准确度,且较为稳定,5 s的视频长度准确度最低,从5 s到25 s中间准确度逐渐增高. 当视频长度大于30 s时又会使运算时间变长,且准确度提高并不明显. 所以本实验最佳视频时长为25 s~30 s之间.
文献[3-5]虽然也可以对胎儿心率进行正确的提取,但是所需成本较高.
例如文献[4]在胎心音的检测上不仅需要安卓端的支持,还需要胎心音检测端的硬件支持. 现在市场上的胎心音检测仪在200元左右,而且只有在围产期才会使用,可重复利用率低,会造成一定的资源浪费. 本文所述非接触式胎儿心率检测算法,只需使用普通家庭常见的安卓端即可进行检测,避免造成不必要的资源浪费.
本文提出了一种基于视频的非接触式胎心检测算法,并再手机端开发了App应用. 利用视频颜色放大算法,提取出视频中的血液容积脉冲信号,通过傅里叶变换,求出最大功率谱所对应的频率估计胎心信号. 利用ICA算法分离母体心率信号,以得到较准确的胎心信号. 在日常非特殊的场景,且视频长度一定的时候获取的胎心准备率较高,可以满足测试者的日常测试所需,操作简单,便捷,成本低廉. 但是本文实验的样本数据量偏少,实验过程中没有遇到异常的胎心值检测,下一步研究需要增加实验样本量,进一步验证该算法的有效性.