codebook算法从原理上讲仍然属于背景差分。他的背景建模有聚类的思想,他是用一个码本(codebook)cb来描述一个像素p,cb中包含着若干码元(code element)ce,这些ce就是该像素点p的一个聚类,码本算法背景建模的过程就是要构建像素的一个个聚类,即码本。

数据结构

typedef struct
{
code_element **cb;//码元的指针数组
int num_Enterties;//记录有多少个码元
int t;//记录该像素的当前时间
}code_book;

typedef struct ce
{
uchar learnHigh[NCHANNELS];//学习阀值
uchar learnLow[NCHANNELS];
uchar max[NCHANNELS];//码元吸收的像素点中最大像素值
uchar min[NCHANNELS];//同上,这两个阀值用于最后判断前景背景时使用
int t_last_update;//最后更新时间
int stale;//多久没有更新
int updated;
int f;//频数
}code_element;

背景建模过程

码本算法的背景建模过程是一个统计的过程,即它会在建模阶段将某点出现的可能的像素值进行统计,根据其出现的某种特征属性,设定阀值进行判断,符合条件的像素值即可作为背景像素。

例如,要进行建模的帧数为5帧(为举例方便,一般建模应该在一秒以上,30帧左右,当然不是建模所用的帧数越多越好),在这5帧中相同的某点p(x,y),像素取值依次是pi =  {135,140,200,145,135}(此处假设所建模的对象是单通道的灰度图),那么在建模过程中,当第一帧像素值135到来时,由于p点对应像素值的码本没有码元,那么就新建一个码元,并为该码元赋值,设定code_element的各项属性值,第二帧到来后,140像素值会和已有的第一个码元进行匹配比较,在码元中有一对属性值learn_high和learn_low,这对属性值规定了该码元能“融合”的像素值范围,当满足条件135-learn_low < 140 < 135+learn_high时,即可将140像素融合,若不满足则为140像素新建一个码元,此处假设learn_high和learn_low均为10,那么可融合140,融合后更新该码元的一些数据,例如出现频数f要加1,stale最久未更新时间,他是最后更新时间t_last_update和当前时间t的差值,同理之后的第3、4、5帧按此过程,被融合或者新建码元,会发现只有像素200没有被融合,自己新建了一个码元。当匹配完后,就要进入下一个阶段——剔除噪声码元,剔除的依据是设定合理的阀值,若不满足条件则认为是噪声,剔除依据的属性可以使频数f或者最久未更新时间stale,或者是二者的组合条件,具体使用什么样的剔除方法,要根据自己想要的结果进行选择,此处设立条件为f > t/2,即如果一个码元的更新频数如果小于一半建模帧数就认为它是噪声,将其删除,即认为该码元出现的次数太少,不认为他是长时间保持稳定不变的背景像素。那么,经过剔除的码元即是可以合理描述背景的码元。

其他位置的像素点也是依照上述的方法,建立起合理的背景码元模型。

识别前景物体

差分背景。其实这一步,和建立背景模型中的匹配码元是一样的。将要检测的帧的像素和对应位置的背景模型的像素码元进行匹配,如果匹配则说明该点是背景点,如果不匹配则说明改点是前景点,就这么简单!

背景建模之codebook算法相关推荐

  1. OpenCV4中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理、特点是什么,并附示例代码

    关于OpenCV4中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,汇总如下: 上面的汇总不仅显示了OpenCV4中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,还显示了它们的继承. ...

  2. OpenCV3.0中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理、特点是什么,并附示例代码

    关于OpenCV3中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,汇总如下: cv::Algorithm   cv::BackgroundSubtractor     cv::Backgro ...

  3. 运动目标检测(背景建模)

    高斯背景建模 高斯背景模型是由Stauffer等人提出的经典的自适应背景建模方法,假设每个像素在时域上符合正态分布,在一定阈值范围内 的像素判定为背景,并用来更新模型,不符合该分布的像素即为前景. 高 ...

  4. 详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::BackgroundSubtractorKNN,并利用它实现对道路监控视频前景/背景的提取

    cv::BackgroundSubtractorKNN是利用K近邻(K-nearest neigbours)思想实现的背景建模. 百度百科对KNN算法的概括如下: 邻近算法,或者说K最邻近(KNN,K ...

  5. OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGSOC的使用示例代码及运行效果

    关于类cv::bgsegm::BackgroundSubtractorCNT的大概情况,我已在博文https://blog.csdn.net/wenhao_ir/article/details/125 ...

  6. 背景建模--Vibe 算法改进

    背景建模--Vibe 算法改进 一.概述 针对鬼影问题,提出一种了基于前景区域与邻域背景区域直方图相似性度量的判别方法,检测并消除鬼影:针对静止目标问题,改进了Vibe背景模型的更新策略,有效抑制静止 ...

  7. 背景建模--Vibe 算法优缺点分析

    背景建模--Vibe 算法优缺点分析 一.Vibe 算法的优点 Vibe背景建模为运动目标检测研究邻域开拓了新思路,是一种新颖.快速及有效的运动目标检测算法.其优点有以下两点: 1.思想简单,易于实现 ...

  8. OpenCV中高斯混合背景建模算法汇总

    2019独角兽企业重金招聘Python工程师标准>>> 引用地址:http://blog.csdn.net/chuhang_zhqr/article/details/51060745 ...

  9. ViBe背景建模算法

    ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequences 算法官网: ...

  10. 混合高斯背景建模算法GMM

    高斯混合模型介绍 高斯混合模型(Gaussian Mixture Model)通常简称GMM,是一种业界广泛使用的聚类算法,该方法使用了高斯分布作为参数模型,并使用了**期望最大(Expectatio ...

最新文章

  1. nginx安装 问题 1
  2. 11月13日科技联播:支付宝上线首张电子离婚证;网易云音乐敲定新一轮融资
  3. oracle rac 中的ocr,11g rac中 ocr和 votingdisk疑问
  4. 算法6-1:哈希函数
  5. leetcode 665. 非递减数列(贪心算法)
  6. 计算机英语input,人教版高中英语选修计算机英语VoiceInput.ppt
  7. Java继承、封装、多态
  8. 基于vue的nuxt框架cnode社区服务端渲染
  9. [Java] 蓝桥杯 BASIC-7 基础练习 特殊的数字
  10. SQL数据库“单个用户”不能访问,设置为多个用户的解决方法
  11. 关于Demo3D中的Random
  12. INTEL经典芯片及主板回顾
  13. 华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办
  14. 如何用Word打开PDF文件?
  15. ImageOptim 图片压缩工具
  16. ssh secure shell:server responded algorithm negotiation failed
  17. sql 验证身份证号码
  18. 深度学习第一次作业 - 波士顿房价预测
  19. git Incorrect username or password (access token)问题解决
  20. 服务器和超级计算机的性能,超级计算机和云服务器的区别

热门文章

  1. Linux指纹识别相关配置
  2. 烤仔观察丨和你息息相关!DCEP 能否领跑?各国数字货币都在搞什么?
  3. 屏幕录像专家android,屏幕录像专家
  4. 人脸图像数据库(完整版)
  5. python 会议室预约系统解决方案_快思聪FUSION会议预约系统
  6. winform使用字体图标
  7. openstack-packstack一键式在线部署
  8. Netty框架介绍及实战
  9. Apache Ranger KMS 部署文档
  10. PHP反三角函数,反三角函数求导公式