发明内容
本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种基于图像信息的客流量识别统计方法。
本发明解决其技术问题所采用的技术方案是:一种基于图像信息的客流量识别统计方法,包括以下步骤:
1)确定目标检测区域;设置目标图像检测区域ROI的四个参数:ROI.X代表检测区域ROI左上角点的x轴坐标,ROI.Y代表检测区域ROI左上角点的y轴坐标,ROI.Width代表检测区域ROI的宽度,ROI.Height代表检测区域ROI的高度;
2)确定目标检测区域没有待检测目标存在时的背景图像;采用多幅图像平均法,对10~20帧原始图像叠加求取平均值,获取目标不存在时视频图像的背景图像,记为I0;
3)对采集的视频图像的每帧图像进行处理,将存在运动目标图像帧按顺序存入数组中;
将采集到的视频图像的第i帧图像进行分块处理,记为当前帧图像,然后选定目标图像检测区域ROI;
对当前帧图像进行二值化后、距离变换后,再通过均值滤波或亚取样,得到当前帧图像的增强图像;然后与经过1)~3)步处理过的第i-1帧图像进行差分,将选定的目标图像检测区域ROI的差值记为NZ;
将运动检测差值NZ与设定的报警最小元素数量限定值N0作比较:若NZ<N0,则没有运动存在,自动采集第i+1帧原始图像,返回第3)步;若NZ≥N0,则保存当前帧图像,记为I1;
对当前帧图像和背景图像I0进行差分,将选定的目标图像检测区域ROI的差值记为NB;
将目标检测差值NB与设定的报警最小元素数量限定值N0’作比较:若NB<N0’,则没有待检测目标存在;若NB≥N0’,则报警存在运动的目标,然后将存在运动目标的当前帧图像存入数组MovingImages[i][j]中;
4)根据图像帧是否连续,对数组中的图像帧进行分块;
(1)将目标图像检测区域ROI的横坐标的最小值和最大值分别保存到对应的变量xin和xout中,然后读取数组MovingImages[i][j]中的第一帧原始图像序列,记为多目标跟踪统计计数的当前帧目标图像;
(2)定义计数变量PersonIn和PersonOut,分别记录进入和离开的目标数量,初始化设置为0,并规定沿X方向为进,逆X方向为出;
(3)对当前帧目标图像进行基于差分法的自适应背景分割,将获得的运动区域图像进行二值化,用(与头部大小相称的)2×2结构算子对目标图像的二值图像进行形态学腐蚀,以去除伪目标(即非头部图像),再通过形态学膨胀还原实际目标的大小,获得只含有运动目标连通域的二值图像;
(4)遍历只含有运动目标连通域的二值图像,获取各个目标连通域Area[n][i]的特征值,存入相应的链表中,其参数包括:图像索引Num,目标索引Index,目标质心的横坐标X和纵坐标Y,对应原图像目标区域的灰度平均值Gray,目标区域矩形包围窗口的长度Length和宽度Width,目标区域的面积大小Space;
(5)根据获得的目标连通域Area[n][i]的特征值,用Kalman滤波来预测下一帧图像中目标连通域Area[n+1][i]的质心运动位置p(xi,yi)的搜索区域;
(6)采集下一帧图像,对其进行步骤(2)的操作;
(7)同步骤(3);
(8)根据改进的代价函数,在当前帧图像的Kalman预测搜素区域匹配下一帧图像各目标连通域,计算当前帧目标连通域Area[n][i]与下一帧图像对应搜索区域内所有目标连通域的代价函数值,并找出其中最小值(假设与下一帧目标Area[n+1][j]代价函数值最小);
(9)计算目标连通域Area[n][i]和Area[n+1][j]的质心距离d,并与质心距离限定值d0作比较。若d≤d0,则目标连通域Area[n+1][j]为目标连通域Area[n][i]的后续,用目标连通域Area[n+1][j]的特征值替代目标连通域Area[n][i]的值,并对目标连通域Area[n+1][j]做标记,建立目标链;
(10)若d>d0,则目标连通域Area[n][i]在下一帧中没有后续,目标连通域Area[n][i]可能离开图像观测窗口或者暂时静止,需判断目标连通域Area[n][i]的质心坐标X的位置:
5)对分块后的图像帧进行统计计数;
具体如下:
5.1)将目标图像检测区域ROI的横坐标的最小值和最大值分别保存到对应的变量xin和xout中,然后读取数组MovingImages[i][j]中的第一帧原始图像序列,记为多目标跟踪统计计数的当前帧目标图像;
5.2)定义计数变量PersonIn和PersonOut,分别记录进入和离开的目标数量,初始化设置为0,并规定沿X轴正方向为进,逆X轴正方向为出;
5.3)对目标连通域Area[n][i]的质心坐标X的位置:
当X≤xin时,如果目标连通域Area[n][i]的运动轨迹的第一个质心横坐标X1≤xin,则说明该目标一直在预留区内徘徊,任何计数器不动作;如果X1>xin,则说明目标离开跟踪窗口,方向为出,出计数器PersonOut加1,并清除目标连通域Area[n][i]的目标链;
当X>xout时,如果目标连通域Area[n][i]的运动轨迹第一个质心坐标横坐标X1≥xout,则说明该目标一直在预留区内徘徊,任何计数器不动作;如果X1<xout,则说明目标进入跟踪窗口,方向为进,进计数器PersonIn加1,并清除目标连通域Area[n][i]的目标链;
当xin<X<xout,则说明目标连通域Area[n][i]在检测区内运动,其最后的运动方向不明,保留其特征值,等待下一帧中该目标的跟踪;若下一帧中有匹配目标,则按上述步骤建立目标链,否则作为干扰,丢弃;
5.4)跟踪窗口中的所有目标连通域进行匹配后,验证当前帧中所有目标是否被跟踪;若存在未被跟踪的目标,则判断其质心横坐标是否满足X≤xin和X>xout中的任意一个,满足则表示有新目标出现,为其建立新的目标链,获取并记录特征值,转入步骤4中的(3);不满足则判断为干扰,丢弃;
5.5)当前帧图像中所有目标识别计数结束后,计算当前进计数器PersonIn和出计数器的差值PersonOut的差值,记为当前客流量CustomCounting,当前帧图像的目标识别计数结束;
5.6)依次对图像数组MovingImages[i][j]中每帧图像的目标连通域进行识别和自动计数,直到图像数组MovingImages[i][j]中的图像序列全部处理完毕,则整个目标识别计数结束。
按上述方案,所述采用目标链代价函数对多目标进行跟踪匹配,步骤是:
1)获取第k帧图像中多个目标的三个特征值:目标质心坐标、平均灰度和目标区域的面积,其中目标i的特征值分别记为:Point[k][i]、Gray[k][i]和Space[k][i];
2)利用Kalman滤波预测第k帧图像中目标i在第k+1帧图像中的搜索区域,遍历目标i在第k+1帧图像中的搜索区域,发现n个目标对象,获取他们的特征值,其中目标j的特征值分别记为:Point[k+1][j]、Gray[k+1][j]和Space[k+1][j];
3)分别求取第t+1帧图像目标i的搜索区域中n个目标对象与第t帧图像中目标i的3个特征值的变化程度,求取最大值分别记为MaxPoint、MaxGray和MaxSpace,具体计算公式如下:
MaxPoint[i]=Max(sqrt((Point[k][i].x-Point[k+1][m].x)*(Point[k][i].x-Point[k+1][m].x)+(Point[k][i].y-Point[k+1][m].y)*(Point[k][i].y-Point[k+1][m].y)))
MaxGray[i]=Max(sqrt((Gray[k][i]-Gray[k+1][m])*(Gray[k][i]-Gray[k+1][m])))
MaxSpace[i]=Max(sqrt((Space[k][i]-Space[k+1][m])*(Space[k][i]-Space[k+1][m])))
其中,1≤m≤n,表示目标i的搜索区域中n个目标中任意一个;其中sqrt为开平方根运算;
4)求取第t帧图像中目标i和第t+1帧图像中目标j的质心距离大小D[i][j]、灰度变化程度H[i][j]和面积变化程度S[i][j],相应的计算公式如下:
D[i][j]=sqrt((Point[k][i].x-Point[k+1][j].x)*(Point[k][i].x-Poin t[k+1][j].x)+(Point[k][i].y-Point[k+1][j].y)*(Point[k][i].y-Point[k+1][j].y))/MaxPoint[i];
H[i][j]=sqrt((Gray[k][i]-Gray[k+1][j])*(Gray[k][i]-Gray[k+1][j]))/MaxGray[i];
S[i][j]=sqrt((Space[k][i]-Space[k+1][j])*(Space[k][i]-Space[k+1][j]))/MaxSpace[i]
5)代价函数V[i][j]可由步骤4.5.4)所求三个特征值变化量求得:
V[i][j]=αD[i][j]+βH[i][j]+γS[i][j];
其中α、β、γ三个参数系数表示三个特征值的影响因子,可按照实际情况调整。
按上述方案,所述采用Kalman滤波预测搜索区域的具体步骤是:
1)假设图像中各目标质心的运动为匀速运动,包围窗口面积基本不变,初始化目标在x方向的运动速度Vx,在y方向上的运动速度Vy,包围窗口长宽的变化速度Vt,图像采样步长T(即每帧图像序列之间的时间间隔);
2)基于第k-1帧图像中的目标i,获取第k帧图像中对应目标i的特征值的最优估算结果:质心位置X坐标Point[k][i].x和Y坐标Point[k][i].y、包围窗口的长度Win[k][i].length和宽度Win[k][i].width、两特征量的偏差估计P[k][i];
3)基于第2)步获得的结果,计算第k+1帧图像中目标i的特征值预测值和偏差估计,具体的计算公式如下:
Point[k+1][i].x=Point[k][i].x+Vx*T;
Point[k+1][i].y=Point[k][i].y+Vy*T;
Win[k+1][i].length=Win[k][i].length+Vt*T;
Win[k+1][i].width=Win[k][i].width+Vt*T;
P[k+1][i]=P[k][i]+Q;
4)根据第k+1帧图像中目标i的特征值预测值和偏差估计,计算对应的Kalman增益:
Kg[k+1][i]=P[k][i]/(P[k][i]+R)
计算第k+1帧图像中目标i的各个特征值和偏差估计的最优估计值,并更新他们的预测值:
Point[k+1][i].x=Point[k+1][i].x+Kg[k+1][i]*(Z[k+1][i].x-Point[k+1][i].x);Point[k+1][i].y=Point[k+1][i].y+Kg[k+1][i]*(Z[k+1][i].y-Point[k+1][i].y);
Win[k+1][i].length=Win[k+1][i].length+Kg[k+1][i]*(Z[k+1][i].length-Win[k+1][i].length);
Win[k+1][i].width=Win[k+1][i].width+Kg[k+1][i]*(Z[k+1][i].width-Win[k+1][i].width);
P[k+1][i]=(1-Kg[K+1][i])*P[k][i];
5)由此可得第k帧图像中目标i在第k+1帧中的预测搜索区域(X,Y)为:
Point[k+1][i].x-1.5*Win[k+1][i].length/2≤X≤Point[k+1][i].x+1.5*Win[k+1][i].l ength/2;
Point[k+1][i].y-1.5*Win[k+1][i].width/2≤Y≤Point[k+1][i].y+1.5*Win[k+1][i].w idth/2。
按上述方案,所述步骤4的(8)中目标链中目标的关联匹配和数据关联的算法的实现步骤是:
在目标链的关联匹配中,若出现第k帧图像中目标i与第k+1帧图像中目标i的预测搜索区域中第j个目标和第m个目标的代价函数值相等,且同时为最小,则此时目标的跟踪匹配会发生冲突,则采用以下改进算法,完成目标的正确跟踪匹配;
计算第k帧图像中目标i和第k+1帧图像中目标j和m的代价函数,若代价函数值相等且为最小,则将上述3个目标的灰度特征值分别记为Gray[k][i]、Gray[k+1][j]、Gray[k+1][m];
分别求取第k帧图像中目标i和第k+1帧图像中目标j、m的平均灰度变化大小,计算公式为:
Value1=sqrt((Gray[k][i]-Gray[k+1][j])*(Gray[k][i]-Gray[k+1][j]));
Value2=sqrt((Gray[k][i]-Gray[k+1][m])*(Gray[k][i]-Gray[k+1][m]));
若Value1<Value2,则第k+1帧图像中的目标j为第k帧图像中目标i的后续,用第k+1帧图像中的目标j的特征值代替第k帧图像中目标i的特征值,更新目标链,反之,则第k+1帧图像中的目标m为第k帧图像中目标i的后续;
与第k帧图像中的目标i没有匹配成功的可与第k帧图像中的其他目标匹配,或者保留等待下一帧中找到匹配目标。
本发明产生的有益效果是:本发明提供的基于图像信息的客流量识别统计方法为此类多目标识别与跟踪计数问题,提供了一种可供参考的解决途径,该方法实时性强、鲁棒性好、智能性高、稳定性强。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图10所示,一种基于图像信息的客流量识别统计方法。
某商场入口处1的顶端安装摄像头2,PC主机通过图像采集卡3与摄像头2进行通信,将采集的图像信息经处理后在显示器5上显示,利用人顶部的图像识别和统计人员的流量,现场硬件安装示意图如图1所示。
第一步、运动目标的检测识别
实验采用的图像分辨率为600×560。为了减少图像处理量,对图像进行分块处理,图像的大小为150×140。摄像头采集图像的速度为:4帧/s。具体步骤如下:
1)设置目标图像检测ROI区域的四个参数:ROI.X代表ROI区域左上角点x轴坐标,ROI.Y代表ROI区域左上角点y轴坐标,ROI.Width代表ROI区域宽度,ROI.Height代表ROI区域高度。本例中,设置:ROI.X=40,ROI.Y=50,ROI.Width=50,ROI.Height=60。
2)采用多幅图像平均法,对M帧图像叠加求取平均值,获取某段视频图像在没有目标存在时的背景图像,如图2。
3)将采集到的该视频图像的第i帧图像进行分块处理,记为当前帧参数确定图像,并选定目标图像检测ROI区域,如图3所示。
4)对当前帧图像进行二值化后,再通过距离变换和均值滤波或亚取样,得到当前帧图像的增强图像;然后与经过1)~3)步处理过的第i-1帧图像进行差分,将选定ROI区域的差值记为NZ。
5)将NZ与设定的报警最小元素数量限定值N0作比较:若NZ<N0,则没有运动存在,自动采集i+1帧图像,返回第2)步重新开始;若NZ≥N0,则保存第i帧图像,记为I1。
6)对第i帧图像I1和背景图像I0进行基于差分法的自适应背景分割,再将得到的图像二值化,并进行形态学腐蚀,将选定ROI区域的差值记为NB,差值图像如图4所示。
7)将NB与设定的报警最小元素数量限定值N′0作比较:若NB<N′0,则没有待检测目标存在,自动采集i+1帧图像,返回第2)步重新开始;若NB≥N′0,则报警存在运动的目标,并将该图像帧存入数组MovingImages[i][j]中,以准备做后续的图像识别与处理。
第二步、多目标的跟踪与统计计数
根据读取的视频图像,设定好ROI检测区域,将其横坐标的最小和最大值保存到变量xin和xout中,并选择有运动目标出现的连续图像帧,依次保存在数组MovingImages[i][j]中,读取该数组中的图像序列的第一帧目标图像,将其记为多目标跟踪统计计数的当前帧图像,然后按照以下步骤根据人头顶的视频图像进行客流量的在线识别计数,将计数结果存储到计数变量PersonIn和PersonOut中,分别记录进入和离开的目标数量,计数变量初始值设为0。本例中,设置xin=40,xout=100。
1)启动进出两个计数器,并规定沿x正方向为进,x反方向为出。
2)对获得的当前帧目标图像二值化后,选用合适的结构算子对其进行形态学腐蚀,以去除伪目标(即非头部图像),取得只含有运动目标连通区域的二值图像。
3)遍历该二值图像,获取各个目标连通域Area[n][i]的特征值,并存入相应的链表中,其参数包括:图像和目标索引Num和Index,目标质心的横坐标X,纵坐标Y,对应原图像目标区域的灰度平均值Gray,目标区域矩形包围窗口的长度Length和宽度Width,目标区域的面积大小Space,如图4所示,两个目标的质心坐标分别为:(83.8530,90.2874)、(118.8503,33.7245);平均灰度分别为:85.9029、77.204;目标包围窗口分别为:30*29、34*27;目标区域面积大小分别为:762、755。
4)根据获得的目标Area[n][i]特征值,基于Kalman滤波预测下一帧图像中目标连通域Area[n+1][i]的质心运动位置p(xi,yi)和区域。
5)采集下一帧图像,对其进行步骤1)的操作。
6)同第二步的步骤2)。
7)根据改进的代价函数,在当前帧图像的Kalman预测搜素区域匹配下一帧图像各目标连通域,计算当前帧目标Area[n][i]与下一帧图像对应搜索区域内所有目标的代价函数值,并找出其中最小值(假设与下一帧目标Area[n+1][j]代价函数值最小)。
8)计算目标Area[n][i]和Area[n+1][j]的质心距离d,并与距离限定值d0作比较。若d≤d0,则目标Area[n+1][j]为目标Area[n][i]的后续,用目标Area[n+1][j]的特征值替代目标Area[n][i]的值,并对该目标Area[n+1][j]做标记,建立目标链。
9)若d>d0,则目标Area[n][i]在下一帧中没有后续目标,该目标可能离开图像观测窗口或者暂时静止,需判断目标Area[n][i]的质心坐标:
当X≤xin时,如果该目标Area[n][i]运动轨迹的第一个质心横坐标X1≤xin,则说明该目标一直在预留区内徘徊,任何计数器不计数;如果X1>xin,则说明目标离开跟踪窗口,方向为出,出计数器PersonOut加1,并清除目标链Area[n][i]。
当X>xout时,如果该运动目标轨迹第一个质心坐标横坐标X1≥xout,任何计数器不计数;如果X1<xout,则说明该目标进入跟踪窗口,方向为进,进计数器PersonIn加1,并清除目标链Area[n][i];
当xin<X<xout,则说明目标Area[n][i]在检测区内运动,其最后运动的方向不明,保留其特征值,等待下一帧中该目标的跟踪。若下一帧中有匹配目标,则按上述步骤建立目标链,否则作为干扰,丢弃。
10)所有被跟踪目标进行匹配后,验证当前帧中所有目标是否被跟踪。若存在未被跟踪的目标,则判断其质心横坐标是否满足:X≤xin或者X>xout,满足则是有新目标出现,为其建立新的目标链,设置特征值;不满足则可能为干扰,丢弃,如图5所示。本例中,两目标在下一帧中匹配目标的特征值:质心坐标分别为:(80.7355,91.3539)、(116.1797,34.5599);平均灰度分别为:86.9632、77.7487;目标包围窗口分别为:31*29、35*28;目标区域面积大小分别为:760、768。
11)每帧图像中所有目标识别计数结束后,即可计算当前进计数器PersonIn和出计数器的差值PersonOut的差值,赋给变量CustomCounting,即为当前客流量的统计结果。本例中当前帧的PersonIn=2,PersonOut=0,CustomCounting=2-0=1。
识别匹配结果在原图中显示,如图6所示,当前帧图像的目标识别计数结束。
按照步骤1)~10)依次对每帧的目标进行识别和自动计数,直到该图像数组MovingImages[i][j]中的图像全部处理完毕,将各时刻两个计数器PersonIn和PersonOut的值及其差值CustomCounting存入数据库,即可对客流量进行统计分析。本例中,最终客流量统计值为CustomCounting=572,所用的一段视频中,识别计数过程中某两目标在检测区域各帧图像中的特征量如图7所示,根据识别得到的数据重现该两目标质心和目标包围窗口运动轨迹分别如图8和图9。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。