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

2005CodeBook:

  • 提出的颜色模型: 为了解决阴影和强光的问题,提出了一种颜色模型分离色度和亮度,分别评估色度偏差和亮度偏差。
    设观测像素xt=(R,G,B){x_t}=(R,G,B)xt​=(R,G,B),码字ci,vi=(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​)
    ∣∣xt∣∣2=R2+G2+B2∣∣vi∣∣2=Rˉi2+Gˉi2+Bˉi2<xt,vi>2=(RˉiR+GˉiG+BˉiB)p2=∣∣xt∣∣2cos⁡2θ=<xt,vi>2∣∣vi∣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}∣∣xt​∣∣2=R2+G2+B2∣∣vi​∣∣2=Rˉi2​+Gˉi2​+Bˉi2​<xt​,vi​>2=(Rˉi​R+Gˉi​G+Bˉi​B)p2=∣∣xt​∣∣2cos2θ=∣∣vi​∣2<xt​,vi​>2​​则色度偏差亮度偏差按下式计算:
    {colordist(xt,vi)=δ=∣∣xt∣∣2−p2brightness(I,<Iˇ,I^>)={true:ifIlow≤∣∣xt∣∣≤Ihifalse:otherwise\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​)=δ=∣∣xt​∣∣2−p2​brightness(I,<Iˇ,I^>)={true:ifIlow​≤∣∣xt​∣∣≤Ihi​false:otherwise​​Ilow=αI^,Ihi=min⁡{βI^,Iˇα},α<1,β>1{I_{low}} = \alpha \hat I,{I_{hi}} = \min \{ \beta \hat I,\frac{\check I}{\alpha }\} ,\alpha < 1,\beta > 1Ilow​=αI^,Ihi​=min{βI^,αIˇ​},α<1,β>1
    通常α\alphaα为0.4~0.7,β\betaβ为1.1~1.5
    注:
    色度偏差实质上就是xt{x_t}xt​到OviOv_iOvi​直线的距离

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

χ={x1,x2,...,xN}\chi = \{ {x_1},{x_2},...,{x_N}\}χ={x1​,x2​,...,xN​}表示单个像素由N个RGB向量构成的训练序列。
ℓ={c1,c2,...,cL}\ell = \{{c_1},{c_2},...,{c_L}\}ℓ={c1​,c2​,...,cL​}表示单个像素由L个码字构成的码本。
每个码字 ci,i=1...Lc_i,i=1...Lci​,i=1...L 由一个RGB向量vi=(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元组auxi=<Iˇi,I^i,fi,λi,pi,qi>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​:分配给此码字的最小和最大亮度
fi{f_i}fi​:该码字的出现的频率(次数)
λi{\lambda _i}λi​:MNRL(maximum negative run-length)定义为训练期间该码字没有出现最长间隔
pi,qi{p_i},{q_i}pi​,qi​:码字第一次和最后一次出现的时间

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

i:t 时刻观测的像素xt=(R,G,B),I=R2+G2+B2{x_t}=(R,G,B),I = \sqrt {{R^2} + {G^2} + {B^2}}xt​=(R,G,B),I=R2+G2+B2​
 ii:根据下面两个条件找到xt{x_t}xt​所匹配的码字cm{c_m}cm​,ε1{\varepsilon _1}ε1​是采样阈值(带宽){colordist(xt,vm)≤ε1brightness(I,<Iˇm,I^m>)=true\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​)≤ε1​brightness(I,<Iˇm​,I^m​>)=true​iii:若没有匹配的,则L←L+1L \leftarrow L + 1L←L+1,创建一个新的码字cL{c_L}cL​{vL=(R,G,B)auxL=<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,t−1,t,t>​iv:若有匹配的,则更新所匹配的码字cm{c_m}cm​
      更新前:{vm=(Rˉm,Gˉm,Bˉm)auxm=<Iˇm,I^m,fm,λm,pm,qm>\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​>​      更新后:{vm=(fmRˉm+Rfm+1,fmGˉm+Gfm+1,fmBˉm+Bfm+1)auxm=<min⁡{I,Iˇm},max⁡{I,I^m},fm+1,max⁡{λm,t−qm},pm,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​+1fm​Rˉm​+R​,fm​+1fm​Gˉm​+G​,fm​+1fm​Bˉm​+B​)auxm​=<min{I,Iˇm​},max{I,I^m​},fm​+1,max{λm​,t−qm​},pm​,t>​ v:循环上述4步,当第N帧处理完后,按下式修改每个码字的 λi{\lambda _i}λi​
λi←max⁡{λi,(N−qi+pi−1)}{\lambda _i} \leftarrow \max \{ {\lambda _i},(N - {q_i} + {p_i} - 1)\}λi​←max{λi​,(N−qi​+pi​−1)}vi:对建模后的码本进行修正,M表示修正后的码本,按下式去掉那些长时间未出现的码字,这些码字大概率代表着前景,TMT_MTM​通常设置为训练帧数的一半,即N2\frac{N}{2}2N​。
M={cm∣cm∈ℓ∧λm≤TM}M=\{ {c_m}|{c_m} \in \ell \wedge {\lambda _m} \le{T_M}\}M={cm​∣cm​∈ℓ∧λm​≤TM​}注:
1.并非找最匹配的码字,找到一个相匹配的码字后就不再继续找了。
2.训练期间可以包含前景,第vi步会去除掉表示前景的码字。

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

i:t 时刻观测的像素xt=(R,G,B),I=R2+G2+B2{x_t}=(R,G,B),I = \sqrt {{R^2} + {G^2} + {B^2}}xt​=(R,G,B),I=R2+G2+B2​
 ii:根据下面两个条件找到xt{x_t}xt​所匹配的码字cm{c_m}cm​,ε2{\varepsilon _2}ε2​是检测阈值{colordist(xt,vm)≤ε2brightness(I,<Iˇm,I^m>)=true\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​)≤ε2​brightness(I,<Iˇm​,I^m​>)=true​iii:BGS(x)={foreground:nomatchbackground:otherwiseBGS(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(分层建模与检测): 只有分类为背景才能融合入背景模型中,所以当新加入/移除物体则不能融合进背景模型中。因此提出了分层建模与检测。
    定义额外的模型HHH(缓存)和三个参数ThT_hTh​、TaddT_{add}Tadd​、TdeleteT_{delete}Tdelete​

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

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

CodeBook算法相关推荐

  1. 前景检测算法_1(codebook和平均背景法)

    前景检测算法_1(codebook和平均背景法) 前景分割中一个非常重要的研究方向就是背景减图法,因为背景减图的方法简单,原理容易被想到,且在智能视频监控领域中,摄像机很多情况下是固定的,且背景也是基 ...

  2. 前景检测算法(二)--codebook和平均背景法

     原文:http://www.cnblogs.com/tornadomeet/archive/2012/04/08/2438158.html 前景检测算法_1(codebook和平均背景法) 前景 ...

  3. opencv-视频处理-实时的前景检测-Vibe算法

    vibe算法是一种像素级的前景检测算法,实时性高,内存占有率低,前景检测准确率高.但是会出现"鬼影",当然基于对鬼影的处理,也会有相应的对vibe算法的改进. 把下面三篇文章看明白 ...

  4. OpenCV3学习(10.2)codebook码书法实现背景剔除

    一.概述 码本模型是 Kim 等提出的一种新颖的背景建模方法.该模型针对彩色视频图像序列,根据像素点的连续采样值的颜色失真程度及其亮度范围,将背景像素用码本表示,然后利用背景差分法思想对新输入像素值与 ...

  5. 基于RGB颜色空间的算法

    年份 论文题目 作者 论文内容 1999 A statistical approach for real-time robust background subtraction and shadow d ...

  6. 目标检测跟踪算法--传统方法

    第一阶段 目标跟踪分为两个部分,一个是对指定目标寻找可以跟踪的特征,常用的有颜色,轮廓,特征点,轨迹等,另一个是对目标特征进行跟踪. 1.静态背景 1)背景差:对背景的光照变化.噪声干扰以及周期性运动 ...

  7. 目标检测中背景建模方法

    FROM: http://www.cnblogs.com/ronny/archive/2012/04/12/2444053.html 最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为 ...

  8. opencv如何把一个矩阵不同列分离开_学习OPEN_CV

    OpenCv中文论坛精华地址 http://www.opencv.org.cn/index.php/User:Ollydbg23 http://sivp.sourceforge.net/(sivp) ...

  9. 常见的目标检测中的背景建模方法总结

    最近一直在做前景检测方面的研究,刚开始主要是做一些工程性的应用,为了解决工程方面的问题,下了不少功夫,也看了不少最近国内外的文章.一直想做个总结,拖着拖着,终究却写成这篇极不成功的总结.(文章下载:h ...

  10. 学习OpenCV 函数方法结构总结

    原文出自:http://blog.chinaunix.net/uid-8402201-id-2899695.html OpenCv中文论坛精华地址 http://www.opencv.org.cn/i ...

最新文章

  1. (JAVA)从零开始之--打印流PrintStream记录日志文件
  2. mapreduce编程实例(4)-求中位数和标准差
  3. try/ catch/ finally, 你不知道的细节,很骚!
  4. AjaxUploader使用
  5. leetcode1069. 产品销售分析 II(SQL)
  6. 喜讯 | 国际智慧城市大会巨杉喜获两项大奖
  7. 基于android课设报告,基于android的简单用户注册系统课程设计报告.doc
  8. 计算机基础知识教程函数,EXCEL函数教程_电脑基础知识_IT计算机_专业资料.ppt
  9. Thinkphp 模板/包含文件
  10. html 鼠标放上去变色,css3 鼠标经过div背景变色
  11. WBS-Work Breakdown Structure工作分解结构
  12. SECOND——论文与代码解析
  13. 虚拟空间对新闻媒体的真实挑战
  14. 每日分享正能量一段话45句
  15. 呼叫中心新座席必修课
  16. QQ开始对每日添加好友人数作出限制(转)
  17. 战地1修改服务器,战地1服务器设置教程
  18. HBuilder的安装与试用
  19. 如何在linux终端创建txt文件,在Linux中,如何使用 命令行 快速创建一个文本文件...
  20. mac系统安装使用linux命令

热门文章

  1. Pizza Separation
  2. ExactScan pro for mac(万能扫描仪整合工具)
  3. 【锐捷交换机】清除密码
  4. RunningCheese Firefox 71.0 正式版 [1225]
  5. 5W1H 图书管理系统
  6. php 会议室预定系统,MRBS开源会议室预订系统安装
  7. Ubuntu傻瓜式录制GIF图—— Peek
  8. EasyCVR对接大华SDK,视频回放无法播放的排查过程及解决方法
  9. .NET/C#大型项目研发必备(12)--使用MQ消息队列
  10. 定义一个list对象数组 java_javascript定义一个list