资源简介
高斯混合模型使用K(一般为3到5个) 个高斯模型来表征图像中各个像素点的特征,在新一帧图像获得后更新混合高斯模型,用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。通观整个高斯模型,他主要是有方差和均值两个参数决定,,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率 为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的分类。
代码片段和文件信息
function varargout = gmm(X K_or_centroids)
% ============================================================
% Expectation-Maximization iteration implementation of
% Gaussian Mixture Model.
%
% PX = GMM(X K_OR_CENTROIDS)
% [PX MODEL] = GMM(X K_OR_CENTROIDS)
%
% - X: N-by-D data matrix.
% - K_OR_CENTROIDS: either K indicating the number of
% components or a K-by-D matrix indicating the
% choosing of the initial K centroids.
%
% - PX: N-by-K matrix indicating the probability of each
% component generating each point.
% - MODEL: a structure containing the parameters for a GMM:
% MODEL.Miu: a K-by-D matrix.
% MODEL.Sigma: a D-by-D-by-K matrix.
% MODEL.Pi: a 1-by-K vector.
% ============================================================
threshold = 1e-15;
[N D] = size(X);
if isscalar(K_or_centroids)
K = K_or_centroids;
% randomly pick centroids
rndp = randperm(N);
centroids = X(rndp(1:K) :);
else
K = size(K_or_centroids 1);
centroids = K_or_centroids;
end
% initial values
[pMiu pPi pSigma] = init_params(); %初始化
Lprev = -inf; %inf表示正无究大,-inf表示为负无究大
while true
Px = calc_prob();
% new value for pGamma
pGamma = Px .* repmat(pPi N 1);
pGamma = pGamma ./ repmat(sum(pGamma 2) 1 K); %求每个样本由第K个聚类,也叫“component“生成的概率
% new value for parameters of each Component
Nk = sum(pGamma 1);
pMiu = diag(1./Nk) * pGamma‘ * X; %重新计算每个component的均值
pPi = Nk/N; %更新混合高斯的加权系数
for kk = 1:K %重新计算每个component的协方差
Xshift = X-repmat(pMiu(kk :) N 1);
pSigma(: : kk) = (Xshift‘ * ...
(diag(pGamma(: kk)) * Xshift)) / Nk(kk);
end
% check for convergence
L = sum(log(Px*pPi‘)); %求混合高斯分布的似然函数
if L-Lprev < threshold %随着迭代次数的增加,似然函数越来越大,直至不变
break; %似然函数收敛则退出
end
Lprev = L;
end
if nargout == 1 %如果返回是一个参数的话,那么varargout=Px;
varargout = {Px};
else %否则,返回[Px model]其中model是结构体
model = [];
model.Miu = pMiu;
model.Sigma = pSigma;
model.Pi = pPi;
varargout = {Px model};
end
function [pMiu pPi pSigma] = init_params()
pMiu = centroids;
pPi = zeros(1 K);
pSigma = zeros(D D K);
% hard assign x to each centroids
distmat = repmat(sum(X.*X 2) 1 K) + ... %distmat第j行的第i个元素表示第j个数据与第i个聚类点的距离,如果数据有4个,聚类2个,那么distmat就是4*2矩阵
repmat(sum(pMiu.*pMiu 2)‘ N 1) - 2*X*pMiu‘; %sum(A,2)结果为列向量,第i个元素是第i行的求和
[dummy labels] = min(distmat [] 2); %返回列向量dummy和labels,dummy向量记录distmat的每行的最小值,labels向量记录每行最小值的列号,即是第几个聚类,labels是N×1列向量,N为样本数
for k=1:K
Xk = X(labels == k :); %把标志为同一个聚类的样本组合起来
pPi(k) = size(Xk 1)/N; %求混合高斯模型的加权系数,pPi为1*K的向量
pSigma(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3929 2014-03-21 08:29 gmm.m
相关资源
- LBP特征提取的MATLAB实现
- GMM-UBM系统框架的MAP算法
- GMM,HMM的语音识别,说话人识别源码
- 时域、频域特征提取
- 振动信号频域特征提取算法
- hog特征提取matlab实现
- 希尔伯特包络谱matlab
- 小波包特征提取
- 表面肌电sEMG特征提取的Matlab程序
- ECG特征提取
- MATLAB图像纹理特征提取代码
- Haar-like特征提取功能
- 图像SURF特征提取(SURF extraction)
- 提取图像纹理特征值
- image-texture-features 图像纹理特征提取
- sift sift 特征提取算法matlab实现
- wenli 分析了纹理特征提取方法
- DoGfilters DOG高斯差分实现物体识别中的
- PCA_SVM 此方法采用经典的PCA对人脸图像
- pca_knn 本方法采用pca进行特征提取
- pca 主成分分析程序
- Harris.rar 特征提取是图像配准的重要步
- hao 调制识别全过程
- tezheng 本人找到的非常好的几何特征提
- GMM GMM的说话人识别系统
- GMM 本代码建立高斯混合模型(高斯多
- MFCC-GMM 基于MFCC的GMM的说话人识别
- palm-recognition 掌纹识别代码
- speech-emotion-recognition-system gmm模型下的
- DCT 先用小波变换进行降维后
评论
共有 条评论