OpenCV运动检测跟踪(blob track)框架组成模块详解
在..\opencv\doc\vidsurv文件夾中有三個doc文件,Blob_Tracking_Modules、Blob_Tracking_Tests、TestSeq,其中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坐標,運動目標寬度,運動目標高度,……。
?
參考文獻:
1、http://www.doc88.com/p-896576154875.html
2、http://blog.csdn.net/wk119911/article/details/7664478
3、http://www.opencv.org.cn/forum/viewtopic.php?t=11128
總結
以上是生活随笔為你收集整理的OpenCV运动检测跟踪(blob track)框架组成模块详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运动目标跟踪__kalman
- 下一篇: 使用纯C++实现SQL Server20