本文主要是介绍图割论文阅读笔记:Implementing GrabCut,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Implementing GrabCut
这篇论文介绍了GrabCut的实现方法,并说了原GrabCut论文的一些弊端。其实也就是一种实现,而且这里说的弊端我觉得有些不妥。
GrabCut Summary
1.用户用矩形框创造一个初始Trimap,框里边被标记为未知区域,框外边被标记为已知背景。
2.由此计算出一个初始图像分割,其中所有未知像素暂时放置在前景类中,并且所有已知的背景像素被放置在背景类中。
3.GMMs由初始的前背景类求得。
4.前景类中的每个像素被分配给前景GMM中最可能的高斯分量。类似地,背景中的每个像素被分配给最可能的背景高斯分量。
5.当前GMMs被丢弃,并且从在先前集合中创建的像素集中学习新的GMMs。
6.构建图并运行图切割以找到像素的新的暂时前景和背景分类。
7.重复步骤4-6,直到分类收敛。
Data structures
在GrabCut中,每个像素需要有4种不同的信息。在我们的实现中,每种信息都存在一个数组中,每个数组都和原始图像一样大。原论文中出现的变量名在解释后边的括号里:
- 颜色:一个RGB值(z)
- Trimap:背景Trimap、前景Trimap和未知Trimap的一种
- Matte:在初始硬分割那一步中,不是背景Matte就是前景Matte
- 分量标号:1到K之间,K是GMM中高斯分量数目(k)
除此之外,GrabCut也需要前景和背景GMMs中的K个高斯分量。对每要个高斯分量:
Initialization
初始化步骤包括1-3。1.由矩形框初始化Trimap,这是给算法的初始信息。2.掩码被初始化,背景为Trimap背景,前景为Trimap未知区域。Trimap和掩码的区别有效的把正确的用户输入和GrabCut得出的分割分离开来,但这可能是不正确的。3.在初始化的掩码中,分别给前景掩码和背景掩码有K个分量的GMM,也就是说必须创建2K个分量。我们先把两个区域划分为K个像素集,然后由每个像素集的颜色初始化高斯分量。
Learning GMM components
随着我们迭代的进行算法的学习部分(4-6),掩码将会被改变。一些像素将从前景移到背景,反之亦然。
高斯聚类算法由两个步骤(4和5)组成。 首先,将MatteForeground集中的每个像素分配给最匹配(像素颜色相似的概率最高)的前景GMM分量。 这通过简单地评估以像素的颜色作为输入的高斯方程来找到。 类似地,我们将MatteBackground集中的像素分配给背景GMM的最可能的分量。 分量标签记录像素对应的分量。 注意,前景像素仅被分配给前景GMM的分量,反之亦然。 因此,Matte(MatteForeground或MatteBackground)和Component Index(1 - K)中的值对唯一地标识2K个组件之一。 然后,像素分类好后,丢弃当前高斯分量,并创建新的Matte/Component标签对。
Performing Graph Cut
我们接下来创建一个图,用于Graph Cut算法。 在Graph Cut中,有两种类型的links。 N-links连接8邻域中的像素。 这些链接描述了在相邻像素之间放置分割边界的代价。 我们希望在低梯度区域惩罚非常高而高梯度(边缘)区域的惩罚低。 N-links权重在算法的整个执行期间是恒定的。 因此,它们可以被计算一次并重复使用。 T链接将每个像素连接到前景和背景节点。 这些描述了每个像素属于前景或背景的概率。 在GrabCut中,这个概率包含在GMM中。 当我们遍历步骤4-6时,GMM更新并且概率相应地改变。 这意味着在每次迭代期间必须更新T链路权重。
对于N链路,像素m和n之间合适的链路权重是:
这是与原论文不一样的地方之一,删除了求和,因为它隐含的包含在了图割的计算当中。但我觉得原论文也是对的,因为原论文只是针对总的能量来列的公式,而不是针对每一项来写公式的。
每个像素有两个T-links。 背景的T-links将像素连接到背景节点。 前景T-links将像素连接到前景节点。 这些链接的权重取决于trimap的状态。 如果用户已经指示特定像素肯定是前景或肯定的背景,则通过对T-link加权来反映这个事实,使得像素被强制进入适当的组。 对于未知像素,我们使用从GMM获得的概率来设置权重。
这里的常数K取所有相邻边的权重最大的那个。
User Touchup
用户通过对Trimap的改变来纠正分割,trimap改变影响了T-links,每次纠正,都会更新trimap并重新计算最小图割。
用户修正后,我们将trimap背景区域初始化掩码背景,而其他地方设置为掩码前景。(trimap有三部分,而掩码只有两个值)
Color clustering details
对于高斯分量,我们必须计算平均值,协方差矩阵的逆,协方差矩阵的行列式和加权值π。
平均值和协方差矩阵由像素颜色计算。 由协方差矩阵计算行列式及协方差矩阵的逆。
权重π就是通过步骤4分配给该高斯分量的前景(或背景)像素的比重。
虽然这篇论文介绍了方法,但我也没找到代码……
这篇关于图割论文阅读笔记:Implementing GrabCut的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!