分享

grabcut图像分割的原理简单介绍

 mediatv 2020-01-09

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向量的二阶矩),可以参照源代码中的计算方法,一目了然

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

具体流程用一幅图说明:


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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多