http://blog.csdn.net/zouxy09/article/details/8534954

区别:

(1)Graph Cut的目标和背景的模型是灰度直方图,Grab Cut取代为RGB三通道的混合高斯模型GMM;

(2)Graph Cut的能量最小化(分割)是一次达到的,而Grab Cut取代为一个不断进行分割估计和模型参数学习的交互迭代过程;

(3)Graph Cut需要用户指定目标和背景的一些种子点,但是Grab Cut只需要提供背景区域的像素集就可以了。也就是说你只需要框选目标,那么在方框外的像素全部当成背景,这时候就可以对GMM进行建模和完成良好的分割了。即Grab Cut允许不完全的标注(incomplete labelling)。

1、颜色模型

我们采用RGB颜色空间,分别用一个K个高斯分量(一取般K=5)的全协方差GMM(混合高斯模型)来对目标和背景进行建模。于是就存在一个额外的向量k = {k1, . . ., kn, . . ., kN},其中kn就是第n个像素对应于哪个高斯分量,kn∈ {1, . . . K}。对于每个像素,要不来自于目标GMM的某个高斯分量,要不就来自于背景GMM的某个高斯分量。

所以用于整个图像的Gibbs能量为(式7):

其中,U就是区域项,和上一文说的一样,你表示一个像素被归类为目标或者背景的惩罚,也就是某个像素属于目标或者背景的概率的负对数。我们知道混合高斯密度模型是如下形式:

所以取负对数之后就变成式(9)那样的形式了,其中GMM的参数θ就有三个:每一个高斯分量的权重π、每个高斯分量的均值向量u(因为有RGB三个通道,故为三个元素向量)和协方差矩阵(因为有RGB三个通道,故为3x3矩阵)。如式(10)。也就是说描述目标的GMM和描述背景的GMM的这三个参数都需要学习确定。一旦确定了这三个参数,那么我们知道一个像素的RGB颜色值之后,就可以代入目标的GMM和背景的GMM,就可以得到该像素分别属于目标和背景的概率了,也就是Gibbs能量的区域能量项就可以确定了,即图的t-link的权值我们就可以求出。那么n-link的权值怎么求呢?也就是边界能量项V怎么求?

边界项和之前说的Graph Cut的差不多,体现邻域像素m和n之间不连续的惩罚,如果两邻域像素差别很小,那么它属于同一个目标或者同一背景的可能性就很大,如果他们的差别很大,那说明这两个像素很有可能处于目标和背景的边缘部分,则被分割开的可能性比较大,所以当两邻域像素差别越大,能量越小。而在RGB空间中,衡量两像素的相似性,我们采用欧式距离(二范数)。这里面的参数β由图像的对比度决定,可以想象,如果图像的对比度较低,也就是说本身有差别的像素m和n,它们的差||zm-zn||还是比较低,那么我们需要乘以一个比较大的β来放大这种差别,而对于对比度高的图像,那么也许本身属于同一目标的像素m和n的差||zm-zn||还是比较高,那么我们就需要乘以一个比较小的β来缩小这种差别,使得V项能在对比度高或者低的情况下都可以正常工作。常数γ为50(经过作者用15张图像训练得到的比较好的值)。OK,那这时候,n-link的权值就可以通过式(11)来确定了,这时候我们想要的图就可以得到了,我们就可以对其进行分割了。

2、迭代能量最小化分割算法

Graph Cut的算法是一次性最小化的,而Grab Cut是迭代最小的,每次迭代过程都使得对目标和背景建模的GMM的参数更优,使得图像分割更优。我们直接通过算法来说明:

2.1、初始化
(1)用户通过直接框选目标来得到一个初始的trimap T,即方框外的像素全部作为背景像素TB,而方框内TU的像素全部作为“可能是目标”的像素。

(2)对TB内的每一像素n,初始化像素n的标签αn=0,即为背景像素;而对TU内的每个像素n,初始化像素n的标签αn=1,即作为“可能是目标”的像素。

(3)经过上面两个步骤,我们就可以分别得到属于目标(αn=1)的一些像素,剩下的为属于背景(αn=0)的像素,这时候,我们就可以通过这个像素来估计目标和背景的GMM了。我们可以通过k-mean算法分别把属于目标和背景的像素聚类为K类,即GMM中的K个高斯模型,这时候GMM中每个高斯模型就具有了一些像素样本集,这时候它的参数均值和协方差就可以通过他们的RGB值估计得到,而该高斯分量的权值可以通过属于该高斯分量的像素个数与总的像素个数的比值来确定。

2.2、迭代最小化

(1)对每个像素分配GMM中的高斯分量(例如像素n是目标像素,那么把像素n的RGB值代入目标GMM中的每一个高斯分量中,概率最大的那个就是最有可能生成n的,也即像素n的第kn个高斯分量):

(2)对于给定的图像数据Z,学习优化GMM的参数(因为在步骤(1)中我们已经为每个像素归为哪个高斯分量做了归类,那么每个高斯模型就具有了一些像素样本集,这时候它的参数均值和协方差就可以通过这些像素样本的RGB值估计得到,而该高斯分量的权值可以通过属于该高斯分量的像素个数与总的像素个数的比值来确定。):

