1. 程式人生 > >目標檢測+光流跟蹤

目標檢測+光流跟蹤

 最近學習了LK光流法,主要用於運動目標的跟蹤,於是想著和之前codebook運動目標檢測結合起來,實現先檢測再跟蹤。

下面介紹目標檢測跟蹤流程:

(1)使用codebook進行背景學習

(2)使用codebook不斷進行運動目標檢測

(3)若發現運動目標,則對運動目標所在區域進行跟蹤

(4)若丟失目標,則重新使用codebook進行運動檢測

下面介紹操作中的一些細節:

1codebook檢測結果可能包含噪聲,由於和後續跟蹤息息相關,因此需要去除噪聲,經實驗結果,發現通過計算輪廓長度來去除噪聲是比較有效的,當然假設是需要被檢測的目標是有一定大小的。

2codebook檢測出目標後,可以利用

findcontour找到目標的輪廓資訊,再利用boundingRect找到包含運動目標的最小長方形,這個長方形可以作為一個mask,用來輸入goodFeaturesToTrack即只在目標檢測的區域尋找特徵點或新增特徵點,避免了無用特徵點的使用。

3)承接(2),當目標被檢測到時,會計算出一個mask,但由於此時進入了跟蹤程式,因此如果不更新mask的話,該區域永遠對著初始區域,不能為後續視訊幀尋找特徵點做幫助。因此,我的做法是,計算特徵點群的質心座標,以此作為mask的中心位置,即mask的運動趨勢與運動目標一致。當特徵點數量不足時,會使用goodFeaturesToTrack進行補點操作,但若由於目標被全部遮擋導致此區域無特徵點,則會再次進行

codebook背景運動目標檢測環節。

PS:

具體兩部分實現可參考兩位大牛: (1) codebook:http://blog.csdn.net/zcube/article/details/7353941

                                                       (2) LK光流:http://blog.csdn.net/yang_xian521/article/details/6987447

下面為實驗結果: