一种基于热成像仪测量人体脸部温度校准方法与流程

文档序号:22749657发布日期:2020-10-31 09:42阅读:484来源:国知局
一种基于热成像仪测量人体脸部温度校准方法与流程

本发明涉及医疗设备领域,特别涉及一种基于热成像仪测量人体脸部温度校准方法。



背景技术:

红外热像仪既可以得到目标的红外图像,同时也能测量目标的温度。红外热像仪测温具有非接触、远距离、速度快、灵敏度高、测温范围广,以及可以在图像中选取被测目标等优点。红外热像仪相对于传统的测温技术有很多优点,但是红外热像仪会受测量距离、被测量物体反射率、被测量物体受其它物体遮挡、环境温度、环境湿度、环境辐射等因素影响精度。

红外热像仪在医学中需要比较精确地测量人体部位温度分布。目前研究方向比较多的是目标距离和视场角变化对红外热像仪测温精度影响,推导出了红外热像仪测温精度与目标距离和视场角之间的关系式,提出了采用误差补偿的方法对热像仪测温进行校正的方法。

由于目前热像仪测量人体头部体温时一般都是测量整个脸部温度,一旦脸部被遮挡物遮挡的面积比较大而影响测量温度准确度。于是研发一种可实现快速、精确找出人体头部的额头部位的像素温度,从而实现人体头部被遮挡也能够准确测量人体温度的方法,是十分必要的。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种基于热成像仪测量人体脸部温度校准方法,该方法能够快速寻找人体脸部额头部位的温度像素,从红外热像仪采集到温度像素数据中寻找人体脸部额头部位的温度像素点。

本发明的目的通过以下的技术方案实现:

一种基于热成像仪测量人体脸部温度校准方法,包含以下顺序的步骤:

s1、红外热像仪每次采集的温度像素点阵是二维数组pixel;

s2、遍历温度像素数组pixel,寻找温度像素数组pixel中包含32℃-45℃范围的所有数据赋值给一维数组filter;常用体温计量程为35℃-42℃,由于pixel是原始数据没有经过修正,避免漏掉人体的像素点于是选择32℃-45℃范围的数据。

s3、按递增顺序排序一维数组filter;

s4、从排序后的filter中取3/4分位点的数据做为基准,从一维数组filter中取第q3个元素作为基准数,得到基准温度s=filter[q3];

其中,

s5、从二维数组pixel中寻找所有符合s±diff的像素位置标1,不符合s±diff的像素位置标0,赋值给二维数组pixel_bin,并且从二维数组pixel_bin找出值为1的边界并且居中在最大的正方形赋值给二维数组face;

其中,diff是指基准温度误差范围,二维数组pixel_bin的宽高与二维数组pixel相同,二维数组face的宽高不会超过二维数组pixel的宽高;

s6、二维数组face为人脸温度的轮廓,二维数组face的顶部数据为额头部位数据,额头部位数据中所有元素为1对应的温度像素数组pixel元素的值的平均值是额头表面温度temperature;

s7、额头表面温度拟合成体内温度,经过实验得出拟合函数:

body_temperature=0.7797×temperature+9.7271;

其中,body_temperature是人体体内温度。

步骤s1中,所述二维数组pixel已经经过距离拟合、额头表面温度换算为人体温度。

步骤s2中,所述一维数组filter的数组长度范围由pixel决定;如果pixel是32×32的二维数组则filter的最大长度为32×32=1024,其他依此类推。

步骤s1中,所述二维数组pixel为32×32的温度像素点阵:

步骤s2中,所述一维数组filter为:

步骤s3中,所述按递增顺序排序一维数组filter为:

步骤s4中,所述一维数组filter的长度为20,基准温度s=filter[q3]=36.5。

步骤s5中,假设所述diff=0.7,则寻找二维数组pixel所有元素值在36.5±0.7范围的像素位置标1,其它标为0;

从二维数组pixel_bin中找出值为1的边界并且居中在最大的正方形;

在二维数组pixel_bin中值为1横跨3列5行,所以最大的正方形是5×5,将5×3数组居中放进5×5的正方形中,得到二维数组face;

能够看出以上二维数组face是人脸温度的轮廓,第1行是额头部位,第2、3、4行是眼睛到嘴巴的部位,第5行是脖子部位。所述额头部位数据,此时只是第1行的的数据;若二维数组face为其他大小的正方形,额头部位数据同比例放大放大即可,即有可能第1、2行的数据为额头部位数据,或者第1、2、3行的数据为额头部位数据,等等。

步骤s5中,所述二维数组face第1行[01100]每个元素分别对应二维数组pixel中元素,求二维数组face第1行所有元素为1对应的温度像素数组pixel元素的值的平均值是额头表面温度:

temperature=average(p9,9,p9,10)。

所述二维数组face还用于判断人脸是否被遮挡物遮挡,具体包括训练模型与模型识别两部分:

一、训练模型部分:

1、数学模型定义:

(1)学习率k=0.1;

(2)输入层神经元数:input_num=100;将二维数组face压缩或者放大成10×10二维数组,然后将每行按顺序排列成长度为100的一维数组,所以input_num=100;

(3)输出层神经元数:output_num=1;由于输出结果要么是被遮挡要么不被遮挡,所以只要输出1个数就能够表示是否被遮挡,接近0表示不被遮挡,接近1表示被遮挡;

(4)隐藏层神经元数:hide_layout_num=10;经过实验得出隐藏层神经元数为10比较好;

(5)激活函数使用因为sigmoid函数将变量映射到0,1之间刚好能够表示接近0表示不被遮挡,接近1表示被遮挡,sigmoid函数的导数函数为sigmoid(z)'=sigmoid(z)(1-sigmoid(z));

(6)误差函数为其中,cj是第j个face样本实际值与输出值的平方误差,ej是第j个face样本的实际值与输出值的差;

(7)隐藏层的权重w2是input_num×hide_layout_num的二维数组,偏置b2是长度为hide_layout_num的一维数组,神经元a2是长度为hide_layout_num的一维数组;

(8)输出层的权重w3是hide_layout_num×output_num的二维数组,偏置b3是长度为output_num的一维数组,神经元a3是长度为output_num的一维数组;

(9)神经元计算函数calc_cell(x,w,b)=sigmoid(x·w+b);其中,x·w是两个数组的内积,x是输入神经元的值,w是权重与每个x数组元素一一对应,b是偏置。

2、模型训练过程:

(1)随机初始化隐藏层的权重w2与偏置b2,输出层的权重w3与偏置b3;j为样本下标,max_j为样本数,为face样本数组,每个样本元素是长度为100的数组;

(2)定义w2、b2、w3、b3的偏导分别为dw2、db2、dw3、db3初始值为0;

(3)x=input_valj是input_val数组第j个数组压缩或放大成10×10二维数组后将每行按顺序排列成长度为100的一维数组x=[x1x2...x99x100];

(4)输入第j个样本计算隐藏层每个神经元的值:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值,是隐藏层第i个神经元,是长度为100的一维数组是的所有输入权重,的偏置;

(5)输入所有隐藏层神经元样本计算输出层每个神经元的值:

a3=calc_cell(a2,w3,b3),

其中,a3是输出层神经元,w3是长度为10的一维数组是a3的所有输入权重,b3是a3的偏置;

(6)计算第j个样本的误差关于输出层神经元的偏导:

其中,a3为预测值,real_yj是第j个样本的实际值;

(7)计算第j个样本的误差关于隐藏层神经元的偏导:

其中,d3×w3是矩阵相乘;

(8)计算并累加第j个样本的误差关于输出层权重的偏导:

(9)计算并累加第j个样本的误差关于输出层偏置的偏导:

(10)计算并累加第j个样本的误差关于隐藏层权重的偏导:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值;

(11)计算并累加第j个样本的误差关于隐藏层偏置的偏导:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值;

(12)将j++继续第3步,直到j=max_j执行步骤(13);

(13)更新隐藏层、输出层的权重与偏置:

w3=w3+(-k×dw3),

b3=b3+(-k×db3),

w2=w2+(-k×dw2),

b2=b2+(-k×db2);

(14)将j=0继续第3步,直到的值非常小(小到预设值)训练参数完成;

二、模型计算过程:

1、x是实时采集到的二维数组face压缩或放大成10×10二维数组后将每行按顺序排列成长度为100的一维数组x=[x1x2...x99x100];

2、计算隐藏层每个神经元的值:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值,是隐藏层第i个神经元,是长度为100的一维数组是的所有输入权重,的偏置;

3、输入所有隐藏层神经元样本计算输出层每个神经元的值:

