【OpenCV】码书(CodeBook)基本原理介绍

【OpenCV】码书(CodeBook)基本原理介绍女模特之死
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(CB)结构,每个CodeBook结构⼜由多个CodeWord(CW)组成。
  CB和CW的形式如下:
  CB={CW1,CW2,…CWn,t}
  CW={lHigh,lLow,max,min,t_last,stale}
  其中n为⼀个CB中所包含的CW的数⽬,当n太⼩时,退化为简单背景,当n较⼤时可以对复杂背景进⾏建模;t为CB更新的次数。CW是⼀个6元组,其中IHigh和ILow作为更新时的学习上下界,max和min
记录当前像素的最⼤值和最⼩值。上次更新的时间t_last和陈旧时间stale(记录该CW多久未被访问)⽤来删除很少使⽤的CodeWord。
假设当前训练图像I中某⼀像素为I(x,y),该像素的CB的更新算法如下,另外记背景阈值的增长判定阈值为Bounds:
  (1) CB的访问次数加1;
  (2) 遍历CB中的每个CW,如果存在⼀个CW中的IHigh,ILow满⾜ILow≤I(x,y)≤ IHigh,则转(4);
  (3) 创建⼀个新的码字CWnew加⼊到CB中, CWnew的max与min都赋值为I(x,y), IHigh <- I(x,y) + Bounds,ILow <- I(x,y) –Bounds,并且转(6);
  (4) 更新该码字的t_last,若当前像素值I(x,y)⼤于该码字的max,则max <- I(x,y),若 I(x,y)⼩于该码字的min,则min <- I(x,y);
  (5) 更新该码字的学习上下界,以增加背景模型对于复杂背景的适应能⼒,具体做法是: 若IHigh < I(x,y) + Bounds,则IHigh 增长1,若ILow > I(x,y) – Bounds,则ILow 减少1;
  (6) 更新CB中每个CW的stale。
  使⽤已建⽴好的CB进⾏运动⽬标检测的⽅法很简单,记判断前景的范围上下界为minMod和maxMod,对于当前待检测图像上的某⼀像素I(x,y),遍历它对应像素背景模型CB中的每⼀个码字CW,若存在⼀个CW,使得I(x,y) < max + maxMod并且I(x,y) > min –minMod,则I(x,y)被判断为背景,否则被判断为前景。
无锡日报女记者章莹
  在实际使⽤CodeBook进⾏运动检测时,除了要隔⼀定的时间对CB进⾏更新的同时,需要对CB进⾏⼀个时间滤波,⽬的是去除很少被访问到的CW,其⽅法是访问每个CW的stale,若stale⼤于⼀个阈值(通常设置为总更新次数的⼀半),移除该CW。
  综上所述,CodeBook算法检测运动⽬标的流程如下:张君劢
  (1) 选择⼀帧到多帧使⽤更新算法建⽴CodeBook背景模型;
  (2) 按上⾯所述⽅法检测前景(运动⽬标);
  (3) 间隔⼀定时间使⽤更新算法更新CodeBook模型,并对CodeBook进⾏时间滤波;
  (4) 若检测继续,转(2),否则结束。
Love is everywhere.
爱⽆处不在。

本文发布于:2024-09-23 06:31:37,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/31780.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:背景   像素   前景   时间   模型   码元   学习
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议