日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

高斯混合模型GMM的理解

發布時間:2023/12/15 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高斯混合模型GMM的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

高斯混合模型(Gaussian Mixture Model,簡稱GMM)是用高斯概率密度函數(正態分布曲線)精確地量化事物,將一個事物分解為若干的基于高斯概率密度函數(正態分布曲線)形成的模型。通俗點講,無論觀測數據集如何分布以及呈現何種規律,都可以通過多個單一高斯模型的混合進行擬合。


1、對圖像背景建立高斯模型的原理:

圖像灰度直方圖反映的是圖像中某個灰度值出現的頻次,也可以以為是圖像灰度概率密度的估計。如果圖像所包含的目標區域和背景區域相差比較大,且背景區域和目標區域在灰度上有一定的差異,那么該圖像的灰度直方圖呈現雙峰-谷形狀,其中一個峰對應于目標,另一個峰對應于背景的中心灰度。對于復雜的圖像,尤其是醫學圖像,一般是多峰的。通過將直方圖的多峰特性看作是多個高斯分布的疊加,可以解決圖像的分割問題。在智能監控系統中,對于運動目標的檢測是中心內容,而在運動目標檢測提取中,背景目標對于目標的識別和跟蹤至關重要。而建模正是背景目標提取的一個重要環節。

我們首先要提起背景和前景的概念,前景是指在假設背景為靜止的情況下,任何有意義的運動物體即為前景。建模的基本思想是從當前幀中提取前景,其目的是使背景更接近當前視頻幀的背景。即利用當前幀和視頻序列中的當前背景幀進行加權平均來更新背景,但是由于光照突變以及其他外界環境的影響,一般的建模后的背景并非十分干凈清晰,而高斯混合模型(GMM,Gaussian mixture model)是建模最為成功的方法之一,同時GMM可以用在監控視頻索引與檢索。

混合高斯模型使用K(基本為3到5個) 個高斯模型來表征圖像中各個像素點的特征(以第一幀為背景幀),在新一幀圖像獲得后更新混合高斯模型,用當前圖像中的每個像素點與混合高斯模型匹配,如果成功則判定該點為背景點, 否則為前景點。通觀整個高斯模型,他主要是有方差和均值兩個參數決定,對均值和方差的學習,采取不同的學習
機制,將直接影響到模型的穩定性、精確性和收斂性。由于我們是對運動目標的背景提取建模,因此需要對高斯模型中方差和均值兩個參數實時更新。為提高模型的學習能力,改進方法對均值和方差的更新采用不同的學習率;為提高在繁忙的場景下,大而慢的運動目標的檢測效果,引入權值均值的概念,建立背景圖像并實時更新,然后結合權值、權值均值和背景圖像對像素點進行前景和背景的分類。

GMM之所以能夠將前景和背景分開是基于如下兩點事實的:

(1)在長期觀測的場景中,背景占大多數時間,更多的數據是支持背景分布的

(2)即使是相對顏色一致的運動物體也會比背景產生更多變化,況且一般情況下物體都是帶有不同顏色的。

2.混合高斯背景建模算法流程

1.每個新像素值Xt同當前K個模型按下式進行比較,直接找到匹配新像素值的分布模型,即同該模型的均值偏差在2.5σ內:
2.如果所匹配的模式符合背景要求,則該像素屬于背景,否則屬于前景。 3.各個模式權值按如下方式進行更新,其中a是學習速率,對于匹配的模式Mk,t=1,否則Mk,t=0,然后各模式的權重進行歸一化:
4.未匹配模式的均值μ和標準差σ不變,匹配模式的參數按照如下更新:

