运动目标检测就是将视频序列中的运动目标与所在的背景图像相分离,从而可以获得目标的前景,也就是确切的运动目标。它是计算机视觉研究领域的一项关键技术,属于智能视频监控与目标跟踪系统中的最底层,检测结果的优良程度与后续目标跟踪与行为理解的效果有密切关系[1]。
然而,运动目标检测如果要达到一个良好的效果也并不容易,主要原因是由于运动目标检测中背景环境的复杂性和运动目标的不确定性。现实环境中光照可能会发生突变现象,运动目标运动过程中途经的路线也没有任何规律可言,环境背景中的事物可能排列的杂乱无章等等,这些不利因素都为运动目标检测算法的设计和选用上增加了不少难度[2]。
目前比较常用的运动目标检测算法有背景减除法、光流法和帧间差分法。光流法是通过估计视频帧中物体运动过程中产生的运动场,并分析其变化,由于背景物体的运动场和运动物体的运动场有所区别,从而把运动目标从背景中分离出来。该方法的检测精度相对较高,但是光流场的计算却十分复杂,在不做任何改进的情况下很难达到实时性[3]。帧间差分法的基本思想是在视频序列中的相邻两帧或者相邻三帧之间利用运动目标的差异进行差分运算,并对结果作阈值化处理并提取出运动目标,视频帧相减可以去掉灰度值未发生变化的部分。该算法最大的优点就是速度快,背景不用进行积累,而且对光照变化不敏感,算法复杂度较低,但是对环境噪声十分敏感[1],阈值选取较低会使噪声增大,而选取较高则会使运动目标不完整,所以既要抑制住图像中的噪声还要保留有效且完整的运动目标就有一定的困难。
本文提出一种改进的运动目标检测算法,该算法结合LK光流法与三帧差分法。一般来说,在光流法检测得出的区域内得到运动目标的概率较大,而在此区域外得到目标的概率相对较小。于是,可以利用Lucas-Kanade光流法计算得到运动目标的大致矩形区域。在得到的区域内与三帧差分法结合得到正确的运动目标,在此区域之外,则可以利用三帧差分法通过较高阈值的分割得到,从而使检测到的运动目标更加完整。该算法通过区域分割与帧差法的阈值分割相结合,并且在光流法计算得出的矩形区域内外选取不同的阈值,从而减弱噪声对检测结果造成的影响。
1 帧间差分法比较在同一背景下,不同时刻的2幅图像,比较的结果便反映了一个正在运动的物体在当前背景下运动的结果。一般常用的方法就是对两幅图像做“差分”运算,并根据差分结果得到物体的运动信息。在相减后的图像中,灰度值未发生变化的区域就被减掉。帧间差分法就是通过对视频序列中相邻两帧图像做差分运算然后经阈值化来得到运动目标区域的方法,而且该方法适用于多种情况下,具有良好的实用性[3]。帧间差分法的原理是
(1) |
式中:T是设定的阈值,若阈值选取过大,则会使检测到的目标有较大的缺失,检测不完整;若选取过小,则又会混入较大的噪声,影响最后的检测效果。此外,帧差法在检测过程中时常还会出现双影现象,影响检测的效果。为了改善这些问题,很多文献提出了三帧差分法。
三帧差分法是对两次二帧差的差分图像再次进行相关操作,即将当前帧与上帧做差分运算,下一帧再与当前帧做差分运算,然后这两次差分运算的结果再进行逻辑与运算操作,最后通过设定好的阈值进行分割,提取出运动目标。三帧差分法可以克服二帧差分容易产生的双影问题,对于噪声也起到了一定程度上的抑制作用[3]。设一视频序列中,某连续三帧图像分别为fk-1(x,y)、fk(x,y)、fk+1(x,y),然后将前两帧图像和后两帧图像通过式(1)进行运算,得到2帧差图像g1(x,y)和g2(x,y),然后对其进行如下运算:
(2) |
就可以定位出运动目标所在的位置。其中,G(x,y)是g1(x,y)和g2(x,y)进行逻辑与运算的结果。
2 Lucas-Kanade光流法 2.1 Harris角点可以说,图像中许许多多的信息可以由相关的点特征来表征,利用点特征,我们可以识别出相关的物体,也可以做到跟踪运动目标。下面,会用到一种重要的点特征——角点。若所给图像中的某一点的局部曲率突然间发生变化,则该点就称作角点,即从该点向任意方向移动,像素值都会变化[4]。
1988年,C.Harris和M.Stephens第一次提出Harris角点检测算法的概念[5],现如今这个算法已经在后来的研究中证明了它的稳定性,对噪声的鲁棒性以及定位的准确性。Harris角点检测算法通过构建一个局部小窗口,该窗口以像素点为中心点,用自相关函数来描述图像灰度值的变化程度,可以表示为
(3) |
式中:E(x,y)表示前面提到的局部小窗口发生位置变化时灰度变化的平均量,w用来表示图像窗口,I表示图片的灰度。在图像中,如果某一像素点是角点,则窗口位置发生的微小变动会使得E(x,y)剧烈变化;反之,如果该像素点不为角点,则E(x,y)不会发生变化[6]。则在图像(u,v)点处,式(3)可以通过一阶泰勒多项式展开成:
(4) |
式中:A、B、C用来表示二阶方向微分的近似值,可以通过下式来表示:
(5) |
式中:用X和Y来表示不同方向上的一阶方向微分,其中,
(6) |
式中M就是Harris角点算法中定义的Hessian矩阵,即
(7) |
不难看出,像素点的E(x,y)的值关系到矩阵M的特征值,而且当2个特征值都比较大时,即说明该点沿横纵坐标方向的灰度值变化量比较剧烈,因此该像素点就是角点[7]。同时为了简化计算量,去掉计算矩阵M的特征值的过程,定义Det(M)=AB-C2,Tr(M)=A+B,并借此来定义一个Harris角点响应函数:
(8) |
式中m是经验常数,于是可以首先确定一个阈值,若R(x,y)的函数值超过该值,则该像素点是角点[7]。另外,1994年,Shi和Tomasi将Harris自相关矩阵的特征值皆大于所给的最小阈值的点称作强角点[8]。
Harris角点检测算法具有良好的稳定性和抗噪性,对旋转和有灰度变化的图片也能起到很好的检测效果,而且提取出的角点均匀合理。该算法可以很好地检测出图像中的角点,而且角点或者强角点都可以作为光流法有效计算光流的输入参数。
2.2 Lucas-Kanade光流法如果在不知道任何视频内容的先验信息的情况下估计出一个视频序列或者两帧之间的运动,便需要将图像中的每个像素与速度关联,也就是说要与该像素点在两帧之间的位移关联。稠密光流就是应用这种方式得到的。这种方法要将图像中的每个像素点计算一遍,运动量比较巨大,在许多情况下并不适用,为了减小计算量,便可以采用稀疏光流[4]。
稀疏光流的计算要基于具有共同特征的点的集合,以使结果相对可靠稳定,例如上一节提到的角点或者强角点。本文中稀疏光流计算采用的是Lucas-Kanade算法,该算法是用来计算稠密光流的,但由于其可以与特征点集合完美结合,后来常用于稀疏光流的计算中。
LK算法要满足以下3个条件:1)在相邻的帧之间,图像的灰度值或颜色不变;2)图像中的运动随时间的变化比较缓慢;3)该像素点与邻域内的点具有相似的运动[9]。
由第1个条件可知:
(9) |
式中:等号左侧是指在时刻t,像素点(x,y)坐标的灰度是I(x,y,t),在t+dt时刻,像素点(x,y)对应点坐标为(x+dx,y+dy),灰度值变为I(x+dx,y+dy,t+dt)。dt可以看作无限等于0,可以看出图像灰度值在运动前后保持不变,等同于说
(10) |
可以令
(11) |
式(11)中包含u、v两个未知变量,可以利用上面的第3个条件进行求解,若该像素点与邻域内的点运动情况相似,为了求解该像素点的运动信息,则可利用Lucas-Kanade方法求解光流,在该点邻域空间内建立约束方程,并联立方程以求解光流矢量[10],即
(12) |
求出式(12)的解就可以求出对应的光流,但是有时由Ix和Iy构成的矩阵不可逆,此时无法用光流矢量来表示运动目标的情况,因此在使用LK光流法的时候,常会选择一些特征点并以此来计算光流[4],图像中的角点位于两条方向边沿所在的直线相交的位置,在该点会使得由Ix和Iy构成的矩阵有2个较大的特征向量,此时该矩阵能够保证可逆,因此本文中选择角点作为特征点。
同时,为了减小光流计算的误差,本文采用金字塔结构来计算光流,金字塔结构的含义是对图像分别在每一层上计算光流矢量。首先在图像金字塔的最高层计算光流,然后用得到的运动估计结果作为下一层金字塔的起始点,重复这个过程一直到计算完金字塔的最底层[9],这种方法可以将不满足3条运动假设的可能性降低到最小,从而减小了计算光流的误差。
3 结合LK光流法的改进三帧差分检测算法传统的三帧差分法具有算法的时间复杂度低、执行速度快、适用性好等优点,但是由于其算法的特性,在提取到运动目标的同时,也会有一部分噪声的产生,从而影响到最终的检测效果。而且,使用三帧差分法还容易在提取到的目标内部形成较大的空洞,使得提取到的目标不完整。
针对传统三帧差分法的这些缺点,提出一种改进的三帧差分检测算法,该算法使用基于金字塔的LK光流算法,将可能存在运动目标的区域提取出来,通过在该区域内外选取各自不同的阈值来进行提取目标,这样便将阈值分割与区域分割结合起来,完成运动目标的检测提取。
如图 1所示为LK光流法计算的一般步骤,在LK光流法计算的过程中的具体流程如下:
1)在帧序列中应用角点检测算法检测出当前帧的所有角点,在本文中使用的是Harris角点。
2)利用这些角点做为特征点来计算当前帧的光流。
3)将上一步计算出的光流矢量进行阈值化处理,选取合理的阈值,去掉超出阈值范围的所有光流矢量。
4)选择合适的参数将上一步的结果做膨胀运算,之后在得到的二值化图像上做所得到图形的外接矩形,记录下相应的位置坐标,以便于可以在算法的后续过程中使用。
通过上述流程,LK光流法就可以确定出视频帧中最可能存在运动目标的大致区域。如图 2、3所示,2幅图片帧分别选自“小区”的第7帧以及第454帧和“行人”的第8帧以及第44帧。不难看出,该方法选取的运动目标区域比较准确,可以为后面三帧差分的过程提供相对准确的区域分割。
由金字塔LK光流法结合三帧差分法构成的分级阈值三帧差分算法的具体步骤如下:
1)由上述金字塔型LK光流法确定出视频帧中可能存在运动目标的区域。
2)利用步骤1)中确定的区域,在该区域内,三帧差分的阈值选取一个较低值(在本次仿真中选取的阈值为8),在该区域外,三帧差分的阈值则选取一个较高值,定义阈值差为较高阈值与较低阈值的差值(在本次仿真中选取的阈值差为25)。
由于在三帧差分法的仿真试验中发现,当阈值选取超过30时,一般情况下提取出的运动目标几乎不含有噪声,但该目标也相对不够完整,所以可以将区域内外通过数据融合的方式得到完整的运动目标。
3)在低阈值区域,选取LK光流法计算得到的光流矢量的起始角点,由于其含有部分错误的角点信息,所以将其去除掉后与三帧差分法检测得到的区域共同做为运动目标。
4)在低阈值区域,由于仍然存在一定的微小噪声及干扰点,为了消除这些影响,要进行一些相关的后续处理,可以通过连通分析或者形态学滤波的方式进行处理。所谓连通分析,就是指计算每个连通区域的面积,并对面积设定一个较小的阈值,若面积小于该阈值,则将滤除掉该连通区域。这个面积阈值不宜选取较大,否则容易破坏检测到的目标的完整性,降低检测效果。
本次仿真实验是在处理器型号为Intel-i5-4200H,主频为2.80 GHz,内存为4 GB,操作系统为Windows 8.1中文版的PC机上使用Visual Studio 2005以及OpenCV 2.4.3 版本实现。从以上各图不难看出,传统的三帧差分算法免不了会有或大或小的噪声点存在,而且检测到的目标也并不完整,例如“行人”序列的视频帧,含有的噪声点比较大,已经明显影响到了检测的效果。本文算法则通过分级设定阈值的方式在一定程度上抑制了噪声的影响,尽管同时也去掉了一些微小的边缘信息,但是却并不影响提取运动目标,而且检测效果明显优于传统算法;同时该算法中加入的LK光流法检测可以使得运动目标的轮廓更加完整,加强了后面填充的效果,改善了传统算法易产生空洞的缺点。所以本文算法在一定程度上能够起到优于传统效果的检测效果。
4 结论本文在研究了帧间差分法和三帧差分法的基础之上,提出了一种基于LK光流法的改进三帧差分算法。该算法与原始算法以及其它相应的改进算法明显的不同便是对得到的差分图像不再使用固定的阈值进行二值化,而是采用分级阈值的策略。该改进算法具有以下优势:
1) 分级阈值的应用使得该算法的场景通用性大大提高,减弱了噪声对检测结果产生的影响,具有很强的抗干扰能力。
2) 加入的光流角点信息可以完善目标的外部轮廓,改善了原始三帧差分算法目标内部存在空洞的现象,从而得到完整的运动目标。
然而由于改进算法为了改善检测效果而加入了LK光流匹配以及空洞填充,连通分析等部分加大了一部分的计算量,针对分辨率为360×240左右的视频可以达到实时性,而对于较大分辨率的视频往往会降低相当一部分的帧速率,因而这一不足还有待改进。下一步的研究方向便是在保证良好检测效果的同时降低算法的时间复杂度。
[1] | 贾艳丽. 基于视频图像序列的运动目标检测与跟踪[D]. 哈尔滨:哈尔滨工程大学, 2012:3-4. |
[2] | 余启明. 基于背景减法和帧差法的运动目标检测算法研究[D]. 赣州:江西理工大学, 2013:2-4. |
[3] | 赵建. 基于三帧差法的运动目标检测方法研究[D]. 西安:西安电子科技大学, 2013:2-4. |
[4] | 袁国武, 陈志强, 龚健, 等. 一种结合光流法与三帧差分法的运动目标检测算法[J]. 小型微型计算机系统,2013, 34 (3) : 668 –671. |
[5] | HARRIS C, STEPHENS M. A combined corner and edge detector[C]//Proceedings of the 4th Alvey Vision Conference. Manchester, UK, 1988:147-151. |
[6] | SHI Jianbo, TOMASI C. Good features to track[C]//Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition. Seattle, USA, 1994:593-600. |
[7] | 李玲. 数字图像点特征及边缘特征提取方法的研究与实现[D]. 西安:西安科技大学, 2012:24-26. |
[8] | 孙波. 数字图像角点检测算法的研究[D]. 合肥:合肥工业大学, 2013:20-22. |
[9] | BRADSKI G, KAEHLER A. Learning openCV[M]. Sebastopol, USA: O'Reilly Media, 2009 . |
[10] | 毛玉东. 复杂环境下的运动目标检测算法研究[D]. 长春:吉林大学, 2012:26-27. |