发明内容
针对上述问题,本发明提供基于立体视觉和红外成像的人体识别方法,该方案通过红外成像模块获取环境的红外图像,并根据人体特征温度进行人体目标提取,同时根据成像区域大小进行筛选,该方法具有检测可靠,误识别率低的优点。
本发明解决其技术问题所采用的技术方案是:
基于立体视觉和红外成像的人体识别方法,包括进行集中处理的处理器,与所述的处理器连接的第一红外成像模组和第二红外成像模组,与所述的处理器连接的存储数据的RAM,还包括提供工作电压的电源,所述的第一红外成像模组和第二红外成像模组的光轴相互平行,基线长度为b,并且参数一致,焦距为f,像素面积为A,所述的处理器内部设置人体识别方法,所述的人体识别方法包括以下步骤:
(1) 所述的处理器每个固定周期通过所述的第一红外成像模组和第二红外成像模组获取场景的红外图像f1(x,y)和f2(x,y),其中x=1~M,y=1~N,M为x轴方向上的最大像素个数,N为y轴方向上的最大像素个数,并存储在所述的RAM中;
(2) 对红外图像f1(x,y)进行二值化处理,得到二值图I0(x,y),采用的方法为:当TL<f1(x,y)<TH,则I0(x,y)=1,否则I0(x,y)=0,其中,TL为人体温度对应红外辐射强度采样值的下限值,TH为人体温度对应红外辐射强度采样值的上限值,那么I0(x,y)=1的区域就是可能为人体目标的兴趣区域;
(3) 对二值图I0(x,y)进行腐蚀运算,消除成像过程中产生的噪声,得到腐蚀图I1(x,y);
(4) 对腐蚀图I1(x,y)进行膨胀运算,去除成像过程中产生的中空区域后得到膨胀图I2(x,y);
(5) 对膨胀图I2(x,y)执行循环腐蚀算法,直到只剩下核心点oj(xj,yj),j=0,1,2......,核心点oj(xj,yj)代表兴趣区域的近似中心;然后,在腐蚀图I1(x,y)中,采用图像区域像素面积计算算法得到核心点oj(xj,yj)所在兴趣区域的像素面积sj;
(6) 采用OpenCV中的视差函数,以红外图像f1(x,y)为基准,计算f1(x,y)和f2(x,y)的视差图像d(x,y);
(7) 从视差图像d(x,y)中查询核心点oj(xj,yj)对应的视差d(xj,yj),然后计算核心点oj(xj,yj)到所述的第一红外成像模组的距离Dj=b*f/d(xj,yj);
(8) 计算核心点oj(xj,yj)对应的成像区域面积Sj=sj*A*b/d(xj,yj);
(9) 如果Tmin≤Sj≤Tmax,则核心点oj(xj,yj)对应成像区域可能为人体,其中Tmin和Tmax为人体成像面积的最小阈值和最大阈值。
本发明的有益效果主要表现在:1、通过红外成像模块获取环境的红外图像,并根据人体特征温度进行人体目标提取,具有抗干扰能力强的优点;2、基于立体视觉测距的方法,获取成像区域的距离,并计算成像区域的实际面积,进行有效性筛选,该方法具有检测可靠,误识别率低的优点。
具体实施方式
下面结合附图对本发明作进一步描述:
参照图1-3,基于立体视觉和红外成像的人体识别方法,包括进行集中处理的处理器1,与所述的处理器1连接的第一红外成像模组3和第二红外成像模组2,与所述的处理器1连接的存储数据的RAM4,还包括提供工作电压的电源5,所述的第一红外成像模组3和第二红外成像模组2的光轴相互平行,并且参数一致,基线长度为b,焦距为f,像素面积为A。
所述的处理器1内部设置人体识别方法,所述的人体识别方法包括以下步骤:
(1) 所述的处理器1每个固定周期通过所述的第一红外成像模组3和第二红外成像模组2获取场景的红外图像f1(x,y)和f2(x,y),其中x=1~M,y=1~N,M为x轴方向上的最大像素个数,N为y轴方向上的最大像素个数,并存储在所述的RAM4中;
所述的处理器1获取的红外图像f1(x,y)和f2(x,y)的数值跟场景中的温度成正比,温度越高数值越大。
(2) 对红外图像f1(x,y)进行二值化处理,得到二值图I0(x,y),采用的方法为:当TL<f1(x,y)<TH,则I0(x,y)=1,否则I0(x,y)=0,其中,TL为人体温度对应红外辐射强度采样值的下限值,TH为人体温度对应红外辐射强度采样值的上限值,那么I0(x,y)=1的区域就是可能为人体目标的兴趣区域;
健康人体温度是36°,在异常情况下,体温也不会偏离很大,因此步骤2中,根据实际测量的人体目标红外图像数据值,设定上下限阈值TL和TH,以此对红外图像f1(x,y)进行二值化,提取可能为人体目标的兴趣区域。
(3) 对二值图I0(x,y)进行腐蚀运算,消除成像过程中产生的噪声,得到腐蚀图I1(x,y);
(4) 对腐蚀图I1(x,y)进行膨胀运算,去除成像过程中产生的中空区域后得到膨胀图I2(x,y);
步骤(3)和(4)是对二值图I0(x,y)进行预处理,可采用3*3的模板。
(5) 对膨胀图I2(x,y)执行循环腐蚀算法,直到只剩下核心点oj(xj,yj),j=0,1,2......,核心点oj(xj,yj)代表兴趣区域的近似中心;然后,在腐蚀图I1(x,y)中,采用图像区域像素面积计算算法得到核心点oj(xj,yj)所在兴趣区域的像素面积sj;
步骤(5)是通过腐蚀算法将膨胀图I2(x,y)中的兴趣区域不断腐蚀缩小,采用3*3的模板,每循环一次,兴趣区域从外围向中心缩进1个像素的范围,直到剩余一个像素点,这个像素点为核心点oj(xj,yj),代表兴趣区域的近似中心。然后根据核心点oj(xj,yj),找到腐蚀图I1(x,y)中对应的区域,并采用图像区域像素面积计算算法计算该区域的像素面积sj,所述的图像区域像素面积计算算法后面进行详细介绍。
(6) 采用OpenCV中的视差函数,以红外图像f1(x,y)为基准,计算f1(x,y)和f2(x,y)的视差图像d(x,y);
可以采用OpenCV中的视差函数cvFindStereoCorrespondenceBM,计算f1(x,y)和f2(x,y)的视差图像d(x,y)。
(7) 从视差图像d(x,y)中查询核心点oj(xj,yj)对应的视差d(xj,yj),然后计算核心点oj(xj,yj)到所述的第一红外成像模组3的距离Dj=b*f/d(xj,yj);
根据双目立体视觉的景深公式,以及基线长度b,焦距f,可以计算出核心点oj到所述的第一红外成像模组3的距离为Dj=b*f/d(xj,yj)。
(8) 计算核心点oj(xj,yj)对应的成像区域面积Sj=sj*A*b/d(xj,yj);
核心点oj所在兴趣区域的像素物理面积为sj*A,根据相似三角形性质,可以计算核心点oj对应的成像区域面积为Sj=sj*A*Dj/f,即Sj=sj*A*b/d(xj,yj)。
(9) 如果Tmin≤Sj≤Tmax,则核心点oj(xj,yj)对应成像区域可能为人体,其中Tmin和Tmax为人体成像面积的最小阈值和最大阈值。
在步骤(5)中,所述的图像区域像素面积计算算法通过如下步骤实现:
(5-1) 设置链表L={ai},其中ai=(p,q),i=1,2,3......,设置表尾指针ep,指向链表L中最新数据的位置,初始值为0,设置兴趣区域的像素面积sj,初始值为1;
步骤(5-1)为后续计算做准备。链表L用于存储从中心向四周辐射搜索的最外围像素。
(5-2) 初始化链表L,如果I1(xj+1,yj)等于1,则sj=sj+1,ep=ep+1,aep=(xj+1,yj),I1(xj+1,yj)=0;如果I1(xj,yj+1)等于1,则sj=sj+1,ep=ep+1,aep=(xj,yj+1),I1(xj,yj+1)=0;如果I1(xj-1,yj)等于1,则sj=sj+1,ep=ep+1,aep=(xj-1,yj),I1(xj-1,yj)=0;如果I1(xj,yj-1)等于1,则sj=sj+1,ep=ep+1,aep=(xj,yj-1),I1(xj,yj-1)=0;
在步骤(5-2)中,以核心点oj(xj,yj)为中心,建立初始搜索路径,是核心点oj上下左右的相邻点。
(5-3) 对于链表L,如果ep等于0,则计算完成,得到图像区域的像素面积值s,结束该过程;如果aep.p-xj>0,并且aep.q-yj≥0,执行步骤(5-4);如果aep.p-xj≤0,并且aep.q-yj>0,执行步骤(5-5);如果aep.p-xj<0,并且aep.q-yj≤0,执行步骤(5-6);如果aep.p-xj≥0,并且aep.q-yj<0,执行步骤(5-7);
步骤(5-3)是循环搜索的入口,因此首先进行结束条件的判断,如果ep等于0,则完成了图像区域的像素面积sj的计算,结束该过程;否则,对链表L中最新数据的位置进行判断,根据处在相对于核心点oj(xj,yj)的象限位置选择不同的步骤进行处理。
(5-4) 建立临时变量(m,n),令m=aep.p,n=aep.q,然后ep=ep-1;如果I1(m+1,n)等于1,则sj=sj+1,ep=ep+1,aep=(m+1,n),I1(m+1,n)=0;如果I1(m,n+1)等于1,则sj=sj+1,ep=ep+1,aep=(m,n+1),I1(m,n+1)=0;返回步骤(3);
(5-5) 建立临时变量(m,n),令m=aep.p,n=aep.q,然后ep=ep-1;如果I1(m-1,n)等于1,则sj=sj+1,ep=ep+1,aep=(m-1,n),I1(m-1,n)=0;如果I1(m,n+1)等于1,则sj=sj+1,ep=ep+1,aep=(m,n+1),I1(m,n+1)=0;返回步骤(3);
(5-6) 建立临时变量(m,n),令m=aep.p,n=aep.q,然后ep=ep-1;如果I1(m-1,n)等于1,则sj=sj+1,ep=ep+1,aep=(m-1,n),I1(m-1,n)=0;如果I1(m,n-1)等于1,则sj=sj+1,ep=ep+1,aep=(m,n-1),I1(m,n-1)=0;返回步骤(3);
(5-7) 建立临时变量(m,n),令m=aep.x,n=aep.y,然后ep=ep-1;如果I1(m+1,n)等于1,则sj=sj+1,ep=ep+1,aep=(m+1,n),I1(m+1,n)=0;如果I1(m,n-1)等于1,则sj=sj+1,ep=ep+1,aep=(m,n-1),I1(m,n-1)=0;返回步骤(3)。
步骤(5-4)是第一象限的搜索方法,先向右再向上;步骤(5-5)是第二象限的搜索方法,先向左再向上;步骤(5-6)是第三象限的搜索方法,先向左再向下;步骤(5-7)是第四象限的搜索方法,先向右再向下。当所有路径到达图像区域的最外围,则链表L中的数据逐个被删除,而没有新数据加入,则最终ep等于0,结束计算过程。