5.如果,第一步中沒有任何模式匹配,則權重最小的模式被替換,即該模式的均值為當前像素值,標準差為初始較大值,權重為較小值。 6.各模式根據w/a^2按降序排列,權重大、標準差小的模式排列在前。 7.選前B個模式作為背景,B滿足下式,參數T表示背景所占的比例: ??????????????????????????????????
參考: http://blog.csdn.net/shenziheng1/article/details/60883147 http://blog.csdn.net/jinshengtao/article/details/26278725
https://baike.baidu.com/item/高斯混合模型/8878468
參考代碼(MATLAB、未驗證)
  • %Author:?Ziheng?H.?Shen?@Tsinghua?Univ.??
  • %HybridGaussModel?@Digital?Image?Process?Practice??
  • %%?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??
  • clc;??
  • clear?all;???
  • cntFrame?=?23;??
  • obj?=?VideoReader('768x576.avi');??
  • numFrames?=?obj.NumberOfFrames;??
  • ?for?k?=?1?:?cntFrame??
  • ?????frame?=?read(obj,k);??
  • ??????imwrite(frame,...??
  • ??????????strcat('C:\Users\Zi-Heng?Shen\Documents\MATLAB\BackGroundModel\混合高斯背景建模\',...??
  • ??????????num2str(k),'.bmp'),'bmp');??
  • ?end??
  • %%?參數定義及初始化??
  • I?=?imread('1.bmp');????????????????????%讀入第一幀作為背景幀??
  • fr_bw?=?I;???????
  • [height,width]?=?size(fr_bw);???????????%求每幀圖像大小??
  • width?=?width/3;????????????????????????%排除顏色通道數??
  • fg?=?zeros(height,?width);??????????????%定義前景和背景矩陣??
  • bg_bw?=?zeros(height,?width);??
  • ??
  • C?=?3;??????????????????????????????????%?單高斯模型的個數(通常為3-5)??
  • M?=?3;??????????????????????????????????%?代表背景的模型個數??
  • D?=?2.5;????????????????????????????????%?偏差閾值??
  • alpha?=?0.01;???????????????????????????%?學習率??
  • thresh?=?0.25;??????????????????????????%?前景閾值??
  • sd_init?=?15;???????????????????????????%?初始化標準差??
  • w?=?zeros(height,width,C);??????????????%?初始化權重矩陣??
  • mean?=?zeros(height,width,C);???????????%?像素均值??
  • sd?=?zeros(height,width,C);?????????????%?像素標準差??
  • u_diff?=?zeros(height,width,C);?????????%?像素與某個高斯模型均值的絕對距離??
  • p?=?alpha/(1/C);????????????????????????%?初始化p變量,用來更新均值和標準差??
  • rank?=?zeros(1,C);??????????????????????%?各個高斯分布的優先級(w/sd)??
  • ??
  • pixel_depth?=?8;????????????????????????%?每個像素8bit分辨率??
  • pixel_range?=?2^pixel_depth?-1;?????????%?像素值范圍[0,255]??
  • ??
  • for?i=1:height??
  • ????for?j=1:width??
  • ????????for?k=1:C??
  • ????????????mean(i,j,k)?=?rand*pixel_range;?????%初始化第k個高斯分布的均值??
  • ????????????w(i,j,k)?=?1/C;?????????????????????%?初始化第k個高斯分布的權重??
  • ????????????sd(i,j,k)?=?sd_init;????????????????%?初始化第k個高斯分布的標準差?????????????
  • ????????end??
  • ????end??
  • end??
  • ??
  • for?n?=?1:cntFrame??
  • ????frame=strcat(num2str(n),'.bmp');??
  • ????I1?=?imread(frame);??%?依次讀入各幀圖像??
  • ????fr_bw?=?I1;?????????
  • ????%?計算新像素與第m個高斯模型均值的絕對距離??
  • ????for?m=1:C??
  • ????????u_diff(:,:,m)?=?abs(double(fr_bw(:,:,m))?-?double(mean(:,:,m)));??
  • ????end??
  • ????%?更新高斯模型的參數??
  • ????for?i=1:height??
  • ????????for?j=1:width??
  • ????????????match?=?0;???????????????????????????????????????%匹配標記;??
  • ????????????for?k=1:C?????????????????????????
  • ????????????????if?(abs(u_diff(i,j,k))?<=?D*sd(i,j,k))???????%?像素與第k個高斯模型匹配????
  • ????????????????????match?=?1;???????????????????????????????%將匹配標記置為1??
  • ????????????????????%?更新權重、均值、標準差、p??
  • ????????????????????w(i,j,k)?=?(1-alpha)*w(i,j,k)?+?alpha;??
  • ????????????????????p?=?alpha/w(i,j,k);????????????????????
  • ????????????????????mean(i,j,k)?=?(1-p)*mean(i,j,k)?+?p*double(fr_bw(i,j));??
  • ????????????????????sd(i,j,k)?=???sqrt((1-p)*(sd(i,j,k)^2)?+?p*((double(fr_bw(i,j))?-?mean(i,j,k)))^2);??
  • ????????????????else?????????????????????????????????????????%?像素與第k個高斯模型不匹配??
  • ????????????????????w(i,j,k)?=?(1-alpha)*w(i,j,k);???????????%略微減少權重?????
  • ????????????????end??
  • ????????????end????????
  • ????????????bg_bw(i,j)=0;??
  • ????????????for?k=1:C??
  • ????????????????bg_bw(i,j)?=?bg_bw(i,j)+?mean(i,j,k)*w(i,j,k);??
  • ????????????end??
  • ????????????%?像素值與任一高斯模型都不匹配,則創建新的模型??
  • ????????????if?(match?==?0)??
  • ????????????????[min_w,?min_w_index]?=?min(w(i,j,:));??????%尋找最小權重??
  • ????????????????mean(i,j,min_w_index)?=?double(fr_bw(i,j));%初始化均值為當前觀測像素的均值??
  • ????????????????sd(i,j,min_w_index)?=?sd_init;?????????????%初始化標準差為6??
  • ????????????end??
  • ????????????rank?=?w(i,j,:)./sd(i,j,:);????????????????????%?計算模型優先級??
  • ????????????rank_ind?=?[1:1:C];%優先級索引?????????
  • ????????????%?計算前景????????
  • ????????????fg(i,j)?=?0;??
  • ????????????while?((match?==?0)&&(k<=M))???????????
  • ????????????????????if?(abs(u_diff(i,j,rank_ind(k)))?<=?D*sd(i,j,rank_ind(k)))%?像素與第k個高斯模型匹配??
  • ????????????????????????fg(i,j)?=?0;?%該像素為背景,置為黑色??????????
  • ????????????????????else??
  • ????????????????????????fg(i,j)?=?255;????%否則為前景,置為白色???
  • ????????????????????end??????????????????????????
  • ????????????????k?=?k+1;??
  • ????????????end??
  • ????????end??
  • ????end??
  • ????figure(n)??
  • ????subplot(1,3,1),imshow(fr_bw);???????????????%顯示最后一幀圖像??
  • ????subplot(1,3,2),imshow(uint8(bg_bw))?????????%顯示背景??
  • ????disk?=?strel('disk',1);disk1?=?strel('disk',4);??
  • ????subplot(1,3,3),imshow(imdilate(imerode(uint8(fg),disk),disk1));???%顯示前景??
  • end</span>?





  • 總結

    以上是生活随笔為你收集整理的高斯混合模型GMM的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。