一种结合GrabCut 与五帧差分法的ViBe 算法
2021-04-23熊玖朋李旭健潘纪成
熊玖朋,李旭健,潘纪成
(山东科技大学计算机科学与工程学院,山东青岛 266590)
0 引言
运动目标检测(Motion Detection)是指将图像序列或视频中空间位置发生变化的物体作为前景提取出来并标示的过程。视频序列中的运动目标(前景对象)检测是许多计算机视觉应用中信息提取的主要步骤之一,包括交通监控、自动远程视频监控和人员跟踪等。其被用于自动视频监控系统和交通监控系统,在这些系统中,对人或车辆的准确分割对于执行可靠的跟踪或识别任务至关重要[1]。运动目标检测在交通监控、军事等领域有着重要应用,也是目前计算机视觉和数字图像处理研究的难点和热点之一。
运动目标检测有以下基本方法:光流法(optical flow)、帧间差分法(inter frame difference method)和背景减法(background subtraction)[2]。光流法即利用图像序列中各像素在时间域上的变化,并根据上一帧与当前帧之间的相关性计算出物体运动信息的一种方法[3]。常用的光流法有:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法和神经动力学方法等。光流法计算结果精确,但是计算量非常大,导致实时性差、实用性不强[4]。帧间差分法即对连续的多个帧进行差分运算,根据像素点灰度值差的绝对值与预设阈值的比较结果进行判断。若绝对值超过阈值,则判断该像素属于前景,否则判断其属于背景。帧间差分法原理简单,可快速检测场景中的运动目标,同时对光照变化具有一定鲁棒性,但存在容易出现空洞和重影等缺点。背景减法是目前使用最广泛的检测方法之一[5],其是一种对静止场景进行运动分割的通用方法,可将当前获取的图像帧与背景图像作差分运算,得到目标运动区域的灰度图,之后对灰度图进行阈值化处理提取运动区域,且为了避免环境光照变化的影响,背景图像根据当前获取的图像帧进行更新。背景差分法算法简单,在一定程度上可避免光照变化的影响,但其不能用于运动的摄像头,且对背景图像实时更新困难。为弥补以上所述背景减法的缺点,2009 年,Barnich 等[5]提出一种新的目标检测方法——ViBe 算法。与GMM 和Codebook 算法相比,ViBe 算法初始化及时,响应速度快,有较强的实时性以及较好的抗噪性能,同时其在解决动态背景和模型初始化问题方面具有良好性能,算法具有的自适应更新机制可保证像素模型的生命周期以平滑的指数衰减形式存在,并且可在单个模型、可变速度和可接受的条件下处理每个像素的内存消耗。但是ViBe 也存在一些问题,如检测的物体不完整、对光照突变非常敏感、对闪烁背景点处理效果不好等,因此容易造成大量误检[6]。
针对以上提到的ViBe 算法的不足,本文提出一种结合GrabCut 算法与五帧差分法的ViBe 算法,该算法减少了剧烈光照及颜色因素对ViBe 算法的影响,同时提高了ViBe算法对运动目标检测的完整性。
1 ViBe 算法
ViBe 算法是一种像素级别的视频前景提取算法。与大多数背景建模方式不同,ViBe 算法不需要等待几个帧进行初始化,而是仅通过第一帧进行初始化[7]。其基本思想是:为检测的每一帧图像中的每个像素建立一个样本集,该样本集通过计算当前识别像素的样本集与背景样本集的交集来确定。该算法主要分为3 步:像素点建模、单帧初始化与模型更新[8]。
(1)像素点建模。假设每一个像素与其邻域像素的像素值在空域上有相似的分布,在该假设成立的条件下,图像中每一个像素模型都可用其邻域中的像素来表示。邻域范围要足够大,以此保证背景模型符合统计学规律。当输入第一帧图像时,像素背景模型如下:
其中,NG(x,y)表示空域上相邻的像素值,f0(x,y)表示当前点的像素值,(xi,yi)表示像素点(x,y)被初始化的次数。
(2)单帧初始化。当t=k 时,像素点(x,y)的背景模型为像素值为fk(x,y)。按照以下方式判断该像素值是否为前景:
其中,r 为随机数,T 为预设的阈值。当f(kx,y)满足公式(2)时,则认为该像素点为背景。
(3)模型更新。Vibe 算法更新有两种方式:时间上的随机更新和空间上的随机更新[9]。
时间上的随机更新:在已建立的背景模型中随机抽取一个背景模型,设为PG,如图1 所示。P(x)表示图像PG在x位置的像素点,周围8 个像素点为其八邻域。当获得一帧新图像Pt时,若在新图像x 位置的像素Pt(x)被判断为背景像素,则PG需要被更新。
空间上的随机更新:在图像PG中选取一个像素点PG(x),用该像素点八邻域中的随机一个像素替换掉PG(x)。
Fig.1 Eight neighborhood of pixel P(x)图1 像素P(x)的八邻域
2 GrabCut 算法
近年来,研究者们对图像分割进行了大量研究,提出一些图像分割算法。其中,GraphCut 算法受到了很多研究者关注[10-11]。GrabCut 算法是一种可有效从复杂背景中提取目标前景的交互式图像分割算法,也是一种迭代的GraphCut 算法。GrabCut 算法仅需要使用图像中的纹理信息和边界信息,以及通过少量的用户交互操作,即可有效从复杂背景中分割出前景目标。GrabCut 算法采用“不完全标记”,在给定的结果下,用户所需的交互操作大大简化,这意味着用户可简单地在对象周围放置一个矩形来提取对象。
GrabCut 算法是在GraphCut 算法基础上迭代而来的,相比GraphCut 算法,GrabCut 算法主要在3 个方面进行了改进:①GraphCut 的目标和背景模型是灰度直方图,GrabCut则使用RGB 三通道的彩色图像模型;②GraphCut 的分割是一次性完成的,而GrabCut 在GMM 参数学习估计过程中运用了可进化的迭代算法;③GrabCut 算法允许不完全标注。
因为GrabCut 算法采用彩色模型,所以需要一个额外的向量k={k1,k2,…,kn},其中k 指第k 个高斯分量,n 指第n个像素。整个图像的Gibbs 能量表示为:
式中,E 为Gibbs 能量,U 为数据项,具体定义为:
其中,式(4)中D 表示区域项,具体公式为:
式(3)中V 为平滑项,由欧式距离求得:
式(3)中θ 指图像的灰度直方图,可表示为:θ={h(z,α),α=(0,1)};z 则是图像灰度值具体数值。
GrabCut 算法通过多次迭代求得,若想得到最优的分割图像,则要求算法在每一次迭代时的GMM 参数越来越精确。详细步骤如下[12]:
(1)用户需要框选出存在“可能目标”的区域TU,区域TU中的像素初始化记为αn=1。
(2)未被选择的部分即为背景区域TB,而区域TB中的像素初始化记为αn=0。
(3)通过K-means 算法初始化背景和前景中每一个像素的高斯混合模型分量。
(4)对每一个像素分配GMM 中的高斯分量:kn=
(6)分析Gibbs 能量项,建立一个图,通过最大流最小切割定理算法进行分割:
重复步骤(3)—步骤(5),直到收敛。
3 五帧差分法
帧间差分法在研究过程中不断发展,之前常用的二帧差分法及三帧差分法[13]计算简单、容易实现,但是效果不太理想[14],而在三帧差分法基础上改进的五帧差分法具有更好的效果,能够在一定程度上减少重影和鬼影的出现。
五帧差分法基本思想为:首先选取连续五帧已初始化的图像:fi-2(x,y)、fi-1(x,y)、fi(x,y)、fi+1(x,y)与fi+2(x,y)。对这五帧图像进行高斯滤波后,再进行中值滤波处理,得到Ii-2(x,y)、Ii-1(x,y)、Ii(x,y)、Ii+1(x,y)与Ii+2(x,y)。将处理后的中间帧图像Ii(x,y)与其他四帧图像进行差分运算[15],可得:
因为“与”运算在一定程度上能够抑制重影的产生,所以由式(8)-式(11)得出的结果D13(x,y)、D23(x,y)、D34(x,y)和D35(x,y),将D13(x,y)和D35(x,y)、D23(x,y)和D34(x,y)分别进行“与”运算,得到D1、D2[16]。其中:
之后对D1、D2进行降噪处理,再分别用动态阈值进行二值化处理,最后将处理结果进行“与”运算得到D。
相比其他帧间差分法,五帧差分法在保证运算速度的同时,还避免了重影和空洞等问题,而D13、D23、D34和D35作为动态数值,会随视频帧的光照变化而变化,因此五帧差分法得到的结果受光照变化影响较小。在五帧差分算法中,对差分结果进行“与”运算及“或”运算也能确保最后的结果更加精确和完善。
4 结合GrabCut 与五帧差分法的ViBe 算法
ViBe 算法无法很好地适应剧烈光照、容易出现鬼影等,五帧差分法能够在一定程度上克服这些缺点,所以本文将ViBe 算法与五帧差分算法相结合。首先,将通过ViBe算法获得前景和通过五帧差分法获得的前景进行“与”运算,得到前景目标分割结果,将上述操作获得的分割结果进行高斯滤波处理,从而去除较大的噪声点,使得到的分割结果更加准确。
然后,利用GrabCut 算法提取分割结果,提取过程如下:对利用ViBe 算法与五帧差分法提取出的分割结果进行数学形态学膨胀处理,扩展前景区域,找到目标前景区域的边缘轮廓线,从而找到能够完全包含前景目标的最小矩形框,以减少需要计算的区域,大幅提高GrabCut 算法运算效率[17]。
根据文献[17],GrabCut 算法主要是先迭代学习、训练GMM 参数,然后在确定的GMM 参数下对原图像进行目标提取,但这种通过迭代估计确定GMM 参数的方式制约了算法效率。通过实验发现,若能提前确定GMM 参数,则可减少原GrabCut 算法90%的时间,所以提前找到包含前景目标的最小矩形框,可大大提升原GrabCut 算法效率。此外,原GrabCut 算法是在RGB 颜色空间分割目标,这也是制约其效率的原因之一,而本文直接利用GrabCut 算法对ViBe算法结合五帧差分法检测出的大致区域进行分割,会再次提升GrabCut 算法效率,使算法能够满足视频处理要求。
ViBe 算法与五帧差分法相结合获得的分割结果一般为较完整的目标,但在个别恶劣条件下,当一个前景目标的检测实验结果为多个分割结果的组合时,可将任意两个分割结果最小矩形框的中心点连线,根据与中心点垂直方向的夹角大小进行判断。若夹角大小小于所预设的阈值,则认为这两部分的分割结果为同一目标,将其划分在同一矩形框内。具体算法流程如图2 所示。
Fig.2 Improved algorithm flow图2 改进算法流程
5 实验结果分析
本文实验在Windows10 操作环境与QT 4.11.1+Opencv4.1.2 环境下,采用2014DATDBASE 中的“Baseline”数据集进行实验。ViBe 算法各个参数设置如下:相似阈值R=20,匹配数目阈值min=20,时间采样阈值rate=16。
如图3 所示,图(a)分别是第137 帧、第425 帧、第777 帧原始图像,图(b)为相应帧原始图像ViBe 算法的实验结果,图(c)为本文算法实验结果。
Fig.3 Experimental comparison between ViBe algorithm and the algorithm in this paper图3 ViBe 算法与本文算法实验对比
根据实验结果,采用原ViBe 算法进行检测时,因汽车影子处运动速度较快,在检测时会被判定为运动目标,从而出现鬼影,左侧车辆经过树荫也会受到光照变化影响出现鬼影,并且由于树叶反光等原因,检测时会出现斑点状鬼影,而本文算法减少了鬼影的产生。ViBe 算法与五帧差分法相结合对于光照等不利因素更具有鲁棒性,而本文算法检测出的目标更完整,减少了残缺目标。与GrabCut 算法的结合,也能更准确地提取出检测目标,进一步提高了目标提取的完整性与准确性。因此,本文算法在检测精度上较为理想。在检测速度上,因为GMM 背景差分算法运行时间为ViBe 算法的3 倍左右,本文算法运行时间介于两者之间,相比原ViBe 算法较慢。然而,本次实验证明,本文算法可满足视频的实时处理要求。综上所述,本文算法仍能实现运动目标的完整检测。
6 结语
针对原ViBe 算法存在的易受光照影响出现鬼影、检测前景目标不够精确等问题,本文提出一种结合了五帧差分法与GrabCut 算法的ViBe 算法。首先将五帧差分法与ViBe算法相结合获得前景,五帧差分法可增强ViBe 算法对光照变化的鲁棒性,然后对分割结果进行高斯滤波处理,最后使用GrabCut 算法进行提取,以更精确地提取出检测目标。实验结果证明,多种方法相结合提升了ViBe 算法的精确度,可在一定程度上避免光照变化的影响,但是多种方法的结合也一定程度上降低了算法效率,这将是接下来需要研究的一个重要问题。