(3)分割估计(通过1中分析的Gibbs能量项,建立一个图,并求出权值t-link和n-link,然后通过max flow/min cut算法来进行分割):

(4)重复步骤(1)到(3),直到收敛。经过(3)的分割后,每个像素属于目标GMM还是背景GMM就变了,所以每个像素的kn就变了,故GMM也变了,所以每次的迭代会交互地优化GMM模型和分割结果。另外,因为步骤(1)到(3)的过程都是能量递减的过程,所以可以保证迭代过程会收敛。

(5)采用border matting对分割的边界进行平滑等等后期处理。

2.3、用户编辑(交互)

(1)编辑:人为地固定一些像素是目标或者背景像素,然后再执行一次2.2中步骤(3);

(2)重操作:重复整个迭代算法。(可选,实际上这里是程序或者软件抠图的撤销作用)

总的来说,其中关键在于目标和背景的概率密度函数模型和图像分割可以交替迭代优化的过程。更多的细节请参考原文。

《“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts》

http://research.microsoft.com/en-us/um/people/ablake/papers/ablake/siggraph04.pdf

OpenCV实现了这个算法(没有后面的border matting过程)

从基于直方图的Graph-Cut到Grab-Cut相关推荐

  1. 图像分割之(三)从Graph Cut到Grab Cut

    上一文对GraphCut做了一个了解,而现在我们聊到的GrabCut是对其的改进版,是迭代的Graph Cut.OpenCV中的GrabCut算法是依据<"GrabCut" ...

  2. 基于Grab Cut交互性图像分割

    引言 Grab Cut是在Graph Cut上进行改进的,相比后者,前者的新颖之处在于: 迭代预测估计(iterative estimation) 不完全标记(incomplete labelling ...

  3. 图像分割(三)--Grab Cut

     原文: http://blog.csdn.net/zouxy09/article/details/8534954 上一文对GraphCut做了一个了解,而现在我们聊到的GrabCut是对其的改进 ...

  4. Grab Cut算法

    转载自:http://blog.csdn.net/zouxy09/article/details/8534954 上一文对GraphCut做了一个了解,而现在我们聊到的GrabCut是对其的改进版,是 ...

  5. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。

    图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产 ...

  6. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果

    十三种基于直方图的图像全局二值化算法实现 1. 什么是基于直方图的图像全局二值化算法 2. 灰度平均值 3. 百分比阈值(P-Tile法) 3. 基于双峰的阈值 3.1 基于平均值的阈值 3.2 基于 ...

  7. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

    源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.

  8. 基于直方图均衡化的激光水下图像处理

    采用直方图进行水下图像处理,感觉对我搜到的这几个图片效果可以,最近看了一些使用修正的暗通道进行水下图像处理的,但是我没有弄出来效果.我感觉即使使用暗通道进行处理,那么每个通过处理的结果应该也朝直方图均 ...

  9. 基于直方图均衡化的水下激光图像处理(MATLAB仿真)

    原文:http://blog.csdn.net/sunlinyi66/article/details/39215447 基于直方图均衡化的水下图像增强(MATLAB仿真) 可以对RGB三个通道进行直方 ...

最新文章

  1. jQuery成为微软.NET开发工具的一部分了
  2. Python数据结构与算法(第二天)
  3. 深入理解 CAP 定理
  4. 【代码笔记】iOS-下拉选项cell
  5. 强制禁用gitlab的双因子认证:Two-Factor Authentication
  6. LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)
  7. 理解javascript
  8. PostgreSQL 可靠性和一致性 代码分析
  9. 大数据分析的流程是怎样
  10. StyleCop学习笔记——初识StyleCop
  11. java 静态方法调用的问题
  12. Windows 下 FTP的搭建
  13. 万里汇WorldFirst人民币提现,1天内到账,太快了!
  14. 用计算机画图教案评价,电脑画图教案
  15. 如何查计算机的开机启动程序,Win7系统电脑如何查看开机启动项?
  16. 【Android Test】糟心的“Empty test suite ”异常
  17. 你怎么看欧阳娜娜空降阿里p8?
  18. 科创人·派拉软件CEO谭翔:零信任本质是数字安全,To B也要深研用户心智
  19. 【计算方法】解线性方程组的直接法
  20. git 代码记录单条合并的方法

热门文章

  1. Android之日期时间选择器使用方法
  2. 北大青鸟s2结业考试机试_重庆北大青鸟「学员心声」任何一次的考试,都是一次珍贵的蜕变...
  3. python字符串创建_在Python上创建完整的字符串
  4. python单例模式继承_Python四种实现单例模式的方法
  5. 老师,你和我的文具撞衫了!
  6. 一张纸一幅图,竟然提高了10倍的学习和工作效率!?
  7. 学计算机要买什么样的电脑,大学开学要买电脑吗?又要买什么样的电脑?看准这些再买也不迟!...
  8. java十六进制大小端转换_字节顺序
  9. java 列表展开方式_android列表控件实现展开、收缩功能
  10. 修改图层的范围_【PS|第39期】数字绘画 使用填充图层