2013-04-22 226 views
8

OpenCV 2.4.5版提供了幾種不同的實現方式,可用於跟蹤使用統計方法估計背景的移動對象。 OpenCV在CPU上實現了BackgroundSubtractorMOG,BackgroundSubtractorMOG2類。另外,它的GPU實現分別爲BackgroundSubtractorMOGBackgroundSubtractorMOG2,分別爲gpu::MOG_GPUgpu::MOG2_GPU。還有兩個其他算法gpu::GMG_GPUgpu::FGDStatModelOpenCV中的前景背景分割方法之間的區別

在我的應用程序中,我想在移動物體進入場景後立即分割出它們。我想避免像陰影這樣的誤報。這4種算法似乎都集中在相同的目標上 - 通過隨着時間的推移創建背景模型,他們將背景與前景分開。如果有這些實現經驗的人可以幫助我決定使用哪種(GPU)實現,那麼我就會徘徊。這些算法(MOG,MOG2,GMG和FGDStatModel)如何彼此不同?使用一種或另一種算法的優點是什麼?這些實現如何在速度,配置參數的能力,準確性,陰影檢測(誤報)等方面進行比較?

回答

5

我偶然發現位於{opencv_folder}\samples\gpu的演示源代碼bgfg_segm.cpp。該演示展示了以下背景前景分割類

FGDStatModel 
MOG_GPU 
MOG2_GPU 
VIBE_GPU <- listed under `non-free functionality` in OpenCV documentation 
GMG_GPU 

使用和顯示輸出這正是我需要的算法進行比較。顯然,需要調整算法的參數以找到適合給定應用的一種算法(以及一組參數)。

速度對比:

FGDStatModel ~60 frames per second (fps) <-slowest 
MOG_GPU  ~650 fps 
MOG2_GPU  ~650 fps 
VIBE_GPU  ~1000 fps <- fastest 
GMG_GPU  ~190 fps 
+0

和什麼有關的所有參數調整? – nkint 2013-08-16 09:29:43

+0

@nkint確實,準確度取決於您的應用程序以及爲給定算法選擇的參數。我沒有做廣泛的研究。 – Alexey 2013-08-16 14:57:54

+0

以及您使用了哪個參數?手動微調? – nkint 2013-08-16 15:11:18