從今天開始,想把openCV下的實例一個個都弄清楚。今天剛好學習gaussian background modeling。本來只是以爲建立高斯尺度空間,後來看代碼才發現我想的太簡單了。哎,以後我不能想當然了。所以我重新搜索資料,論文。也把自己的學習體會寫出來
Reference:
1,An Improved Adaptive Background Mixture Model for Real-time Tracking and Shadow Detection
2, Real-time foreground–background segmentation
3, 基於混合高斯背景建模的陰影抑制算法
混合高斯模型 的基本思想是 對每個像素,定義 個狀態,每個狀態用一個高斯函數表示 ,這些狀態一部分表示背景 ,其餘部分表示前景。
我們先討論下Grimson & Stauffer的算法,他們引進一種算法,通過混合K個高斯分佈對每個背景像素進行建模(這裏K很小,一般取3到5)。不同的高斯分佈被假設爲不同顏色展示。混合模型的權重參數表示這些顏色分佈在場景中的時間熟悉。他們的算法不像Friedman 等人的工作,背景成分顏色是這些待得長久更顯靜態的那種。
在這裏,每一個像素都被K個高斯分佈來建模。某一像素在時間T的值Xn可以被寫爲
在這裏提出在線EM算法。這裏我們這樣估計高斯混合模型:通過期望有效估計更新方程,然後轉向L層最新窗口當前L樣本被處理過。在線EM算法通過期望有效估計(左邊式子)當L層最新窗口更新(右邊式子)
詳細分析cvbgfg_gaussmix.cpp(此文件在C:/OpenCV2.0/src/cvaux),這個cpp文件就是參照參考文獻1寫的代碼。這裏有一些很重要的函數,我在這裏貼出來,供自己以後用時參考。(這裏定義的函數大多是static ,如果要從cvaux.h中調用,需要把前面的函數聲明給注視掉,並且在函數定義中把static改爲CV_IMPL,其他不變,重新生成cvaux.h, 好像我也重新生成了install,纔可以正常使用)。
icvInsertionSortGaussians高斯背景檢測的內聯函數,插入。
icvMatchTest測試像素是否被高斯建模
icvUpdateFullWindow, icvUpdateFullNoMatch,
icvUpdatePartialWindow, icvUpdatePartialwindow
更新介於初始化過程和一般過程的不同
cvCreateGaussianBGModel 創建高斯背景模型
icvReleaseGaussianBGModel 釋放高斯背景模型
icvUpdateGaussianBGModel 更新高斯背景模型