opencv学习笔记(四)——codebook算法

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;
(代码是learning opencv中的代码)

背景建模过程

码本算法的背景建模过程是一个统计的过程,即它会在建模阶段将某点出现的可能的像素值进行统计,根据其出现的某种特征属性,设定阀值进行判断,符合条件的像素值即可作为背景像素。
例如,要进行建模的帧数为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,即如果一个码元的更新频数如果小于一半建模帧数就认为它是噪声,将其删除,即认为该码元出现的次数太少,不认为他是长时间保持稳定不变的背景像素。那么,经过剔除的码元即是可以合理描述背景的码元。
其他位置的像素点也是依照上述的方法,建立起合理的背景码元模型。

识别前景物体

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

(learning opencv源码中有一处内存泄露的问题,还有一个剔除不适合码元规则选用不当的问题,希望正在学习的小伙伴多多交流!)

codebook码本算法相关推荐

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

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

  2. 机器学习从零开始-常见算法手推pure python

    简单线性回归 概念 简单线性回归代码 # 平均值函数 def calculate_mean(a_list_of_values):mean=sum(a_list_of_values)/float(len ...

  3. 前景检测算法(一)--综述

    原文: https://www.52ml.net/17001.html?utm_source=tuicool&utm_medium=referral 运动前景对象检测一直是国内外视觉监控领域研 ...

  4. NR HARQ(三) semi-static HARQ-ACK codebook

    微信同步更新,欢迎关注同名modem协议笔记 UE在一个PUCCH(或PUSCH)上发送HARQ-ACK信息时,信息bit很可能是多个bits位数,这个多bits位数的HARQ-ACK信息,也称为HA ...

  5. Pedestrian Identification (1) ——前景目标检测

    运动前景对象检测一直是国内外视觉监控领域研究的难点和热点之一,其目的是从序列图像中将变化区域从背景图像中提取出来,运动前景对象的有效检测对于对象跟踪.目标分类.行为理解等后期处理至关重要,那么区分前景 ...

  6. 前景目标检测总结 1

     运动前景对象检测一直是国内外视觉监控领域研究的难点和热点之一,其目的是从序列图像中将变化区域从背景图像中提取出来,运动前景对象的有效检测对于对象跟踪.目标分类.行为理解等后期处理至关重要,那么区 ...

  7. [转]人脸识别中的活体检测

    https://zhuanlan.zhihu.com/p/25401788 早在指纹识别应用中就有针对于活体手指的检测技术,即使机器只对真人活体指纹产生识别反应,对其他一切物质不作识别,用于指纹识别产 ...

  8. 毫米波蜂窝系统的信道估计及混合预编码

    毫米波蜂窝系统的信道估计及混合预编码 摘 要 毫米波蜂窝系统由于在毫米波频带上可获得巨大的带宽,能够提供Gbit/s数量级的的传输速率.为了实现充分链接,毫米波将在发送设备和接收设备上采用多天线阵列的 ...

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

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

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

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

最新文章

  1. Linux常用命令及技巧3
  2. 改变2020年及未来的8大人工智能趋势
  3. python语法基础题输出倒三角图案,【趣味shellamp;amp;python】倒三角控制台输出图形...
  4. 京瓷 打印 打印机 账户_UV打印机市场竞争的关键是什么?
  5. C# 学习笔记(7) 进程
  6. java swing单选按钮点击事件_java Swing中点击不同单选按钮JPanel中部分区域进行改变,如何实现?。。急啊!...
  7. C语言用位运算构建特定的二进制数
  8. docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...
  9. 深圳出差 第二天【原创】
  10. 双重差分模型能做固定效应吗_互助问答第53期:控制时间效应、交互项等问题...
  11. Parasoft软件测试实践:什么是左移测试?
  12. 8位可控加减法电路设计_100以内加减法速算方法,口算速度快一倍
  13. Android 2048游戏开发
  14. 阜阳智慧城市建设居全国地市级城市第11位
  15. android 人物走动_Android 中通过切割图片创建人物行走动画
  16. FMI飞马网 | AI人工智能:54份行业重磅报告汇总(附下载)
  17. GIS空间分析之公路选线
  18. 大华城市安防监控系统平台管理存在任意文件下载漏洞
  19. Spark解决 System memory 259522560 must be at least 471859200
  20. android busybox脚本,在BusyBox中创建和控制启动脚本

热门文章

  1. 个人信息保护合规建设行业最佳指南
  2. 攻防世界 --> funny_video --> 最完整和正确的解答
  3. Lenovo y50-70 1080P 10.15.2 修改驱动 更新驱动
  4. 使用Docker部署MySQL
  5. 盘点城市智慧水务领域的英文期刊
  6. 机器学习的环境搭建流程
  7. 最新Apicloud+Vue开发App专题(完整)
  8. 服务器网口聚合操作文档,服务器网口聚合怎么操作
  9. 我国无线2.4g及5g信道-个人笔记
  10. ORACLE 中通过证件号码获取性别