运动目标检测(前景背景分离)被认为是视频分析学习的入门基础,分为以像素为特征的方法和以纹理为特征的方法,以纹理为特征的方法主要参考上节所讲的LBP和SILTP,这里我们重点介绍像素方法,像素方法是最常用也是最直观的方法。
像素方法假设的基础是背景建模,即建立背景像素的模型,符合该模型的像素判断为背景并且作为新的输入对背景进一步更新,不符合该模型的像素点判断为前景(即运动目标),主流的前景检测方法包括:静态差分、CodeBook方法、高斯背景建模、VIBE方法。
• 静态差分
以视频首帧或者手动选取视频中不存在目标的场景帧作为参考帧,简单通过视频帧减去参考帧即得到运动的目标区域。这种方法优点在于很容易理解,缺点是无法表述场景的更新,当发生较大的变化时(比如光照、抖动、背景较大变化)结果会有很大误差。
静态差分可以表述为:
其中Pi,j为原始视频像素值,Refi,j为参考帧,Subi,j 为差分结果,t为差分阈值。
• Code Book方法
算法为图像中每一个像素点建立一个码本,每个码本可以包括多个码元(对应阈值范围),在学习阶段,对当前像素点进行匹配,如果该像素值在某个码元的学习阈值内,也就是说与之前出现过的某种历史情况偏离不大,则认为该像素点符合背景特征,需要更新对应点的学习阈值和检测阈值。
如果新来的像素值与每个码元都不匹配,则可能是由于动态背景导致,这种情况下,我们需要为其建立一个新的码元。每个像素点通过对应多个码元,来适应复杂的动态背景。
在应用时,每隔一段时间选择K帧通过更新算法建立CodeBook背景模型,并且删除超过一段时间未使用的码元。
• 高斯背景建模(GMM)
高斯背景模型是由Stauffer等人提出的经典的自适应背景建模方法,假设每个像素在时域上符合正态分布,在一定阈值范围内 的像素判定为背景,并用来更新模型,不符合该分布的像素即为前景。
高斯背景模型通过模型更新来适应场景的变化,以实现背景学习效果。
算法步骤:
Step1:初始化背景模型,初始均值,初始标准差,初始差分阈值 T(默认值20):
Step2:检测像素Ix,y属于前景还是背景,其中 为阈值参数,基本判断依据是在均值 一定的范围内。
Step3:更新参数,对背景进行学习更新,其中为学习率参数,值越大背景更新越快。
Step4:重复步骤2、3直至算法停止。
混合高斯建模GMM(Gaussian Mixture Model)作为单核高斯背景建模的扩展,是目前使用最广泛的一种方法,GMM将背景模型描述为多个分布(能够满足背景的切换,比如树叶晃动),符合其中一个分布模型(有树叶、无树叶)的像素即为背景像素。
GMM针对复杂背景有很好的适应性,其表现也更接近实际应用,方法的具体实现可以参照OpenCV源码。
作为最常用的一种背景建模方法,GMM有很多改进版本,比如利用纹理复杂度来更新差分阈值 ,通过像素变化的剧烈程度来动态调整学习率 ,这里不再进一步展开。
• ViBe方法
ViBe算法主要特点是随机背景更新策略,这和GMM有很大不同。
像素的变化存在不确定性,很难用一个固定的模型来表征,ViBe算法基于这样一个假设:在无法确定像素变化的模型时,随机模型在一定程度上更适合模拟像素变化的不确定性。
背景模型的初始化
ViBe算法通过定义K个(一般为20)样本集来描述背景模型:
算法通过单帧图像来初始化背景模型,背景模型通过对应像素点周边像素的随机采样得到,因此也称为采样背景模型,这是ViBe算法的一个显著性优点。
r,c 对应的8邻域点,这种方法的优点在于能够大大缩短背景建立的时间,背景发生较大变化时也能够快速学习。
前景检测过程
计算新的像素点Pi,j 和样本集Si,j 中每个样本值 的距离(像素值差异),计算结果小于给定阈值 Disti,j (一般设为20)时,认为与指定样本近似,当近似样本数量大于 #min(取值范围[2, K/2],一般设为2)时,认为该像素属于背景,否则判断为前景。
背景模型的更新策略
符合背景模型的像素,将参与模型更新策略,更新策略比较简单,随机选择对应样本集 Si,j 中的一个样本替换为当前像素点Pi,j 的值。
假定学习率为LR(更新概率的倒数,一般取值为2-64,取值越小更新越快),那么更新策略可以表述为:
1)当一个像素点Pi,j 被判定为背景时,它有 1/LR 的概率去更新其对应的样本集Si,j ,当该条件符合时,随机选择其中一个样本值 进行替换;
2)同时有1/LR的概率去更新它的邻居点的模型样本集,即当该概率条件符合时,随机选择其中一个8邻域点Pr,c(r, c为行列索引),然后随机选择该邻居点对应样本集Sr,c 中的一个样本k,替换为像素点 Pi,j 的值;
ViBe算法原理比较容易理解,其效果也相对较好,大家可以从网上找到相关代码进行测试和效果,不过由于原作者已经申请了相关专利,如果作为商业用途的话,建议考虑其他算法。前背景检测完成之后,我们想要得到完整的目标区域或者轮廓,这一步通过提取图像前景掩码完成,典型的方法称为MotionBlob。
有很多方法对前景像素做进一步处理,比如Ghost鬼影去除、结合跟踪对目标进行误检测修正等,不在本节讨论范围内,请读者自行查阅。