OpenCV ——背景建模之CodeBook(2)

1,CodeBook的来源
  先考虑平均背景的建模方法。该方法是针对每个像素,累积若干帧的像素值,而后计算平均值和方差,以此来创建背景模型,至关于模型的每个像素含有两个特征值,这两个特征值只是单纯的统计量,没有记录该像素值的历史起伏,即没有考虑时间序列和噪声干扰,不具有鲁棒性,所以建模时不能有运动前景的部分,要求光线保持不变。
  若是咱们考虑到时间起伏序列建模,好比利用60帧图像建模,对于每个像素点会产生60个像素值,分别给他们加上60个相关的权值,或者进一步统计不一样像素值出现的频次或者距离,以此来排除噪声,这样可以模拟复杂的背景,可是会带来巨大的内存消耗。
  若是咱们对该像素值起伏的动态范围进行压缩,压缩的依据是像素值之间的大小距离,即当前观测值与历史的记录值对比,若是两个值接近,就归为一类,也就是隶属同一个码元(CodeWord),若是差异过大,就以当前观测值新建一个码元,由于背景的变化状况远小于前景,因此压缩以后咱们就获得了只含有若个码元的一个编码本(CodeBook),这个编码本不只可以模拟复杂背景,同时大大减小内存消耗。此外,对每一个码元的更新频率进行监督,剔除那些频率低的(误跑进来的动态前景),不只排除了噪声,同时也容许有移动前景的背景当作学习资料。这即是CodeBook的核心思想。
2,CodeBook的实现
  CodeBook执行前景分割主要分为三个过程,即背景建模、清除陈旧码元、前景分割,分别对应以下三个函数updateCodeBook(), clearStaleEntries(), backgroudDiff()。
2.1 结构及主要参数
  CodeBook算法为当前图像的每个像素创建一个CodeBook(CB)结构,每一个CodeBook结构又由多个码元CodeWord(CW)组成。
  CB和CW的形式以下:
  CB={CW1,CW2,…CWn,t}
  CW={learnHigh[],learnLow[],max[],min[],t_last_updata,stale}
  其中n为一个CB中所包含的CW的数目,当n过小时,退化为简单背景,当n较大时能够对复杂背景进行建模。CW是一个6元组结构,在整个算法流程中,主要包括如下参数:
  maxMod[]:用训练好的背景模型进行前景分割时的调节量,判断点是否小于max[] + maxMod[]);
  minMod[]:用训练好的背景模型进行前景分割时的调节量,判断点是否小于min[] -minMod[]);
  cbBounds[]:训练背景模型时用到,至关于控制模型的增加速率,更新learnHigh[]和learnLow[]。
  learnHigh[]:背景的学习上界限,当新像素进来时判断其是否属于该码元;
  learnLow[]:背景的学习下界限,当新像素进来时判断其是否属于该码元;
  max[]: 背景学习中不断更新,记录当前码元的最大值,在前景分割时,与MaxMod[]配合,判断像素是前景仍是背景;
  min[]: 背景学习中不断更新,记录当前码元的最小值,在前景分割时,与MinMod[]配合,判断像素是前景仍是背景;
  此外,为了剔除陈旧码元,给每一个CB和CW都加入了若干时间标签,好比CB的t,记录CB更新的次数,CW的t_last_updata和stale,t_last_updata记录了该CW上次更新的时间,stale记录了CW的搁浅时间,stale=t-l_last_updata。
2.2 背景建模
  遍历每个像素,假设针对某个像素I(x,y),遍历其对应的CodeBook的每个码元,分通道检测learnHighI(x,y)learnLow?若是知足条件,则更新该码元的t_last_updata,若max<I(x,y),更新max=I(x,y), 若min>I(x,y), 更新min=I(x, y),若learnHigh<I(x,y)+cbBounds,缓慢增长学习上限learnHigh+1, 若learnLow>I(x,y)-cbBounds,下降学习下线learnLow-1。
  若是不知足条件,则建立一个新的码元,learnHign=I(x,y)+cbBounds,learnLow=I(x,y)-cbBounds, max=min=I(x,y)。
  更新全部的时间标签。
2.3 清除陈旧码元
  背景建模一段时间后,须要按期清除陈旧码元,针对每个CodeBook,根据经验将其时间t的一半当作阈值,遍历全部码元,将与之对应的时间标签stale与阈值比较,大于阈值的则删除,阈值以内的保留,同时更新时间标签。
2.4,前景分割
  前景分割也就是利用训练好的CodeBook进行运动检测,遍历该像素对应的CodeBook的全部码元,若是其中一个码元知足当前像素I(x,y)min-minMod且I(x,y)max+maxMod,则判断该像素属于背景,若是一个条件不知足,则属于前景。
3,CodeBook的优缺点以及改进
  优势:
  室内室外都能工做很好,可以适应小范围周期性运动的背景(经典例子,风中摇曳的树)以及灯光缓慢变化或者有规律的变化,训练过程不须要彻底干净无前景的背景,适应有前景目标移动的背景建模。
  不足:
  若是背景发生全局变化,好比打开或者关闭灯,不一样时候的阳光,这个时候密码本会失效。解决方法:针对可能出现的全局背景,训练不一样背景下的CodeBook,并自动检测背景环境进行模型切换。
  背景局部发生变化,背景与前景都是相对而言,好比背景里进入一辆汽车,汽车中止再也不移动,变成背景的一部分,CodeBook并不能判断这一类情形。解决方法:多层CodeBook建模,一层永久背景模型,一层缓存背景模型,若是部分前景在混存背景模型存在时间足够长,则移入永久背景模型进行检测。
此外,咱们比较的特征都是基于像素值这一最原始的特征,能够提取一些加工过的特征好比Gaussian/LBP来创建CodeBook.
4,参考资料
《学习OpenCV》;
百度百科——codebook;
Tornadomeet博客——前景检测算法_1(codebook和平均背景法)
  
  
  
  
  
  
  算法

相关文章
相关标签/搜索