OpenCV 視頻監控(Video Surveilance)的算法體系

OpenCV 視頻監控(Video Surveilance)的算法體系 

 轉自http://lh2078.blog.163.com/blog/static/568113722010711705926/

 

如前面說到的,OpenCV VS提供了6組算法的接口,分別是:前景檢測、新目標檢測、目標跟蹤、軌跡生成、跟蹤後處理、軌跡分析,除了軌跡生成用於軌跡數據的保存以外,其他5個部分都是標準的視頻監控算法體系中不可或缺的部分。

       OpenCV在Blob_Tracking_Modules.doc文檔中,提供了算法的關係圖,如下。


圖中唯獨缺少了軌跡分析部分,可能是因爲在該文檔形成的時候軌跡分析部分還沒有完成。重新整理後如下。

 

下面針對VS算法體系中的各個算法接口進行介紹,並給出算法的參考文獻。

1 算法流程控制(CvBlobTrackerAuto)

       整個視頻監控算法流程的設置和數據的傳遞在接口類CvBlobTrackerAuto的子類中完成,VS中提供了一個範本,就是CvBlobTrackerAuto1,該類是接口CvBlobTrackerAuto的子類,通過查看CvBlobTrackerAuto1::Process(),可以洞悉整個算法的標準流程。當然您也可以在遵循接口CvBlobTrackerAuto的基礎上進行擴展。

用戶調用接口:

CvBlobTrackerAuto* cvCreateBlobTrackerAuto1(CvBlobTrackerAutoParam1* param);

 

2 前景檢測(CvFGDetector):

       CvFGDetector是前景檢測類的接口,前景檢測一般是指提取固定場景中運動部分的像素,比較常用的一大類方法是背景差。在其子類CvFGDetectorBase中包含了兩種背景差方法的實現:

(1)《Foreground Object Detection from Videos Containing Complex Background》2003

(2)《An Improved Adaptive Background Mixture Model for Real-time tracking with shadow detection》 2001

後者就被廣泛研究和應用的混合高斯模型背景差(MOG-Mixture Of Gaussians),其開創者是MIT的著名學者Chris Stauffer,可參考文獻《Learning patterns of activity using real-time tracking》2000。

       OpenCV中還實現了一種基於碼本的背景差方法,《Real-time foreground–background segmentation using codebook model》2005,可以參考例程bgfg_codebook.cpp,只是這種算法還沒有整合進VS架構中,這個擴展工作有待完成。

用戶調用接口:

CvFGDetector* cvCreateFGDetectorBase(int type, void *param);

 

3 新目標檢測(CvBlobDetector):

       CvBlobDetector在前景掩模的基礎上檢測新進入場景的Blob(塊),子類有兩個,分別是CvBlobDetectorSimple和CvBlobDetectorCC,參考文獻爲《Appearance Models for Occlusion Handling 》2001,檢測新目標的基本原則是:當連續多幀圖像中包含該連通區域,且具有一致的合理的速度。CvBlobDetectorCC與CvBlobDetectorSimple一個最顯著的不同在於引入了 CvObjectDetector,用於檢測分離的目標塊。

用戶調用接口:

CvBlobDetector* cvCreateBlobDetectorSimple();

CvBlobDetector* cvCreateBlobDetectorCC();

 

4 目標跟蹤(CvBlobTracker):

       目標跟蹤部分的子類衆多,在這裏不一一列舉,給出相應的接口及對應的功能。對MeanShift和粒子濾波感興趣的讀者可參考:《Real-time tracking of non-rigid objects using mean shift》2000,《A Tutorial on Particle Filters for Online Nonlinear Non-Gaussian Bayesian Tracking》2002,《Particle Filters for Positioning, Navigation and Tracking》2002。

用戶調用接口:

CvBlobTracker* cvCreateBlobTrackerCC();

連通區域跟蹤

CvBlobTracker* cvCreateBlobTrackerCCMSPF();

連通區域跟蹤 + 基於MeanShift 粒子濾波的碰撞分析

CvBlobTracker* cvCreateBlobTrackerMS();

Mean shift 算法

CvBlobTracker* cvCreateBlobTrackerMSFG();

基於前景的Mean shift 算法

CvBlobTracker* cvCreateBlobTrackerMSPF();

基於Mean shift 權重的粒子濾波

 

5 軌跡生成(CvBlobTrackGen)

       該接口爲CvBlobTrackGen,用於目標跟蹤結束後,軌跡數據的保存。子類包括CvBlobTrackGen1和CvBlobTrackGenYML,前者以目標軌跡爲單位保存整個軌跡的(x,y,sx,sy)數據爲文本格式,後者與視頻數據同步,以幀爲單位保存當前目標信息爲YML格式。

用戶調用接口:

CvBlobTrackGen* cvCreateModuleBlobTrackGen1();

CvBlobTrackGen* cvCreateModuleBlobTrackGenYML();

 

6 跟蹤後處理(CvBlobTrackPostProc)

       跟蹤後處理是一個可選模塊,主要用於跟蹤過程中目標軌跡的平滑,子類衆多,這裏給出三個主要的用戶接口和說明。

用戶調用接口:

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverRect()

軌跡矩形窗時間平均

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcTimeAverExp()

軌跡指數窗時間平均

CvBlobTrackPostProc* cvCreateModuleBlobTrackPostProcKalman()

目標方位、尺寸的Kalman濾波平滑

 

7 軌跡分析(CvBlobTrackAnalysis)

       當某個目標跟蹤結束後,會產生一個軌跡,CvBlobTrackAnalysis的子類用於對軌跡進行數據分析。子類衆多,這裏給出六個主要的用戶接口和說明。

用戶調用接口:

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistPVS();

5維矢量直方圖分析(x,y,vx,vy,state)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistP();

2維矢量直方圖分析(x,y)

CvBlobTrackAnalysis*  cvCreateModuleBlobTrackAnalysisHistPV();

4維矢量直方圖分析(x,y,vx,vy)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisHistSS();

起始點4維矢量直方圖分析(startpos,endpos)

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisTrackDist();

目標軌跡之間比較距離

CvBlobTrackAnalysis* cvCreateModuleBlobTrackAnalysisIOR();

整合上述多種分析方

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章