a3=calc_cell(a2,w3,b3),

其中,a3是输出层神经元,w3是长度为10的一维数组是a3的所有输入权重,b3是a3的偏置;

4、如果a3大于或等于某一阈值,则判定人脸被被遮挡。

例如,如果a3≥0.95,则判定人脸被遮挡。经过实验测试准确率达到98%。

为了人们的安全出行,公共场合门口急需预警行人是否戴口罩。从而实现快速判断人体脸部是否存在遮挡物。

本发明与现有技术相比,具有如下优点和有益效果:

1、由于目前热像仪测量人体头部体温时一般都是测量整个脸部温度,一旦脸部被遮挡物遮挡的面积比较大而影响测量温度准确度。于是研发一种可实现快速、精确找出人体头部的额头部位的像素温度,本发明实现人体头部被遮挡也能够准确测量人体温度。

2、为了人们的安全出行,公共场合门口急需预警行人是否戴口罩。本发明实现快速判断人体脸部是否戴上口罩或遮挡物,实现快速判断人体脸部是否戴上口罩或遮挡物。

附图说明

图1为神经网络的结构示意图。

图2为1个隐藏层神经元的结构示意图。

图3是输出层神经元的结构示意图。

图4为一种基于热成像仪测量人体脸部温度校准方法的流程图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

如图4,一种基于热成像仪测量人体脸部温度校准方法,包含以下顺序的步骤:

s1、红外热像仪每次采集的温度像素点阵是二维数组pixel;

s2、遍历温度像素数组pixel,寻找温度像素数组pixel中包含32℃-45℃范围的所有数据赋值给一维数组filter;常用体温计量程为35℃-42℃,由于pixel是原始数据没有经过修正,避免漏掉人体的像素点于是选择32℃-45℃范围的数据。

s3、按递增顺序排序一维数组filter;

s4、从排序后的filter中取3/4分位点的数据做为基准,从一维数组filter中取第q3个元素作为基准数,得到基准温度s=filter[q3];

其中,

s5、从二维数组pixel中寻找所有符合s±diff的像素位置标1,不符合s±diff的像素位置标0,赋值给二维数组pixel_bin,并且从二维数组pixel_bin找出值为1的边界并且居中在最大的正方形赋值给二维数组face;

其中,diff是指基准温度误差范围,二维数组pixel_bin的宽高与二维数组pixel相同,二维数组face的宽高不会超过二维数组pixel的宽高;

s6、二维数组face为人脸温度的轮廓,二维数组face的顶部数据为额头部位数据,额头部位数据中所有元素为1对应的温度像素数组pixel元素的值的平均值是额头表面温度temperature;

s7、额头表面温度拟合成体内温度,经过实验得出拟合函数:

body_temperature=0.7797×temperature+9.7271;

其中,body_temperature是人体体内温度。

步骤s1中,所述二维数组pixel已经经过距离拟合、额头表面温度换算为人体温度。

步骤s2中,所述一维数组filter的数组长度范围由pixel决定;如果pixel是32×32的二维数组则filter的最大长度为32×32=1024,其他依此类推。

步骤s1中,所述二维数组pixel为32×32的温度像素点阵:

步骤s2中,所述一维数组filter为:

步骤s3中,所述按递增顺序排序一维数组filter为:

步骤s4中,所述一维数组filter的长度为20,基准温度s=filter[q3]=36.5。

步骤s5中,假设所述diff=0.7,则寻找二维数组pixel所有元素值在36.5±0.7范围的像素位置标1,其它标为0;

从二维数组pixel_bin中找出值为1的边界并且居中在最大的正方形;

在二维数组pixel_bin中值为1横跨3列5行,所以最大的正方形是5×5,将5×3数组居中放进5×5的正方形中,得到二维数组face;

能够看出以上二维数组face是人脸温度的轮廓,第1行是额头部位,第2、3、4行是眼睛到嘴巴的部位,第5行是脖子部位。

步骤s5中,所述二维数组face第1行[01100]每个元素分别对应二维数组pixel中元素,求二维数组face第1行所有元素为1对应的温度像素数组pixel元素的值的平均值是额头表面温度:

temperature=average(p9,9,p9,10)。

如图1、2、3,所述二维数组face还用于判断人脸是否被遮挡物遮挡,具体包括训练模型与模型识别两部分:

一、训练模型部分:

1、数学模型定义:

