grabcut采用graph cut图分割和最大流技术的一种交互式图像分割技术,不吹牛逼了,接触opencv 10来天,就这点墨水了,直接言归正传,在学习了https://blog.csdn.net/zouxy09/article/details/8534954,大牛的文章后,有点感悟,所以记录下来,若有人看见了,就当做好玩的吧。

首先来介绍一下Graph cut ,图(graph)的分割模型图下图所示(大家肯定都见过了),以能量公式为基准,采用max flow算法,一次全局求解最小能量割边,能量公式为

E(L)=aR(L)+B(L)

S与各个像素点之间的虚线就是R(L),各像素点之间的实线是B(L),系数a是一个权重系数,决定了哪个因素影响更大一些。

区域项R(L)的计算方法如下所示,表示像素点lp归属于前景'obj'的概率Pr,或者归属于背景‘bkg’的概率Pr,同时为了采用最大流方法计算割边(cuts),所以负对数,这样得到的若该像素点归属于前景的概率越大,则Rp(1) 能量越小,符合最大流max flow算法理论(啥是最大流?),Graph cut 算法是根据该像素点(lp)灰度值,在前景和背景[这个前景和背景需要事先进行标记的,你需要提前告诉Graph,哪个是背景?哪个是前景]中的灰度值直方图所占的比例来计算前景和背景概率的,但是Grab cut是根据搞死混合模型来计算的(等会细讲)

Rp(1) = -ln Pr(Ip|’obj’);                      Rp(0) = -ln Pr(Ip|’bkg’)

边界项B(L)的计算方法:

这个是Graph cut的计算方法,比较简单,B 就是计算某个像素点lp与相邻像素点lq之间的(灰度值)得差异,lp-lq的值越大,两个像素之间的边越是应该是割边(cuts),B<p,q>的值越小,整体能量越小,符合最大流算法,在Grab cut 中,不是以灰度为基准,而是以BGR三通道衡量两像素的相似性,采用欧式距离(二范数)计算两个像素之间的差异。

最大流算法(max flow) 用于处理如何去切这个权值图(graph),切过之后累加得到能量E(L)值最小,切边(割边)就是上图中的黑线(各像素点之间的边)。

以上就是Graph cut的计算流程,Grab cut同样采用图框架理论,以及最大流算法求解割边,但是不同的是Grab cut 采用了BGR三通道(graph 是灰度图),在计算区域项R(L)时,采用了高斯混合模型。

///

grabcut的主要思路:(也只主要参考了上门面那位大牛的代码解释)

高斯混合模型,就是多个单高斯模型,如何评价一个像素集合呢?又如何判断某一个像素点属于该像素集合的概率呢?这时可以构建高斯模型来反映该像素集合的特征,在grabcut中,对应于前景和背景分别有5个高斯模型,例如若前景只有一个高斯模型,某个前景像素点lp在计算归属于前景的概率时,只有一种样本库模型,计算的归属概率有可能会很低,最后在最大流分割时,会被误判到背景里,所以有多个模型计算式,选取概率最大的一个,高斯模型越多,前景像素集的种类越多,越能够包容范围的像素点,过多的话计算量也会很大。

区域项R(L)的计算方法:

混合高斯概率计算公式如下:

这里面的x 是BGR三通道向量,如下所示:

B         G        R

第1个像素点p1        200      100     50

第2个像素点p2        220      110     60

第3个像素点p3        100      150    80

............

πi表示,第i个高斯模型的样本数量Ni在总的样本数量N里面的比值,

gi的是第i个高斯模型的概率模型公式,其中有两个参数,均值(ub,ug,ur)和协方差矩阵(协方差矩阵计算参照https://www.cnblogs.com/chaosimple/p/3182157.html),

这样一共有三个参数需要初始化(πi,均值u,协方差)

边界项B(L)的计算方法:

简单的说就是,计算相邻两个像素颜色之间的欧氏距离(B,G,R向量的二阶矩),可以参照源代码中的计算方法,一目了然

区域项反映的是,像素样本集合的整体特性,边界项反映的是两个像素之间的差异,一个这整体,一个是局部

具体流程用一幅图说明:

这样写真轻松,具体学习,可以通过这张图结合源代码,一定可以弄清楚的,有错误的地方,欢迎指出

grabcut图像分割的原理简单介绍相关推荐

  1. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

    BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...

  2. LDAP服务器的概念和原理简单介绍

    仅用于个人学习,侵删. 本文转自:LDAP服务器的概念和原理简单介绍 [http://seanlook.com/2015/01/15/openldap_introduction/] 1. 目录服务 目 ...

  3. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  4. Android通过辅助功能实现抢微信红包原理简单介绍

    简书文章:https://www.jianshu.com/p/e1099a94b979 附抢红包开源项目地址,代码已全改为Kotlin了,已适配到最新微信7.0.5版本,如果对你有所帮助赏个star吧 ...

  5. dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  6. dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享

    原文出处http://blog.csdn.net/hzzhoushaoyu/article/details/43273099 一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo ...

  7. 日志管理(一):slf4j原理简单介绍

    转载自:http://blog.sina.com.cn/s/blog_6f67b91d0100tpqh.html 全称:Simple Logging Facade for Java  简单日志门面(F ...

  8. GAN 数学原理简单介绍以及代码实践

    1. GAN 数学原理 1.1 GAN 概述 GAN(Generative Adversarial Network) 是一种深度生成神经网络,它包括 生成模型 与 判别模型 两个部分.其中,生成模型 ...

  9. Binding的原理简单介绍

    前言 开始写这个新系列,这些年用WPF做了很多项目,杂七杂八的东西写了不少,略略总结下,也希望能给朋友们带来点帮助. 本篇文章主要是自实现了一个BindingEngine,可以在WPF,WinForm ...

最新文章

  1. ASP.NET控件事件丢失的探究
  2. ide硬盘接口图 sata硬盘接口图 SCSI硬盘接口图
  3. js内存泄漏常见的四种情况(From LeuisKen)
  4. Mean Shift算法(CamShift)
  5. Left join后用and和where的区别
  6. mysql 搜索正则表达式_[MySQL] 用正则表达式进行搜索
  7. ubuntu和centos 编译安装nginx及常用命令
  8. python往redis导数_Python:教你一招,将500W+的数据快速写入redis(文内赋赠教程)...
  9. 山东大学网络教育计算机基础考试题,山东大学网络教育计算机网络基础期末考试复习...
  10. Git上传文件到GitHub失败问题解决
  11. 合成器插件Sylenth1 2.2.1绿化版亲测有效
  12. 错误: 找不到或无法加载主类 Main
  13. 计算机网络-域名与IP地址详解
  14. gson 解析int类型转换为double解决方案
  15. TypeError: Converting circular structure to JSON
  16. 增量学习方法分类及近两年论文汇总
  17. 流形上的预积分(上)
  18. 955不加班的公司名单:955.WLB
  19. Linux服务器系统有哪些?
  20. activiti的流程事件

热门文章

  1. 如何设计一个简单的KV数据库
  2. 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/
  3. 【学习笔记】山东大学生物信息学-05 高通量测序技术介绍 + 06 统计基础与序列算法(原理)
  4. 病原微生物高通量测序:第二节 应用场景
  5. 遥信量采集、显示及信息处理功能 遥测及数据处理功能
  6. Jedis实现批量删除redis cluster
  7. 如何使用【亿愿专利下载器】批量下载美国专利的PDF全文
  8. Python最新就业信息
  9. Gitee码云仓库操作步骤---忘了就来看看
  10. 基于Matlab软件的视觉导航系统的仿真