zoukankan      html  css  js  c++  java
  • 高斯混合模型GMM

    高斯模型就是用高斯概率密度函数正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。 对图像背景建立高斯模型的原理及过程:图像灰度直方图反映的是图像中某个灰度值出现的频次,也可以以为是图像灰度概率密度的估计。如果图像所包含的目标区域和背景区域相差比较大,且背景区域和目标区域在灰度上有一定的差异,那么该图像的灰度直方图呈现双峰-谷形状,其中一个峰对应于目标,另一个峰对应于背景的中心灰度。对于复杂的图像,尤其是医学图像,一般是多峰的。通过将直方图的多峰特性看作是多个高斯分布的叠加,可以解决图像的分割问题。 在智能监控系统中,对于运动目标的检测是中心内容,而在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。
    我们首先要提起背景和前景的概念,前景是指在假设背景为静止的情况下,任何有意义的运动物体即为前景。建模的基本思想是从当前帧中提取前景,其目的是使背景更接近当前视频帧的背景。即利用当前帧和视频序列中的当前背景帧进行加权平均来更新背景,但是由于光照突变以及其他外界环境的影响,一般的建模后的背景并非十分干净清晰,而高斯混合模型(GMM,Gaussian mixture model)是建模最为成功的方法之一,同时GMM可以用在监控视频索引与检索。
    混合高斯模型使用K(基本为3到5个) 个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型,用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。通观整个高斯模型,他主要是有方差均值两个参数决定,,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率;为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的分类。具体更新公式如下:
    μt= (1 - ρ)μt- 1 +ρxt (1)
    σ2t = (1 - ρ)σ2t- 1 +ρ( xt -μt ) T ( xt -μt ) (2)
    ρ =αη( xt | μκ,σκ ) (3)
    | xt -μt - 1 | ≤ 2. 5σt- 1 (4)
    w k , t = (1 - α) w k , t - 1 +αMk , t (5)
    式中ρ为学习率,即反映当前图像融入背景的速率。
    建模过程中,我们需要对混合高斯模型中的方差、均值、权值等一些参数初始化,并通过这些参数求出建模所需的数据,如马兹距离。在初始化过程中,一般我们将方差设置的尽量大些(如15),而权值则尽量小些(如0.001)。 这样设置是由于初始化的高斯模型是一个并不准确,可能的模型,我们需要不停的缩小他的范围,更新他的参数值,从而得到最可能的高斯模型,将方差设置大些,就是为了将尽可能多的像素包含到一个模型里面,从而获得最有可能的模型。部分代码如下:
    for(i=0; i<K_MODELS; i++) //K_MODELS为预先定义的模型数
    {
    // calculate the vector, v = (X - u)
    for(j=0; j<3; j++)
    v[j] = pixel[j] - model[i]->mean[j];
    // calculate the squared distance, d = |v|^2
    model[i]->dist2 = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
    // zot: this is only equal to mahalanobis distance
    // when covariance matrix = vI
    // (v = scalar variance for all channels)
    model[i]->mah2 = model[i]->dist2 / model[i]->var;
    //即为马兹距离
    // see if X is close enough to this model
    if (model[i]->mah2 < SFSquared)
    break;
    // the current pixel matches one of the K models
    //SFSquared是预定义的值
    }
    同时这时又产生了一个疑问,那么如何得知我们的模型是否超过预定义的模型数了呢?这便是我们设置权值的其中一个原因了。根据大量的试验,我们得出当前面几个模型数的权值之和在T值(一般设为0.75)之内时,效果最好,因此当我们将前面的模型权值相加,当超过0.75时便舍去后面的模型。当然其中还有一个重要的问题,我们是如何得知前面的模型是相对来说最有可能的模型,而非被舍去的模型呢?在这里我们首先要对各个模型的权值进行排序,按照权值与方差的比率的从大到小,对模型进行排序。由于一开始建立的模型肯定是不可靠的,在最后基本会被舍弃,因此我们在初始化的时候将初始模型的方差尽量大,而权值尽量小,从而使最不可能的模型排在比较后面。 到这里为止,混合高斯模型的建模基本完成,我在归纳一下其中的流程,首先初始化预先定义的几个高斯模型,对高斯模型中的参数进行初始化,并求出之后将要用到的参数。其次,对于每一帧中的每一个像素进行处理,看其是否匹配某个模型,若匹配,则将其归入该模型中,并对该模型根据新的像素值进行更新,若不匹配,则以该像素建立一个高斯模型,初始化参数,代理原有模型中最不可能的模型。最后选择前面几个最有可能的模型作为背景模型,为背景目标提取做铺垫。
     
     
     
    EM算法形式上类似于半隐半显解拟线性方程. 
    GMM (Gaussian mixture model) 做图像分割时对所分区域边界没有任何约束, 如果不估协方差阵,其退化为kmeans. 利用区域特征函数的全变差等于边界长这一性质,带上边缘约束,利用水平集作计算,就成偏微的levelset 方法。
    GMM最好用graphcut解。速度快
  • 相关阅读:
    hdu 2602 Bone Collector 01背包
    总结
    类--接口 抽象父类 多态 鸭子类型 格式化方法与析构方法 反射 异常处理 自定义异常 断言
    类--组合 继承 super关键字 面向对象的三大性
    面向对象 名称空间 类与对象
    re正则模块 垃圾回收机制
    常用模块--hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess
    常用模块-- random shutil shevle logging sys.stdin/out/err
    常用模块-- time os sys 递归 序列化

  • 原文地址:https://www.cnblogs.com/cleiyang/p/4173435.html
Copyright © 2011-2022 走看看