在影片分析(Video Analysis)的任務上,我們往往是對影片中的移動物體(前景)感到興趣,而其他複雜的背景資訊對我們來說就沒那麼的重要,甚至這些背景資訊還會影響我們做分析,所以我們就希望有一種技術能夠偵測出什麼是我們真正感興趣的前景(Foreground),並把不想要的背景(Background)資訊給濾除,而這樣的技術就叫做前景偵測(Foreground Detection)或是背景濾除(Background Subtraction),基本上就是使用背景模型與待測影像相互消除,進而濾除掉待測影像裡的背景來有效的區分前景目標與背景。 所以看到這邊我們大概就能知道,只要擁有出色的背景模型就可以獲得良好的前景偵測結果,而高斯混合模型(Gaussian Mixture Model, GMM)具有能夠平滑地近似任意形狀的密度分佈的特性,所以在背景濾除的應用上我們就常拿它來建立背景模型,能取得不錯的效果。 所謂的 GMM 它是單一高斯機率密度函數的延伸,而高斯機率密度函數,其實就是以前我們學數學、統計學時裡面講的高斯分布或者叫常態分布,見下圖: 而高斯混合模型顧名思義它就是混合了多(K)個高斯機率密度函數來近似我們的目標機率密度函數: 上面左邊是我們的標機率密度函數,右邊則就是我們用 GMM 去近似(K= 3)的結果。 其實概念上跟傅立葉級數蠻相似的(如果你有學過訊號處理這門課,大概就知道我在說啥,沒有的話也沒關係)差在說 GMM 是透過調整各(K)個高斯分布的 mean 跟 variance 並給予它們不同的權重(weights)來實現 approach 這件事。 而它 "調整" 那些參數的方法是利用 EM演算法(Expectation-Maximization Algorithm)來實現,然後關於這部分,Jason也不想把它說得太數學了~ 因為我認為很多時候我們只要大概懂得它的原理與概念,以及知道要怎麼應用它就好了~ 其他一些比較數學上的東西,等你真的有需要深入研究它時,你自然而然會再去找一些 paper 來看,或者回頭去翻那些求學時代的聖經。 如果你不認同我上面的觀點,認為這樣學習有點不求甚解的話,那這邊有一份 NCCU 簡單的中文教材可以給你參考:http://www.cs.nccu.edu.tw/~whliao/acv2008/08gmm.pdf 接著我們稍微把前面講的串起來,那使用 GMM 建立模型的流程就如下圖所示:
基本的理念跟原理介紹完了,要使用它的話其實還蠻容易的,因為像這麼經典的一個演算法早就被人實作出來,並納入標準的函式庫當中來讓你來使用了。以 OpenCV 為例的話,就是裡面的 BackgroundSubtractorMOG 跟 BackgroundSubtractorMOG2,1是根據2001年那篇 paper 實作的,2則是基於2004年跟2006年的那篇 paper 來作,一般我們都直接用 2的那個。
最後 Jason 再附上簡單的 python demo code 跟實作結果的 video 上來讓你們感受一下什麼是 GMM。
Pyhton GMM Demo
0 評論
發表回覆。 |
Jason Chen人不光是生來就擁有一切,而是靠他從學習中得到的一切來造就自己。- 歌德 文章分類
全部
封存檔
九月 2023
|