CodeBook算法

年份论文题目作者论文内容
2004Background modeling and subtraction by codebook constructionK. Kim, T. Chalidabhongse, D. Harwood, and L. Davis提出了CodeBook算法
2005Real-time foreground–background segmentation using codebook modelK. Kim, T. Chalidabhongse, D. Harwood, and L. Davis对2004论文中的算法作了部分修改,并提出了算法的两种改进,最后利用PDR分析对CodeBook、MOG、Kernal、UNI四种建模方法进行了性能对比
2009Real Time Foreground-Background Segmentation Using a Modified Codebook ModelIlyas A , Scuturici M , Miguet S .null
2010Real-time foreground-background segmentation based on improved codebook model(暂定)Li Q , Shao C , Yue H , et al.null

2005CodeBook:

  • 提出的颜色模型: 为了解决阴影和强光的问题,提出了一种颜色模型分离色度和亮度,分别评估色度偏差和亮度偏差。在这里插入图片描述
    设观测像素 x t = ( R , G , B ) {x_t}=(R,G,B) xt=(R,G,B),码字 c i , v i = ( R ˉ i , G ˉ i , B ˉ i ) {c_i},{v_i}=({{\bar R}_i},{{\bar G}_i},{{\bar B}_i}) ci,vi=(Rˉi,Gˉi,Bˉi)
    ∣ ∣ x t ∣ ∣ 2 = R 2 + G 2 + B 2 ∣ ∣ v i ∣ ∣ 2 = R ˉ i 2 + G ˉ i 2 + B ˉ i 2 < x t , v i > 2 = ( R ˉ i R + G ˉ i G + B ˉ i B ) p 2 = ∣ ∣ x t ∣ ∣ 2 cos ⁡ 2 θ = < x t , v i > 2 ∣ ∣ v i ∣ 2 \begin{array}{l}||{x_t}|{|^2} = {R^2} + {G^2} + {B^2}\\||{v_i}|{|^2} = \bar R_i^2 + \bar G_i^2 + \bar B_i^2\\ < {x_t},{v_i}{ > ^2} = ({{\bar R}_i}R + {{\bar G}_i}G + {{\bar B}_i}B)\\{p^2} = ||{x_t}|{|^2}{\cos ^2}\theta = \frac{{ < {x_t},{v_i}{ > ^2}}}{{||{v_i}{|^2}}}\end{array} xt2=R2+G2+B2vi2=Rˉi2+Gˉi2+Bˉi2<xt,vi>2=(RˉiR+GˉiG+BˉiB)p2=xt2cos2θ=vi2<xt,vi>2色度偏差亮度偏差按下式计算:
    { c o l o r d i s t ( x t , v i ) = δ = ∣ ∣ x t ∣ ∣ 2 − p 2 b r i g h t n e s s ( I , < I ˇ , I ^ > ) = { t r u e : i f I l o w ≤ ∣ ∣ x t ∣ ∣ ≤ I h i f a l s e : o t h e r w i s e \left\{ \begin{array}{l}colordist({x_t},{v_i}) = \delta = \sqrt {||{x_t}|{|^2} - {p^2}} \\brightness(I, < \check I,\hat I > ) = \left\{ \begin{array}{l}true:if\mathop {}\limits^{} {I_{low}} \le ||{x_t}|| \le {I_{hi}}\\false:otherwise\end{array} \right.\end{array} \right. colordist(xt,vi)=δ=xt2p2 brightness(I,<Iˇ,I^>)={true:ifIlowxtIhifalse:otherwise I l o w = α I ^ , I h i = min ⁡ { β I ^ , I ˇ α } , α < 1 , β > 1 {I_{low}} = \alpha \hat I,{I_{hi}} = \min \{ \beta \hat I,\frac{\check I}{\alpha }\} ,\alpha < 1,\beta > 1 Ilow=αI^,Ihi=min{βI^,αIˇ},α<1,β>1
    通常 α \alpha α为0.4~0.7, β \beta β为1.1~1.5
    注:
    色度偏差实质上就是 x t {x_t} xt O v i Ov_i Ovi直线的距离

  • 算法思路: CodeBook算法使用量化/聚类方法来构建背景模型,一个像素点有一个码本来代表该点的背景模型,码本大小根据样本变化情况而改变,一个码本可能包含一个/多个码字。在训练期间构建出每个像素点的码本,在后续分类中将当前像素和码本中的多个码字进行比较,根据色度偏差和亮度偏差来进行分类。

χ = { x 1 , x 2 , . . . , x N } \chi = \{ {x_1},{x_2},...,{x_N}\} χ={x1,x2,...,xN}表示单个像素由N个RGB向量构成的训练序列。
ℓ = { c 1 , c 2 , . . . , c L } \ell = \{{c_1},{c_2},...,{c_L}\} ={c1,c2,...,cL}表示单个像素由L个码字构成的码本。
每个码字 c i , i = 1... L c_i,i=1...L ci,i=1...L 由一个RGB向量 v i = ( R ˉ i , G ˉ i , B ˉ i ) {v_i} = ({\bar R_i},{\bar G_i},{\bar B_i}) vi=(Rˉi,Gˉi,Bˉi)和一个6元组 a u x i = < I ˇ i , I ^ i , f i , λ i , p i , q i > au{x_i} = <{\check I_i}, {\hat I_i},{f_i},{\lambda _i},{p_i},{q_i} > auxi=<Iˇi,I^i,fi,λi,pi,qi>构成
I ˇ i , I ^ i {\check I_i},{\hat I_i} Iˇi,I^i:分配给此码字的最小和最大亮度
f i {f_i} fi:该码字的出现的频率(次数)
λ i {\lambda _i} λi:MNRL(maximum negative run-length)定义为训练期间该码字没有出现最长间隔
p i , q i {p_i},{q_i} pi,qi:码字第一次和最后一次出现的时间

  • 模型初始化: 使用前N帧按下述方法进行码本的构建。

  i:t 时刻观测的像素 x t = ( R , G , B ) , I = R 2 + G 2 + B 2 {x_t}=(R,G,B),I = \sqrt {{R^2} + {G^2} + {B^2}} xt=(R,G,B),I=R2+G2+B2
 ii:根据下面两个条件找到 x t {x_t} xt所匹配的码字 c m {c_m} cm ε 1 {\varepsilon _1} ε1是采样阈值(带宽) { c o l o r d i s t ( x t , v m ) ≤ ε 1 b r i g h t n e s s ( I , < I ˇ m , I ^ m > ) = t r u e \left\{\begin{array}{l}colordist({x_t},{v_m}) \le {\varepsilon _1}\\brightness(I, < {{\check I}_m},{{\hat I}_m} > ) = true\end{array} \right. {colordist(xt,vm)ε1brightness(I,<Iˇm,I^m>)=trueiii:若没有匹配的,则 L ← L + 1 L \leftarrow L + 1 LL+1,创建一个新的码字 c L {c_L} cL { v L = ( R , G , B ) a u x L = < I , I , 1 , t − 1 , t , t > \left\{ \begin{array}{l}{v_L} = (R,G,B)\\au{x_L} = < I,I,1,t - 1,t,t > \end{array} \right. {vL=(R,G,B)auxL=<I,I,1,t1,t,t>iv:若有匹配的,则更新所匹配的码字 c m {c_m} cm
      更新前: { v m = ( R ˉ m , G ˉ m , B ˉ m ) a u x m = < I ˇ m , I ^ m , f m , λ m , p m , q m > \left\{ \begin{array}{l} {v_m} = ({{\bar R}_m},{{\bar G}_m},{{\bar B}_m})\\ au{x_m} = < {{\check I}_m},{{\hat I}_m},{f_m},{\lambda _m},{p_m},{q_m} > \end{array} \right. {vm=(Rˉm,Gˉm,Bˉm)auxm=<Iˇm,I^m,fm,λm,pm,qm>      更新后: { v m = ( f m R ˉ m + R f m + 1 , f m G ˉ m + G f m + 1 , f m B ˉ m + B f m + 1 ) a u x m = < min ⁡ { I , I ˇ m } , max ⁡ { I , I ^ m } , f m + 1 , max ⁡ { λ m , t − q m } , p m , t > \left\{ \begin{array}{l} {v_m} = (\frac{{{f_m}{{\bar R}_m} + R}}{{{f_m} + 1}},\frac{{{f_m}{{\bar G}_m} + G}}{{{f_m} + 1}},\frac{{{f_m}{{\bar B}_m} + B}}{{{f_m} + 1}})\\ au{x_m} = < \min \{ I,{{\check I}_m}\} ,\max \{ I,{{\hat I}_m}\} ,{f_m} + 1,\max \{ {\lambda _m},t - {q_m}\} ,{p_m},t > \end{array} \right. {vm=(fm+1fmRˉm+R,fm+1fmGˉm+G,fm+1fmBˉm+B)auxm=<min{I,Iˇm},max{I,I^m},fm+1,max{λm,tqm},pm,t> v:循环上述4步,当第N帧处理完后,按下式修改每个码字的 λ i {\lambda _i} λi
λ i ← max ⁡ { λ i , ( N − q i + p i − 1 ) } {\lambda _i} \leftarrow \max \{ {\lambda _i},(N - {q_i} + {p_i} - 1)\} λimax{λi,(Nqi+pi1)}vi:对建模后的码本进行修正,M表示修正后的码本,按下式去掉那些长时间未出现的码字,这些码字大概率代表着前景, T M T_M TM通常设置为训练帧数的一半,即 N 2 \frac{N}{2} 2N
M = { c m ∣ c m ∈ ℓ ∧ λ m ≤ T M } M=\{ {c_m}|{c_m} \in \ell \wedge {\lambda _m} \le{T_M}\} M={cmcmλmTM}注:
1.并非找最匹配的码字,找到一个相匹配的码字后就不再继续找了。
2.训练期间可以包含前景,第vi步会去除掉表示前景的码字。

  • 前景/背景分类: 找到相匹配的码字,若有匹配的,则分类为背景,否则分类为前景。

  i:t 时刻观测的像素 x t = ( R , G , B ) , I = R 2 + G 2 + B 2 {x_t}=(R,G,B),I = \sqrt {{R^2} + {G^2} + {B^2}} xt=(R,G,B),I=R2+G2+B2
 ii:根据下面两个条件找到 x t {x_t} xt所匹配的码字 c m {c_m} cm ε 2 {\varepsilon _2} ε2是检测阈值 { c o l o r d i s t ( x t , v m ) ≤ ε 2 b r i g h t n e s s ( I , < I ˇ m , I ^ m > ) = t r u e \left\{\begin{array}{l}colordist({x_t},{v_m}) \le {\varepsilon _2}\\brightness(I, < {{\check I}_m},{{\hat I}_m} > )= true\end{array} \right. {colordist(xt,vm)ε2brightness(I,<Iˇm,I^m>)=trueiii: B G S ( x ) = { f o r e g r o u n d : n o m a t c h b a c k g r o u n d : o t h e r w i s e BGS(x) = \left\{ \begin{array}{l}foreground:no\mathop{}\limits^{}match\\background:otherwise\end{array} \right. BGS(x)={foreground:nomatchbackground:otherwise

  • 模型更新: 若有匹配的码字(分类为背景),则按照模型初始化中第iv步更新所匹配的码字。
  • 涉及参数: α \alpha α β \beta β ε 1 {\varepsilon _1} ε1 ε 2 {\varepsilon _2} ε2
  • 改进1(分层建模与检测): 只有分类为背景才能融合入背景模型中,所以当新加入/移除物体则不能融合进背景模型中。因此提出了分层建模与检测。
    定义额外的模型 H H H(缓存)和三个参数 T h T_h Th T a d d T_{add} Tadd T d e l e t e T_{delete} Tdelete

i:模型初始化后获得背景模型 M M M,创建一个新的背景模型 H H H作为缓存
ii:对于像素 x t {x_t} xt,若在 M M M中找到了匹配的码字,则更新这个码字
iii:若 M M M中没找到,则在 H H H中找,若找到了,则更新 H H H中的码字,若没找到,则创新一个新的码字 h h h并加入 H H H
iv:根据 T h T_h Th过滤缓存中的码字 H ← { h i ∣ h i ∈ H , λ i > T H } H \leftarrow \{ {h_i}|{h_i} \in H,{\lambda _i} > {T_H}\} H{hihiH,λi>TH}
v:将缓存中保存时间很长的码字移动到M中
M ← M ∪ { h i ∣ h i ∈ H , h i 存 在 的 时 间 > T a d d } M \leftarrow M \cup \{ {h_i}|{h_i} \in H,{h_i}存在的时间>T_{add}\} MM{hihiH,hi>Tadd}
vi:从M中删除长时间没有被匹配到的码字
M ← { c i ∣ c i ∈ M , c i 未 被 匹 配 的 时 间 > T d e l e t e } M \leftarrow \{ {c_i}|{c_i} \in M,{c_i}未被匹配的时间>T_{delete}\} M{ciciM,ci>Tdelete}
vii: 重复 ii~vi 步
注: M M M中有匹配的则分类为背景,没匹配则分类为前景( H H H中无论是否有匹配都分类为前景)

  • 改进2(自适应码本更新): 在全局照明变化的时候码字应该被更新。以适当的学习速率对码字向量和方差进行指数平滑可有效地应对照明变化,即构建的每个码字 c m {c_m} cm添加了一个变量 σ m {\sigma_m} σm,修改码字构建过程中的第iv步:( γ \gamma γ ρ \rho ρ是学习率)
    1. v m v_m vm的更新公式替换为: v m ← γ x t + ( 1 − γ ) v m {v_m} \leftarrow \gamma {x_t} + (1 - \gamma ){v_m} vmγxt+(1γ)vm
    2.附加 σ m 2 ← ρ δ 2 + ( 1 − ρ ) σ m 2 \sigma _m^2 \leftarrow \rho {\delta ^2} + (1 - \rho )\sigma _m^2 σm2ρδ2+(1ρ)σm2 σ m 2 \sigma _m^2 σm2是色度偏差的总方差,当算法开始时初始化 σ m \sigma _m σm
    3.色度偏差计算公式修改为: c o l o r d i s t ( x t , v i ) = δ σ i colordist({x_t},{v_i}) = \frac{\delta }{{{\sigma _i}}} colordist(xt,vi)=σiδ
    注:
    1.2004年论文中使用的是 I = R + G + B I=R+G+B I=R+G+B
    2.2004年论文在训练阶段确定模型后就不再更新模型了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值