1. 程式人生 > >OpenCV運動檢測跟蹤 blob track 框架組成模組詳解

OpenCV運動檢測跟蹤 blob track 框架組成模組詳解

               

..\opencv\doc\vidsurv資料夾中有三個doc檔案,Blob_Tracking_ModulesBlob_Tracking_TestsTestSeq,其中Blob_Tracking_Modules必須需要詳讀的。

FG/BG Detection” module performsforeground/background segmentation for each pixel.

Blob Entering Detection” module uses theresult (FG/BG mask) of “FG/BG Detection” module to detect new blob objectentered to a scene on each frame.

Blob Tracking” module initialized by“Blob Entering Detection” results and tracks each new entered blob.

Trajectory Generation” module performs asaving function. It collects all blobs positions and save each whole blobtrajectory to hard disk when it finished (for example tracking is lost).

Trajectory PostProcessing

” moduleperforms a blob trajectory smoothing function. This module is optional and cannot be included in specific pipeline.

OpenCV所提供的這個運動物體跟蹤框架只是一個基本的框架,開發者可以根據自己的實際需要對其中的一些模組進行自定義擴充套件,以滿足實際應用中的具體要求。

1、  前景檢測模組CvFGDetector:它的輸入資料為當前幀影象,輸出結果資料為當前幀影象的前景影象(mask)。前景影象是一個和輸入的視訊幀具有同樣大小的二值影象,即如果當前幀中的畫素點被判斷為運動前景,則前景掩碼中相應位置的畫素點值為1

,否則,相應的畫素點值為0

開發者需要繼承CvFGDetector類,並實現其中的純虛擬函式。其中在函式Virtual void process(IplImage *pImg){}中寫入自己開發的運動目標檢測演算法。而函式Virtual IplImage *GetMask()是得到前景檢測的結果影象,並負責傳遞到後續的模組中。而函式Virtual void Release()負責一些動態分配記憶體的釋放。

2、  新團塊檢測模組CvBlobDetector:該模組的作用是檢測進入監控範圍的新目標的位置和大小。模組的輸入是當前幀的前景影象(前景檢測模組的結果)和已經檢測並標定的團塊,輸出的結果是新檢測到的團塊。

開發者可以將虛類例項化,然後將自己的新團塊檢測演算法寫入到相應的函式中。

新團塊檢測模組的處理流程為:首先從前景影象中檢測出所有團塊,然後將較小的團塊(可能是由噪聲引起的)和與已經被跟蹤團塊有重疊的團塊丟棄,並對剩餘的團塊按照大小順序排列,只保留其中幾個比較大的團塊(預設為10)。最後利用特定規則篩選,篩選不合標準的團塊,將真正的新團塊儲存到團塊列表中。

3、  團塊跟蹤模組CvBlobTracker:該模組的作用就是在前面兩個模組(前景檢測模組、新團塊檢測模組)對運動目標檢測的基礎上,實現對運動目標的跟蹤。此模組的輸入為當前幀的前景影象和團塊列表以及當前幀影象,輸出結果是當前視訊幀中所有運動目標的資訊,以團塊表示(ID,pos,size)。使用新團塊檢測模組的結果初始化該模組,並跟蹤新進入的團塊。

開發者根據自己的演算法開發相應的跟蹤系統時,可以繼承該類,然後用自己的演算法實現函式Virtural void process(IplImage *pImg,IplImage *pImgFG=NULL)。此虛類中還定義了許多其他的輔助處理函式介面,例如跟蹤索引或ID返回指定團塊指標的函式,根據索引或ID為指定團塊設定引數函式等。

團塊跟蹤模組的處理流程為:首先從前景影象提取所有團塊,並計算團塊的質心、寬度和高度;然後對每一個已被跟蹤的軌跡,利用卡爾曼濾波器預測該軌跡在當前幀的團塊的位置和大小;最後對每個跟蹤的軌跡進行處理,尋找離上一幀裡的團塊最近的當前幀的團塊,將此團塊新增到跟蹤軌跡。

4、軌跡生成模組CvBlobTrackGen:該模組的作用是生成運動目標的運動軌跡,然後將軌跡匯出到指定資料庫或檔案中(.txt.csv檔案)。該模組的輸入是代表當前處理視訊幀中各個運動目標的團塊,輸出結果是儲存在指定位置下的軌跡檔案。該模組主要是儲存操作,它收集所有團塊的位置,並在每條軌跡結束時(例如跟蹤丟失時或者物體離開場景時)將其儲存到硬碟上,同時也可以為每個團塊計算一些特徵並儲存。

5、軌跡後處理模組CvBlobTrackPostProc:該模組的作用是在前一個模組所產生的團塊軌跡上做一些處理,例如採用Kalman濾波或平滑濾波處理等。此模組是可選的,可以不包含在處理流程中。它的輸入是當前處理影象的所有團塊,輸出結果是處理後所處理影象的團塊列表。

6、軌跡分析模組CvBlobTrackAnalysis:當某個目標跟蹤結束後,會產生一個軌跡,CvBlobTrackAnalysis的子類用於對軌跡進行資料分析;

7、跟蹤流程模組CvBlobTracterAuto:為了方便開發者開發自己的系統,同時也為了保證系統的模組化設計,OpenCV設計了此虛類描述整個跟蹤流程,這個代表整個跟蹤流程的虛類將各個模組相互聯絡起來成為一個有機的整體。本模組將前面提到的五個模組連線起來,形成一個完整的處理流程。

此類中的函式Process負責呼叫其它各個子模組,首先對背景影象進行更新並檢測前景,將獲取的前景影象保存於成員變數m_pFG中。獲取前景影象後,便依次呼叫團塊跟蹤模組(注意:而不是新團塊檢測模組,這樣做的主要目的是先執行跟蹤可將當前幀的跟蹤結果傳入新團塊檢測模組,以提供新團塊檢測的準確度。如果團塊跟蹤在後,則新團塊跟蹤模組只能與上一幀的團塊列表進行比較,新團塊檢測的準確度將會有所降低),軌跡後處理模組,團塊檢測模組,軌跡生成模組,軌跡分析模組。

如果想將自己實現的演算法加入到以上模組中也很方便,如將背景差分演算法加入到前景檢測模組中,只要繼承CvFGDetector類,然後主要在Process函式中實現自己的演算法就可以了。

原始程式碼中,用紅色標註運動目標的表示跟蹤不穩定,綠色則表示穩定跟蹤。

軌跡生成模組中預設有兩種方法實現資料的儲存,其中一種是RawTracks方法,每行存放一個運動目標資料,單位為畫素,依次為運動目標出現的起始幀,運動目標中心x座標,運動目標中心y座標,運動目標寬度,運動目標高度,運動目標中心x座標,運動目標中心y座標,運動目標寬度,運動目標高度,……

參考文獻: