APP下载

一种改进ViBe 算法的移动目标检测方法

2022-04-13孙丽君陈天飞

现代电子技术 2022年8期
关键词:鬼影邻域像素点

闫 铭,孙丽君,陈天飞

(1.粮食信息处理与控制教育部重点实验室,河南 郑州 450001;2.郑州市机器感知与智能系统重点实验室,河南 郑州 450001;3.河南工业大学 电气工程学院,河南 郑州 450001;4.河南工业大学 信息科学与工程学院,河南 郑州 450001)

0 引言

移动目标检测是指从视频序列中将背景分离出去,得到前景目标,从而为后续进行跟踪、识别等任务打下基础,被广泛应用于智能监控、无人驾驶、航空航天、国防军事等领域。按照处理对象的不同,移动目标检测可分为基于前景的移动目标检测和基于背景的移动目标检测。

ViBe 算法是一种基于背景的移动目标检测方法。基于ViBe 算法的移动目标检测是由Barnich 等人在2009年提出。使用ViBe 算法进行移动目标检测实时性好、鲁棒性强;其核心是背景模型的构建与更新,使用第一帧图像建立初始背景模型,速度较快。ViBe 算法利用每个像素点及其周边邻域像素点的信息,建立像素点信息的随机邻域传播更新机制,使得每个像素点的值在其邻域内平滑传播,增强算法适应场景变化的能力。在背景发生微小变化时,检测出的噪声点较少。ViBe 算法在静态背景和变化小的背景中有较好的检测效果,检测速度快,但也存在“鬼影”问题。

针对ViBe 算法存在的“鬼影”问题,目前有两种改进方法:第一种是对初始化方式进行改进;第二种是先找出“鬼影”区域,再对“鬼影”进行处理。第一种改进方法有中位数法、平均法等。张钦礼等人利用视频序列中前帧图像像素点的中位数进行初始化。马永杰等人使用改进多帧平均法获得真实背景的方式进行初始化。针对第二种处理方法,莫邵文等人结合背景模型的视觉显著性特征,判断每个像素点的鬼影程度,然后采取措施消除“鬼影”。吴尔杰等人将区域像素值的方差作为“鬼影”区域的判别依据,然后对“鬼影”进行处理。

针对ViBe 算法存在“鬼影”现象的问题,本文采用第一种方法对基本ViBe 算法进行改进。在初始化时,初始背景模型的建立方式变为从视频序列前4 帧每个像素点的24 邻域随机抽取5 个像素点。

1 基本ViBe 算法

1.1 算法原理

ViBe 算法从第一帧图像每个像素点的8 邻域抽取(一般取20)次作为初始背景模型。像素点()的8 邻域如图1 所示。

图1 v(x)的8 邻域

用()表示当前检测像素点,用(())表示()的背景模型,ViBe 算法背景模型定义为:

在前景判断时,计算出当前检测像素点与其背景模型中样本点的欧氏距离dist,然后比较dist 与距离阈值的大小。如果dist 的值小于等于的值,则匹配个数加1;反之则对其背景模型进行更新。如果匹配个数小于等于阈值,则将当前检测像素点设定为前景点,不对其背景模型进行更新。

ViBe 算法示意图如图2 所示。图中:,为二维颜色空间(,)的分量;()表示当前检测像素点;为距离阈值,一般取20。以当前检测像素点()为圆心,距离阈值为半径,形成一个圆,圆内的像素样本点离()的距离较近,相差较小。圆内像素点越多,则说明当前检测像素点越接近背景,当前检测像素点就有更大可能为背景点。如图2 所示,当前检测像素点()与其对应的背景模型中的像素点的欧氏距离小于等于的有7 个像素样本点,大于匹配阈值2,那么可以判定当前检测像素点()为背景点。

图2 ViBe 算法示意图

1.2 算法流程

ViBe 算法的流程分为模型初始化、前景判断、模型更新等几个步骤。

1)模型初始化

从第一帧图像每个像素点的8 邻域重复(一般取20)次,随机地选择像素点构建背景模型。

2)前景判断

初始化后进行前景判断,计算出当前检测像素点与其背景模型中样本点的欧氏距离。假设当前检测像素点()的像素值为(()),其背景模型中样本点为vv的像素值为(v),像素点()匹配v的个数为。当满足式(2)时,说明背景模型中有一个像素样本点与()匹配,匹配个数的值加1。

当比较完当前像素点对应的背景模型中的每个像素样本点后,若匹配个数满足式(3),则判断当前检测像素点为背景点。

式中,为当前检测像素点与背景模型中样本像素点匹配个数的阈值,一般取2。

3)模型更新

ViBe 算法采用的是保守型更新方式。与此同时,为了克服这种更新方式的缺点,将当前检测像素点的信息扩展到其邻域空间。定义更新参数(一般取16),如果当前检测像素点与其背景模型相匹配时,以1的概率用当前检测像素点随机更新其背景模型和其8 邻域中像素点的背景模型。通过这种方式可以恢复移动目标运动过的地方,获得更加准确的移动目标检测结果。

