open学习(3) codebook
来源:互联网 发布:文明5黄金时代算法 编辑:程序博客网 时间:2024/05/30 20:08
最近看书效率低下啊。。
看了《学习opencv》的codebook这一段。其实这个代码倒是蛮容易看懂的,大致思想可能如下(有可能自己理解有误,有点出入的地方):
1.对每一个像素构建一个codebook,每个codebook由一个codebox的序列和一些其他的信息所构成。codebox里面包含的信息由:{学习阈值的上界learnHigh,学习阈值的下届learnLow,box的实际上界Max,box的实际下界Min,最近一次更新时间t_last_update,用于判断是否negative run(有点没懂)的界限stale}。
2.接着就是背景学习过程,大致步骤如下:
1)对于一个像素,遍历它的codebook的每一个codebox,若存在一个codebox使得该像素各个通道的值都在学习阈值内,则转(2);否则(4)
2)更新该box的t_last_update,并且更新各个通道的实际box上下界:cb->max=(cb->max<p)?p:cb->max;cb->min=(cb->min>p)?p:cb->min;
3)若该像素值+/- 一个学习界值cbBounds(通常为10)超过或低于该box的学习阈值上下界,那就学习阈值上下界分别加减1;转(5)
4)添加一个新的box,box的上下界都为该像素各个通道的值,而学习阈值的上下界为像素值+/-cbBounds;
5)更新全体codebox的stale值。
通过一段时间的背景学习之后,就可以做背景差分了,即对于每一个像素,在它的codebook中搜索,看是否有codebox满足该像素点像素值都在[Max+MaxMod,Min-MinMod]区间内,若有,则说明该像素为背景,若不存在,则该像素为前景。
大致思想叙述完毕,书上代码也很好看懂,不过有个问题困扰了我一阵了,codebook中的box会不会有重叠的部分,比如:有一个box的上下界为[10,30],他的学习阈值为[0,40],先来了像素值为41,按照规则会产生一个新的box在后面,上下界为[41,41],学习阈值为[31,51],而再来了40,41,由于box的先后关系,前一个box会被更新,上下界为[10,41],学习阈值为[0,42],这样就构成了box的重叠。后来想了想,这样的情况,在单通道的情况下出现几率较大,而再多通道的情况下,由于满足条件更为苛刻,也许重叠的情况出现的可能性就不太大了,而且若是真的有重叠,或许在更新stale的时候被重叠的box就会被删掉了。
也许是我自己想太多,如果大家有什么见解也希望不吝赐教。
- open学习(3) codebook
- opencv codebook学习
- 背景学习模型 —》codebook算法
- 《学习openCV》例程解析 ex_9_3(codeBook模型实现背景减除)
- 《学习openCV》例程解析 ex_9_3_ex(codeBook + 连通净化)
- 《学习openCV》例程解析 ex_9_3_ex(codeBook + 连通净化)
- 《学习OpenCV》codebook法实现背景建模(page308)
- 《学习OpenCV》codebook法+连通域法(page319)
- opencv codebook
- 《数据结构》学习-- Hash(3) --Open Addressing
- 使用codebook检测前景
- opencv codebook背景建模
- codebook背景建模原理
- codebook背景建模原理
- OpenCV c#版 CodeBook
- codebook背景建模
- 【背景建模】codebook
- codebook码本算法
- 虚继承的理解以及需要注意的问题
- 利用霍纳规则求多项式的值(递归)
- 设计模式学习之架构设计中的架构模式
- 使用SCTP优化网络概述
- C# 参考之方法参数关键字:params、ref及out
- open学习(3) codebook
- hiberate的二级缓存详解
- Winsdows 8 环境下搭建Windows Phone 开发环境
- Android 模拟器 安装apk 注意事项
- Android异步下载网络图片(其一)
- JAVA学习—IO—转换流
- 切记 cocos2d中一个CCAction 对象只能被使用到一个Sprite对象上
- 找出和为某个常数的数对
- mini2440移植WIFI