具体实施方式
下面结合附图,对本发明的具体实施方案作进一步详细描述。参见图
1,其具体步骤描述如下:
步骤S101:图像预处理。
对输入的视频帧进行灰度化并使用高斯滤波进行降噪处理。高斯滤波降噪处理的具体操作如下:用一个3×3的高斯卷积扫描视频帧中的每一个像素,用该卷积确定的领域内像素的加权平均灰度值去替代卷积中心像素点的值。
步骤S102:时空兴趣点降噪。
本发明中利用前景掩码对时空兴趣点筛选的方法对时空兴趣点进行降噪,该过程包含了两个子过程:
(1)时空兴趣点的计算
时空兴趣点STIPi的计算方法是对图像的每个像素点计算响应值函数R,时空兴趣点STIPi就是响应值函数R的局部极大值对应的像素点,其结果如图5所示。本发明中的时空兴趣点检测器在空间和时间上分别使用两个独立的滤波器:空间上使用二维的高斯滤波器,时间上使用一维的伽柏滤波器。用I表示当前的视频帧,用g表示高斯内核,用hev和hσd表示一维伽柏正交对,则函数响应函数如下:
R=(I×g×hev)2+(I×g×hσd) 公式(1)
(2)降噪后的时空兴趣点
本发明使用前景掩码对时空兴趣点STIPi进行筛选来降低噪声。首先我们用视觉背景提取器的方法计算前景掩码,设p(x,y,t)为第t帧位于(x,y)位置像素点的灰度值,参见图4,每个位于(x,y,t)的像素点是否为前景的具体过程如下:
步骤S401:当t=1时,初始化像素点(x,y,t)的模型。从(x,y,t)的邻居像素点中随机选择z个像素点的灰度值来初始化(x,y,t)的样本集{p1,p2,...,pz}(x,y,t),该样本集可构成该像素点的灰度值模型,其中一般设置为z=20。
步骤S402:t=t+1,读取下一帧的新像素点,转至步骤S403,如果没有新的像素点,算法结束。
步骤S403:阈值判断。将{p1,p2,...,pz}(x,y,t-1)中的灰度值与以p(x,y,t)为中心、以R为半径的球体SR(p(x,y,t))范围内的灰度值进行对比。灰度值p(x,y,t)周围球体SR(p(x,y,t))与灰度值样本集{p1,p2,...,pz}(x,y,t-1)交集的势用符号#{SR(p(x,y,t)∩{p1,p2,...,pz}(x,y,t-1)}表示,最小阈值用#min表示(#min为经验值),如果#{SR(pt(x)∩{p1,p2,...,pz})}>#min,转至步骤S404;否则,转至步骤S405。
步骤S404:判断(x,y,t)为背景像素点,设置像素点(x,y,t)的掩码mask=0,更新当前像素点前景计数count=0,该像素点有的概率更新自身样本集,该像素点有的概率更新邻居的样本集。转至步骤S402。
步骤S405:判断(x,y,t)为前景像素点,设置像素点(x,y,t)的掩码mask=1,更新当前像素点前景计数count=count+1。
步骤S406:如果连续多帧被判为前景,即像素点前景计数大于前景计数阈值count>Tfore(Tfore为经验值),转至步骤S407,否则转至S402。
步骤S407:该像素点有的概率更新自身样本集,转至步骤S402。
上述步骤中更新自身样本集的方法均为从当前像素点(x,y,t)的邻居像素点中随机选择一个像素点随机替代样本集{p1,p2,...,pz}(x,y,t-1)中的一个像素点。当计算得到前景掩码后,我们用前景掩码对时空兴趣点STIPi进行筛选,保留前景掩码区域的时空兴趣点STIPi,筛选后的时空兴趣点如图7所示。
图6为视频帧前景提取后的效果图和掩码图。
步骤S103:局部事件表示。
计算步骤S102中降噪后的时空兴趣点STIPi的HOG3D特征di,将其作为低级特征描述局部事件。计算局部区域内的梯度和方向并投票到直方图中可获得HOG3D特征,参见图8,具体过程如下:
步骤S801:将时空兴趣点STIPi的局部区域rs划分成M×M×N个直方图单元celli,一般设置M=4,N=4。
步骤S802:将直方图单元celli划分成S×S×S个小块blocki,一般设置S=3。
步骤S803:求取小块blocki的平均梯度对于给定视频序列v(x,y,t),它关于x,y,t的偏微分用表示。那么的积分视频可以表示为:
关于和的积分视频以此类推。设小块blocki的长宽和时间维度大小分别为w,h,l,开始坐标为(x,y,t),那么blocki关于x方向的平均梯度计算公式为:
关于y和t方向平均梯度公式以此类推。经过本过程的计算,我们可以得到每个小块blocki关于x,y,t方向的平均梯度
步骤S804:将小块blocki的平均梯度投票到直方图,求取投票向量qb。设正二十面体每个面的中心向量为pi=(xi,yi,ti)T,中心向量的集合为P=(p1,p2,...,pn)T,黄金比例值为那么pi分别为
设梯度向量在某个面上的中心向量上的投影大小为qbi,那么可以根据下式计算:
为了保证每个梯度向量只能投票到直方图中的一个维度中,我们设置一个中心向量到另一个中心的投影为阈值,即
t=pi T·pj 公式(7)
投影向量qb中每一维的值均减去阈值t,若减去之后小于0则设置为0,否则保持不变。将所得到的向量记为q'b,q'b中有且只有一个维度的值是大于0的。最后将q'b归一化乘以梯度向量的大小就可以得到最终的投票向量qb了,共20维。
步骤S805:将直方图单元celli内的小块blocki的投票qb向量累加得到直方图单元celli的向量hc,向量hc共20维,计算公式如下:
步骤S806:将多个直方图单元celli的向量hc串联起来,构成时空兴趣点STIPi的HOG3D特征di,描述符的维度为20×M×M×N维。
步骤S104:局部检测模型建立。
经过步骤S103,我们获得了时空兴趣点STIPi的特征向量di。在本阶段,首先对时空兴趣点的特征向量di进行K均值聚类,获得训练数据的初级码本C,然后计算局部K近邻距离阈值T1。具体过程如下:
首先对时空兴趣点向量di进行聚类,训练样本Φ中存在Nd个时空兴趣点特征向量di,参见图9,聚类过程如下:
步骤S901:随机初始化。将训练样本Φ中所有的特征向量di随机划分到NC个聚类样本子集Φm中,Nm为第m个样本子集Φm中特征向量的总个数,dn为样本子集Φm中第n个特征向量。训练数据的初级码本C由NC个初级码本项cm构成,即初级码本项cm是对应的样本子集Φm的聚类中心,计算公式如下:
计算当前状态下的准则函数,
其中,||dn-cm||2表示向量dn与初级码本项cm之间的欧氏距离。
步骤S902:从训练样本Φ中随机选取一个特征向量di,假设当前状态下特征向量di位于第j个样本子集Φj,其中1≤j≤NC。
步骤S903:判断样本子集Φj是否只有一个特征向量,如果样本子集中只存在一个特征向量,即Nj=1,转到步骤S902,否则继续。
步骤S904:计算特征向量di划分到各个样本子集中对准则函数Je的影响ρ,
Nt为第t个样本子集Φt中特征向量的总个数;
初级码本项ct是对应的第t个样本子集Φt的聚类中心;
步骤S905:判断是否需要移动特征向量di到其它的样本子集。
遍历所有的样本子集,ρk为最小的ρt,如果ρk<ρj(其中ρj通过公式(14)获取),则把特征向量di从样本子集Φj移动到ρk所对应的样本子集Φk中;否则,转至步骤S902。
步骤S906:重新计算所有的初级码本项cm,m=1,...,NC和准则函数Je;
步骤S907:判断是否连续10次准则函数的变化小于阈值TJ,TJ为经验阈值。如果连续10次迭代Je的变化小于阈值TJ,则结束本聚类过程,输出码本;否则,转到步骤S902。
所述的准则函数的变化为前后准则函数差的绝对值。
时空兴趣点特征di完成K均值聚类后,计算局部K近邻距离阈值Tl,设Ci是与样本向量di距离最近的Kl个初级码本项的集合,Kl为经验阈值,ct是集合Ci中第t个初级码本项,则阈值的计算公式为
步骤S105:判断局部异常事件。
经过步骤S104,我们获取了训练数据的初级码本C和局部K近邻距离阈值Tl。本阶段,我们将使用阈值Tl对测试数据中的局部异常事件进行判断。我们用表示测试数据中时空兴趣点特征di到初级码本C的KNN距离,Ci是与向量di距离最近的Kl个初级码本项的集合,ct是集合Ci中第t个初级码本项,那么的计算公式如下:
当KNN距离超过KNN阈值Tl时,特征向量di对应的区域发生局部异常事件。
图2为基于低级特征的局部异常检测框架图。
步骤S106:全局事件表示。
参见图10,全局事件表示的具体过程如下:
步骤S1001:时空兴趣点构成集合体。时空兴趣点表示局部事件,对全局事件的表示需要更大范围的采样。在空间上10个像素的采样间隔在空间上滑动3D窗口获得由时空兴趣点构成的集合体。Rk是第k个采样点的时空邻域,是时空兴趣点STIPi在时空邻域Rk中的相对位置,是STIPi与初级码本C的KNN距离,Ci∈C是STIPi的K近邻的码本集合,那么集合体的定义如下:
步骤S1002:获得合格的集合体。由于建立集合体的目的是学习事件的交互模式,需要集合体当中包含一定数量的时空兴趣点,因此需要对集合体进行质量筛选来获得合格的集合体。集合体的质量控制函数是与集合体重时空兴趣点覆盖的体积及集合体本身的体积有关的。质量控制函数q(Ek)的计算公式如下:
当一个集合体Ek的质量控制函数q(Ek)大于质量阈值Tq时,Ek为合格的集合体,否则对集合体Ek进行丢弃。根据经验,一般设置Tq=0.2。
步骤S107:建立全局事件模板。
通过步骤S106,我们获得了大量的全局事件,接下来,我们将通过自底向上的贪婪聚类算法聚类,建立全局事件的模板。贪婪聚类算法的使用需要计算两个集合体之间在语义和结构上的相似性,示例见图11。首先将集合体的区域划分成nr个3D子区域,然后通过共同出现的概率计算两个集合体的相似度。设集合体Ek和El的相似度为sim(Ek,El),集合体Ek的发生位置uk是一个nr×1的掩码向量,集合体E1的发生位置u1是一个nr×1的掩码向量,表示相应的3D子区域内是否存在时空兴趣点;共生矩阵Qk,l是一个nr×nr的二值对角矩阵,对角线上的第i个数据表示集合体Ek和El的第i个3D子区域是否存在匹配的码本,那么相似性的计算公式如下:
参见图12,贪婪聚类算法的具体过程如下:
步骤S1201:初始化高级码本,取一个合格的集合体E1,设置高级码本ε1=Ej,高级码本集ε={ε1},高级码本数量k=1;
步骤S1202:任取一个未处理的合格的集合体Ej;
步骤S1203:计算与集合体Ej最高的相似度值s以及相似度最高的模板i*,计算公式如下:
s=maxi sim(Ej,εi) 公式(20)
i*=arg maxi sim(Ej,εi) 公式(21)
步骤S1204:阈值判断。如果相似度值s大于相似度阈值Ts,说明该集合体与某个码本很相似,转至步骤S1205,否则转至步骤S1206。相似度阈值Ts为经验值。
步骤S1205:更新码本。如果码本的质量函数小于等于质量阈值Tq,则对码本进行更新,更新公式否则转至步骤S1207;
步骤S1206:增加码本项。将Ej作为新的码本加入到高级码本ε,高级码本数量k=k+1,转至步骤S1207。
步骤S1207:如果还有未处理的集合体Ej,转至步骤S1202,否则算法结束。
步骤S108:构建全局检测模型。
参见图13,构建全局检测模型的具体过程如下:
步骤S1301:计算高级码本εk的最小二乘准则函数。
假设有已知的R+1组数据,(x1,0,x2,0,...,xm,0,y0),(x1,1,x2,1,...,xm,1,y1),……,(x1,R,x2,R,...,xm,R,yR),其中第j组数据为(x1,j,x2,j,...,xm,j,yj)。m元n次多项式的通式公式如下:
其中,
j1=n;
j2=n-i1;
j3=n-i1-i2;
...
jm=n-i1-i2-...-im-1;
将多项式的系数依次编号为a0,a1,···,aq-1,其中q为多项式的总项数,则
当m元n次多项式的每一项都为1时,该多项式的值就是多项式的总项数q,经过计算对于m元n次多项式总项数为
那么,我们最小二乘的准则函数是
每一高级码本εk都存在一组数据,假设服从三元二次多项式,将作为输入数据代入上式,得到关于高级码本εk的最小二乘准则函数。
步骤S1302:求解全局检测模型的参数,即高级码本εk的参数。
当最小二乘准则函数取得最小值的时候,在x1,x2,···,xR的处值y与在该处的函数值差值的平方和最小,即该多项式函数得到了最佳拟合,接下来的任务就是如何求取多项式的参数。设m元n次多项式每一项变量的积用wi表示,每一项系数仍用ai表示,则拟合的多项式
根据最小二乘原理,可以获得线性方程组如下:
对此线性方程组进行求解,就可得m元n次多项式的系数a0,a1,...,aq- 1。同理对高级码本εk准则函数进行计算,得到高级码本εk关于最小二乘准则函数的参数集合θi={a0,a1,...,a9}。对于每个测试数据都会得到一个关于高级码本εi的KNN距离的估计值P(vi),设vi=[vi,1,vi,2,vi,3]T,那么
步骤S109:判断全局异常事件。
本阶段将根据测试的集合体判断全局异常事件,参见图14,具体过程如下:
步骤S1401:寻找与该测试集合体最匹配的模板。对于测试的集合计算与Ek模型匹配度最高的高级码本,设集合体Ek中包含了nk个时空兴趣点,Pg(vi)为vi在第g个高级码本下的估计值,那么集合体Ek与高级码本εi的匹配度计算公式如下:
与集合体匹配度最高的码本计算公式为
g*=argg min Gg(Ek) 公式(31)
步骤S1402:最小二乘距离与阈值比较判断全局异常事件。为了更精确的定位异常事件,对测试集合体Ek中的时空兴趣点计算与第g*个高级码本的最小二乘距离,公式如下:
当大于全局阈值Tg时,该时空兴趣点STIPi所在位置判断为全局异常事件。Tg为经验阈值。
图3为基于高级特征的全局异常检测框架图;
图15为本发明局部异常事件检测结果图;
图16为本发明全局异常事件检测结果图。