基本瞭解GMM的基本工作原理,下面我們介紹利用MATLAB來實現GMM的基本工作原理。通過介紹程式來逐步實現GMM的工作原理。
程式碼段一:通過sprintf函數來讀取所存在的圖片,然後再通過imread來讀取圖片的數值,這個程式碼段比較簡單,主要用於讀取圖片的數值。
程式碼段二:主要引數的初始化。
程式碼段三,主要用於計算每張圖片的灰度值,下面就簡單介紹一下影象平均灰度值的計算方法,灰度值是亮度的概念,0~為黑色,255~白色,依據顏色深淺範圍為0~255.(一定介於0-255之間)。計算影象的平均灰度值有利於簡化靜態影象和動態影象的區分,我們通過計算圖片的平均灰度值,使靜態的物體變為黑色,而使動態的物體變為白色。從而簡化了動態物體的識別。
程式碼段四:這裡就是我們所得到多維高斯函數的疊加功能。
這兩組公式就是對應的這段程式碼,通過程式碼我們可以實現多維高斯函數的疊加運算。
程式碼段五:影象畫素的更新,將處理後的影象做更新,然後得到跟蹤的影象。
4.2 模擬結果以及分析
以上我們基本瞭解了GMM的基本工作流程,下面我們將GMM的模擬結果做具體的分析。所謂的動態影象跟蹤,就是將圖片變成黑白畫素的影象,然後動態的物體做為白色物體而靜態的物體作為黑色影象。從而實現了物體的動態跟蹤過程。
·動態樹葉的分辨
圖4-1 | 圖4-2 |
圖4-3 | 圖4-4 |
事實上,動態樹葉的變動範圍是非常小的,而對於系統的檢測,樹葉不應該被檢測出來,這可能就是該系統的不足之處。
·汽車的跟蹤
視屏中出現多次的汽車,我們以其中一個汽車做為例子來說明。
圖4-5 | 圖4-6 |
圖4-7 | 圖4-8 |
圖4-9 | 圖4-10 |
圖4-11 | 圖4-12 |
從圖中我們可以看到右端一個白色的物體移動過來,這個白色的物體就是所謂的汽車了,只是由於GMM系統自身的不穩定性,導致略微運動的樹葉也被檢測出來了,但是總體可以看到汽車已經被檢測出來了。
·行人的跟蹤
圖4-13 | 圖4-14 |
圖4-15 | 圖4-16 |
圖4-17 | 圖4-18 |
通過觀察這幾張圖片,我們可以看到中間有一個行人走了過來,說明對於行人,我們也檢測成功了,可見GMM演演算法的正確性。
5.1 基於MATLAB的KDE實現
通過以上的理論分析,我們基本可以得到KDE演演算法的基本實現過程。
程式碼段一:這個程式碼段主要通過計算影象的KDE畫素點來完成影象的檢測工作。然後對通過演演算法後的點利用reshape函數進行重構影象,得到我們所要的畫素值。
程式碼段二:通過這個程式碼,我們將得到滿足條件要求的影象型別值。
程式碼段三:權重的計算
程式碼段四:最後我們得到了影象的最後需要的畫素值來達到動態物體的跟蹤效果。
5.2 模擬結果以及分析
通過上面的程式碼分析,我們得到了所要的效果。
圖5-1 | 圖5-2 |
通過這個程式,我們可以看到,只有動的人物被檢測出來了,但是背景的樹葉沒有被檢測出來,完好的解決了GMM演演算法中存在的問題。
圖5-3 | 圖5-4 |
通過這個程式,我們可以看到,只有動的汽車被檢測出來了,但是背景的樹葉沒有被檢測出來,完好的解決了GMM演演算法中存在的問題。
圖5-5 | 圖5-6 |
通過這個程式,我們可以看到,只有動的人物被檢測出來了,但是背景環境物體沒有被檢測出來,完好的解決了GMM演演算法中存在的問題。
通過以上的對比,很顯然KDE的效果比GMM效果更加理想,所以在大多數的情況下,我們一般採用KDE演演算法作為移動物體的動態檢測演演算法。