GrabCut算法详解:从GMM模型说起

GrabCut算法详解:从GMM模型说起

最近正在学习CG,争取有时间就看点论文写写代码。

GrabCut在OpenCv里面是有内置函数的,不过我还是用C++纯手工实现了一边原汁原味的论文,github链接GrabCut,里面有具体的实现代码和步骤,还有实现结果,欢迎来hack

简介

GrabCut是04年的一篇文章,是少数用传统方法~~(对,就是没用神经网络的意思)~~解决前景和背景分离的算法。

需要的前置知识有:

  1. 混合多高斯模型

  2. 最小割集合划分

下面先介绍这两个模型

备注:本文不含任何数学证明,仅仅介绍算法,如果想要严格证明请移步百度

GMM模型

多维单高斯模型和混合模型

平平无奇的一手公式:维数是 D D D,均值是 μ \mu μ,协方差 Σ \Sigma Σ,参数集合 θ = { μ , Σ } \theta=\{\mu, \Sigma\} θ={ μ,Σ}

X ∼ N ( μ , Σ ) : P ( x ∣ θ ) = ϕ ( x ∣ μ , Σ ) = 1 ( 2 π ) D / 2 s q r t ∣ Σ ∣ e x p { ( x − μ ) T Σ − 1 ( x − μ ) } X\sim N(\mu,\Sigma):P(x|\theta)=\phi(x|\mu,\Sigma)=\frac{1}{(2\pi)^{D/2} sqrt{|\Sigma}|}exp\{(x-\mu)^T\Sigma^{-1}(x-\mu)\} XN(μ,Σ):P(xθ)=ϕ(xμ,Σ)=(2π)D/2sqrt∣Σ1exp{(xμ)TΣ1(xμ)}

其实混合模型就是字面意思,把很多个模型通过一定的概率混合起来,我们首先定义模型的个数 K K K,那么参数集合就变成了 θ = { μ k , Σ k , π k } \theta=\{\mu_k,\Sigma_k,\pi_k\} θ={ μk,Σk,πk},其中 π k \pi_k πk是第 k k k个模型的混合加权系数

P ( x ∣ θ ) = ∑ k K π k ϕ ( x ∣ μ k , Σ k ) P(x|\theta)=\sum_k^K\pi_k\phi(x|\mu_k,\Sigma_k) P(xθ)=kKπkϕ(xμk,Σk)

混合高斯模型的应用和EM算法

应用很简单:聚类。也就是如果我们假设一堆数据恰好分成K堆并且可以看成每类都是正太分布,那么如果能用GMM模型去拟合这些数据,我们只需要算出每个数据属于某个高斯模型的概率,就可以把这些数据分类了。

拟合的算法有一个经典的EM算法。本质似乎是最大似然概率优化。不过本文通过Local/Global的视角去看待这个算法。

EM算法

输入:数据 z 1 ⋯ z n z_1\cdots z_n z1zn和指定的参数 K K K

输出:拟合参数 θ = { μ k , Σ k , π k } \theta = \{\mu_k,\Sigma_k,\pi_k\} θ={ μk,Σk,πk}

  1. 初始化参数,包括正则化数据,随机化均值,单位化方差和混合比

  2. Esitimate步骤,计算后验概率 γ j k \gamma_{jk} γjk

  • γ j k = π k ϕ ( z j ∣ θ k ) ∑ k K π k ϕ
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值