2 ViBe 算法的改进

2.1 “鬼影”问题

ViBe 算法在多数背景下都具有较好的检测效果,但也存在“鬼影”问题。“鬼影”是由很多连接在一起的像素点组成,在移动目标检测结果中显示为前景点,但实际上是背景点。产生“鬼影”现象的原因是初始化时使用的第一帧图像中含有移动目标,在之后检测的过程中会出现本应是背景点的地方,检测出的却是前景点,这样的错判点聚集在一起就形成了“鬼影”区域。ViBe 算法“鬼影”现象示意图如图3 所示。

图3 ViBe 算法“鬼影”现象示意图

如图3 所示,图3a)为视频序列中的第一帧图像,并且带有移动目标,用蓝色五边形来代表,黄色为背景区域;图3b)为视频序列中的第帧图像,移动目标与第一帧图像相比发生了运动,在图像中的位置发生了变化;图3c)为使用基本ViBe 算法得到的第帧图像的移动目标检测结果,可看出移动目标的检测结果出现了重叠,发生了明显的“鬼影”现象。视频序列中第帧图像正确的移动目标检测结果如图3d)所示。

采用视频序列第一帧图像进行初始化,如果第一帧中含有移动目标,则在视频序列之后的检测结果中,会出现在本应是背景点的地方检测出的却是前景点,很多这样的点聚集在一起,就形成了“鬼影”区域。

ViBe 算法有随机邻域传播更新机制,可以实现消除“鬼影”。假设当前检测像素点()为背景点,像素值为(()),()的背景模型为(()),()为从像素点()的邻域中随机选择得到的像素点,()的背景模型为(())。在进行背景更新时,(())要更新到(())和(())中。那么“鬼影”区域边缘点的背景模型会被()更新。“鬼影”区域边缘的像素点与边缘邻域的像素点很接近,因此“鬼影”区域边缘的像素点会逐渐成为背景点。随着检测的不断进行,“鬼影”区域会慢慢消失。虽然ViBe 算法可以通过更新背景模型来将“鬼影”消除,但消除的过程相对缓慢。在实际检测当中,“鬼影”区域会存在较长时间,同时由于“鬼影”的存在,在后续图像检测中,如果有移动目标经过该区域时,将检测不出移动目标。

2.2 改进初始化方式

抑制“鬼影”现象的方法分为两种:一种是改变算法的初始化方式;另一种是发现“鬼影”后再进行抑制。本文采用第一种方式改变算法的初始化方式。基本ViBe算法在初始化时,从第一帧图像像素点的8 邻域随机抽取次,那么()的8 邻域中像素点被重复选中的概率较大。当像素点的值差别较大时,选中的像素样本点可能集中在少数几个像素样本点中,容易导致错误分类,造成误检。

为了减轻使用第一帧图像进行初始化时可能出现的移动目标所带来的“鬼影”问题的影响,本文提出的改进ViBe 算法使用前4 帧图像进行初始化,从前4 帧每个图像像素点的24 邻域随机抽取5 个像素样本点。这样可以扩大抽取的范围,像素点邻域内每个像素点被抽到的概率变小,避免了像素样本点的重复选取,可以减轻移动目标存在于视频序列第一帧的影响。像素点()的24 邻域如图4 所示。

图4 v(x)的24 邻域

当像素点()位于图像的左上角时,不再取像素点()在24 邻域中间时的邻域样本点,像素点()的24 邻 域 如 图5 所 示。

图5 v(x)处于图像左上角

当像素点()位于图像的右上角时,此时像素点()的24 邻域如图6 所示。当像素点()位于图像的左下角时,此时像素点()的24 邻域如图7 所示。当像素点()位于图像的右下角时,此时像素点()的24 邻域如图8 所示。

图6 v(x)处于图像右上角

图7 v(x)处于图像左下角

图8 v(x)处于图像右下角

与此同时,本文吸收其他改进ViBe 算法的做法,为被检测为前景的像素点设置计数器。对于视频序列中同一位置的像素点,如果连续多次被认为前景点,那么这一位置的像素点为背景点的可能性较大。因此,若像素点被认为是前景点时,计数器的值就加1。当计数器的值大于或等于阈值时,则认为像素点被误判为前景点,此时应在检测结果中将此像素点判定为背景点。同时以1的概率用当前像素点更新其背景模型。用()代表检测结果中的点,其定义如下:

式中:NUM 为计数器的值;为阈值,的取值根据移动目标的大小和速度来确定。

2.3 改进ViBe 算法流程图

