From GMM to GrabCut
作者:互联网
GMM-Gaussian mixture model
什么是高斯混合模型?
任何一个曲线,我们都可以用若干个高斯曲线来无限逼近它,这就是高斯混合模型的基本思想。高斯混合模型也被视为一种聚类方法,是机器学习中对“无标签数据”进行训练得到的分类结果。其分类结果由概率表示,概率大者,则认为属于这一类。
- 在二维的情况下,任何一个曲线都可以用若干个组合起来的高斯函数来逼近。
- 在三维的情况下,任何一个曲面都可以用若干个组合起来的高斯函数来逼近。
- 在N维的情况下,任何一个模型都可以用高斯函数来逼近。(当然,这里用到的“高斯函数”的维度是跟着数据的变化而变化的)。
二维高斯函数
N维高斯函数
对于N维高斯函数,其数据的维度也是N维的,此时均值向量u是由N个均值u1,u2,...un组成的,其物理意义仍然是高斯函数的中心,协方差矩阵大sigma依旧表示的是高斯函数的形状,此时的大sigma是N行N列的矩阵,是如下图所示的由各个数据的协方差组成的矩阵。
高斯混合模型:用高斯函数近似表示曲线或者曲面。
- x是随机变量,可以理解为维度不定向量,x的维度决定了g(x)的维度。
- g(x)是单一高斯函数,也就是N维的高斯函数,其中N可以为任意整数,N由x的维度决定。
- K的意义就是:GMM中单一高斯函数的个数。也称K为GMM中成分的个数,其中成分指的就是单一高斯函数。
- w(x)是混合权重:每个单一高斯函数在GMM中所起的作用是不一样的,混合权重在决定了单一高斯函数在GMM中起的作用大小。
如何确定一个高斯混合模型?
这里要用到EM算法来确定参数【EM算法,指的是最大期望算法(Expectation Maximization Algorithm,又译期望最大化算法),是一种迭代算法,在统计学中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计。】
参考:http://blog.sina.com.cn/s/blog_a36a563e0102y2ec.html
GrabCut
综述:
- 在框选出区域后,则将选框以外的部分视为背景区域,将选框以内的区域视为可能的前景区域。
- 然后通过计k-means算前景高斯混合模型(GMM)和背景GMM。
- 然后对每一个像素的rgb值代入单个的高斯模型进行计算,选取值最大的那个模型作为该像素点的归属,重新计算GMM。
- 然后再建立一个图,对该图求解最小割。
- 如此循环3-4直至收敛,由此判断得出选框内的前景区域与背景区域。
GrabCut是基于GraphCut的改进算法,通过交互的方式得出前景与背景。
- 你只需要在目标外面画一个框,把目标框住,它就可以完成良好的分割:
- 如果增加额外的用户交互(由用户指定一些像素属于目标),那么效果就可以更完美:
- 使用Border Matting技术会使目标分割边界更加自然和perfect:
GrabCut与GraphCut的不同:
- Graph Cut的目标和背景的模型是灰度直方图,Grab Cut取代为RGB三通道的混合高斯模型GMM;
- Graph Cut的能量最小化(分割)是一次达到的,而Grab Cut取代为一个不断进行分割估计和模型参数学习的交互迭代过程;
- 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能量为:
U就是区域项,表示区域中每个像素被归类为目标或者背景的惩罚,也就是每个像素属于目标或者背景的概率的负对数。
我们知道混合高斯密度模型是如下形式:
取负对数之后就变成式(9)那样的形式了。
GMM的参数θ就有三个:每个高斯分量的权重π、每个高斯分量的均值向量u(RGB三个通道,故为三个元素向量)和协方差矩阵∑(RGB三个通道,故为3x3矩阵),如式(10)。
也就是说描述目标的GMM和描述背景的GMM的这三个参数都需要学习确定。一旦确定了这三个参数,那么我们知道一个像素的RGB颜色值之后,就可以代入目标的GMM和背景的GMM,就可以得到该像素分别属于目标和背景的概率了,也就是Gibbs能量的区域能量项就可以确定了,即图的t-link的权值我们就可以求出。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.迭代能量最小化分割算法
每次迭代过程都使得对目标和背景建模的GMM的参数更优,使得图像分割更优。
<1>.初始化
- 用户通过直接框选目标来得到一个初始的trimap T,即方框外的像素全部作为背景像素TB,而方框内TU的像素全部作为“可能是目标”的像素。
- 对TB内的每一像素n,初始化像素n的标签αn=0,即为背景像素;而对TU内的每个像素n,初始化像素n的标签αn=1,即作为“可能是目标”的像素。
- 通过k-mean算法分别把属于目标和背景的像素聚类为K类,即GMM中的K个高斯模型,这时候GMM中每个高斯模型就具有了一些像素样本集,这时候它的参数均值和协方差就可以通过他们的RGB值估计得到,而该高斯分量的权值可以通过属于该高斯分量的像素个数与总的像素个数的比值来确定。
<2>.迭代最小化
- 每个像素分配GMM中的高斯分量(例如像素n是目标像素,那么把像素n的RGB值代入目标GMM中的每一个高斯分量中,概率最大的那个就是最有可能生成n的,也即像素n的第kn个高斯分量)
- 对于给定的图像数据Z,学习优化GMM的参数(因为在步骤(1)中我们已经为每个像素归为哪个高斯分量做了归类,那么每个高斯模型就具有了一些像素样本集,这时候它的参数均值和协方差就可以通过这些像素样本的RGB值估计得到,而该高斯分量的权值可以通过属于该高斯分量的像素个数与总的像素个数的比值来确定。)其实就是重新计算GMM的三个参数。
- 分割估计(通过1中分析的Gibbs能量项,建立一个图,并求出权值t-link和n-link,然后通过max flow/min cut算法来进行分割)
- 重复步骤(1)到(3),直到收敛。经过(3)的分割后,每个像素属于目标GMM还是背景GMM就变了,所以每个像素的kn就变了,故GMM也变了,所以每次的迭代会交互地优化GMM模型和分割结果。另外,因为步骤(1)到(3)的过程都是能量递减的过程,所以可以保证迭代过程会收敛。
- 采用border matting对分割的边界进行平滑等等后期处理。
参考:https://blog.csdn.net/zouxy09/article/details/8534954
标签:高斯,GMM,GrabCut,模型,目标,背景,像素 来源: https://blog.csdn.net/qq_40755643/article/details/89480003