(1)学习率k=0.1;

(2)输入层神经元数:input_num=100;将二维数组face压缩或者放大成10×10二维数组,然后将每行按顺序排列成长度为100的一维数组,所以input_num=100;

(3)输出层神经元数:output_num=1;由于输出结果要么是被遮挡要么不被遮挡,所以只要输出1个数就能够表示是否被遮挡,接近0表示不被遮挡,接近1表示被遮挡;

(4)隐藏层神经元数:hide_layout_num=10;经过实验得出隐藏层神经元数为10比较好;

(5)激活函数使用因为sigmoid函数将变量映射到0,1之间刚好能够表示接近0表示不被遮挡,接近1表示被遮挡,sigmoid函数的导数函数为sigmoid(z)'=sigmoid(z)(1-sigmoid(z));

(6)误差函数为其中,cj是第j个face样本实际值与输出值的平方误差,ej是第j个face样本的实际值与输出值的差;

(7)隐藏层的权重w2是input_num×hide_layout_num的二维数组,偏置b2是长度为hide_layout_num的一维数组,神经元a2是长度为hide_layout_num的一维数组;

(8)输出层的权重w3是hide_layout_num×output_num的二维数组,偏置b3是长度为output_num的一维数组,神经元a3是长度为output_num的一维数组;

(9)神经元计算函数calc_cell(x,w,b)=sigmoid(x·w+b);其中,x·w是两个数组的内积,x是输入神经元的值,w是权重与每个x数组元素一一对应,b是偏置。

2、模型训练过程:

(1)随机初始化隐藏层的权重w2与偏置b2,输出层的权重w3与偏置b3;j为样本下标,max_j为样本数,为face样本数组,每个样本元素是长度为100的数组;

(2)定义w2、b2、w3、b3的偏导分别为dw2、db2、dw3、db3初始值为0;

(3)x=input_valj是input_val数组第j个数组压缩或放大成10×10二维数组后将每行按顺序排列成长度为100的一维数组x=[x1x2...x99x100];

(4)输入第j个样本计算隐藏层每个神经元的值:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值,是隐藏层第i个神经元,是长度为100的一维数组是的所有输入权重,的偏置;

(5)输入所有隐藏层神经元样本计算输出层每个神经元的值:

a3=calc_cell(a2,w3,b3),

其中,a3是输出层神经元,w3是长度为10的一维数组是a3的所有输入权重,b3是a3的偏置;

(6)计算第j个样本的误差关于输出层神经元的偏导:

其中,a3为预测值,real_yj是第j个样本的实际值;

(7)计算第j个样本的误差关于隐藏层神经元的偏导:

其中,d3×w3是矩阵相乘;

(8)计算并累加第j个样本的误差关于输出层权重的偏导:

(9)计算并累加第j个样本的误差关于输出层偏置的偏导:

(10)计算并累加第j个样本的误差关于隐藏层权重的偏导:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值;

(11)计算并累加第j个样本的误差关于隐藏层偏置的偏导:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值;

(12)将j++继续第3步,直到j=max_j执行步骤(13);

(13)更新隐藏层、输出层的权重与偏置:

w3=w3+(-k×dw3),

b3=b3+(-k×db3),

w2=w2+(-k×dw2),

b2=b2+(-k×db2);

(14)将j=0继续第3步,直到的值非常小(小到预设值)训练参数完成;

二、模型计算过程:

1、x是实时采集到的二维数组face压缩或放大成10×10二维数组后将每行按顺序排列成长度为100的一维数组x=[x1x2...x99x100];

2、计算隐藏层每个神经元的值:

其中,下标i是隐藏层第i个神经元,取值范围是1-10,循环计算第1至第10个隐藏层的神经元值,是隐藏层第i个神经元,是长度为100的一维数组是的所有输入权重,的偏置;

3、输入所有隐藏层神经元样本计算输出层每个神经元的值:

a3=calc_cell(a2,w3,b3),

其中,a3是输出层神经元,w3是长度为10的一维数组是a3的所有输入权重,b3是a3的偏置;

4、如果a3大于或等于某一阈值,则判定人脸被被遮挡。

例如,如果a3≥0.95,则判定人脸被遮挡。经过实验测试准确率达到98%。

为了人们的安全出行,公共场合门口急需预警行人是否戴口罩。从而实现快速判断人体脸部是否存在遮挡物。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1