改进ViBe 算法的流程分为模型初始化、前景判断、模型更新等几个步骤。首先,输入视频序列,对视频序列内的图像进行灰度化。使用灰度化后的视频序列的前4 帧进行初始化。在前4 帧图像每个像素点的24 邻域随机抽取5 个像素点。然后从视频序列的第5 帧开始进行检测,判断当前检测像素点与背景模型中的样本点的欧氏距离是否小于等于。若距离大于,则验证背景模型中的下一个样本点,反之匹配个数加1。当匹配个数大于等于阈值时,更新当前检测像素点的背景模型。如果匹配个数小于阈值,则进行前景描述。将计数器的值加1,按照式(4)进行处理可得到移动目标检测结果。改进ViBe 算法流程如图9 所示。

图9 改进ViBe 算法流程

3 实验结果与分析

为了检验本文提出的改进ViBe 算法的效果,需要使用CDW⁃2014 数据集中的highway 数据集、pedestrians数据集以及PETS2009 数据集中的Views_001 数据集。highway 数据集由1700 帧汽车图像组成。pedestrians 数据集由1099 帧固定摄像机拍摄的行人行走图像组成。Views_001 数据集由795 帧固定摄像机拍摄的行人行走图像组成,行人行走的速度较快,视频序列的第一帧图像包含移动目标——行人。通过Matlab R2014a 实现基本ViBe 算法和本文提出的改进ViBe 算法。在highway数据集、pedestrians 数据集和Views_001 数据集上进行验证,使用基本ViBe 算法和本文提出的改进ViBe 算法得到的移动目标检测结果如图10~图12 所示。

图10 在highway 数据集上的移动目标检测结果

图12 在Views_001 数据集上的移动目标检测结果

由图10 可知,图10f)、图10g)中发生了“鬼影”现象。这是因为highway 数据集第一帧图像存在待检测的移动目标——汽车。从使用基本ViBe 算法在highway数据集第110 帧图像的移动目标检测结果可以看出,“鬼影”现象消失。从图10i)~图10l)可以看出,使用改进ViBe 算法从highway 数据集第50 帧图像的移动目标检测结果开始,“鬼影”现象消失。这说明改进ViBe 算法消除“鬼影”现象的速度比基本ViBe 算法快。

图11e)~图11h)为使用基本ViBe 算法得到的检测结果,移动目标——行人被有效检出。图11i)~图11l)为使用改进ViBe 算法得到的检测结果,移动目标——行人被有效检测出,且得到的检测结果中噪声很少。

图11 在pedestrians 数据集上的移动目标检测结果

由图12e)~图12h)可以看出,使用ViBe 算法在前90 帧图像的检测结果中出现了“鬼影”现象,造成了错误检测。由于数据集第一帧图像存在移动目标,因此在第10 帧的检测结果中,本应检测出3 个行人,但在图12e)中检测出6 个行人,出现3 个行人的“鬼影”。在第30帧的检测结果中,本应检测出5个行人,但在图12f)中检测出6 个行人。有2 个行人的“鬼影”已经消除,只剩下1 个行人的“鬼影”。在第60 帧图像的检测结果中,“鬼影”现象依然存在。直至检测到第90 帧图像时,“鬼影”现象才完全消失。从图12i)~图12l)可以看出,改进ViBe 算法可以有效地检测出行人,检测结果中的噪声比基本ViBe 算法的检测结果少。如图12i)所示,从Views_001 数据集第10 帧图像的移动目标检测结果可以看出,应检出3 个行人,实际检出3 个行人。后续检测结果中没有出现“鬼影”现象。这说明改进ViBe 算法消除“鬼影”现象的速度比基本ViBe 算法快。

根据以上实验结果可知,本文提出的改进ViBe 算法在三个数据集上都有很好的效果,可以有效消除“鬼影”现象,且消除“鬼影”现象的速度比基本ViBe 算法更快,检测效果得到改善。这说明本文提出的改进算法与基本的ViBe 算法相比,性能更好,鲁棒性更好。

4 结 语

针对ViBe 算法存在“鬼影”现象的问题,本文提出一种改进方法。初始化时,背景模型的构建方式从在第一帧图像每个像素点的8 邻域抽取20 次,变为从前4 帧每个像素点的24 邻域随机抽取5 个像素点。在highway数据集、pedestrians 数据集和Views_001 数据集上对本文提出的改进ViBe 算法进行验证。移动目标检测结果表明,本文提出的改进ViBe 算法与基本ViBe 算法相比,能够加快“鬼影”现象的消除,检测效果更好。下一步将在其他复杂场景中对本文提出的改进ViBe 算法进行验证和优化。

猜你喜欢

鬼影邻域像素点
稀疏图平方图的染色数上界
基于5×5邻域像素点相关性的划痕修复算法
基于邻域竞赛的多目标优化算法
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
如何消除胶印“鬼影”?
关于-型邻域空间
基于单应性矩阵的图像拼接方法的对比分析
实时的静止目标与鬼影检测及判别方法
基于时序扩展的邻域保持嵌入算法及其在故障检测中的应用