運動目標檢測與跟蹤常用算法

 一.運動目標檢測

 (一)背景差

 1.幀差

2.GMM 

 背景減算法可以對背景的光照變化、噪聲干擾以及週期性運動等進行建模,在各種不同情況下它都可以準確地檢測出運動目標。因此對於固定攝像頭的情形,目前大多數的跟蹤算法中都採用背景減算法來進行目標檢測。背景減算法的侷限性在於它需要一個靜態的固定攝像頭。

 (二)運動場

 光流法

 光流估計的方法都是基於以下假設:圖像灰度分佈的變化完全是目標或者場景的運動引起的,也就是說,目標與場景的灰度不隨時間變化。這使得光流方法抗噪聲能力較差,其應用範圍一般侷限於目標與場景的灰度保持不變這個假設條件下。另外,大多數的光流計算方法相當複雜,如果沒有特別的硬件裝置,其處理速度相當慢,達不到實時處理的要求。

 二.目標跟蹤

 1.區域與區域匹配

 這種算法的優點在於當目標未被遮擋時,跟蹤精度非常高,跟蹤非常穩定。但其缺點首先是費時,當搜索區域較大時情況尤其嚴重;其次,算法要求目標變形不大,且不能有太大遮擋,否則相關精度下降會造成目標的丟失。

 2.特徵點(關鍵點)跟蹤

KLT:Shi和Tomasi 在1994年提出的KLT 跟蹤算法是一種被廣泛應用的基於特徵點跟蹤算法。由於特徵點分佈在整個目標上,因此即使有一部分被遮擋,仍然可以跟蹤到另外一部分特徵點,這也是基於特徵點跟蹤算法的優點。

基於特徵點的跟蹤算法中,比較困難的問題是當目標發生旋轉或者被遮擋時,如何準確地完成特徵點的提取、保存、刪除等工作

 3.基於主動輪廓的跟蹤算法

主動輪廓模型也稱爲Snake 模型,這種方法能較精確地跟蹤上目標的輪廓。Snake 模型非常適合可變形目標的跟蹤,如對運動細胞的跟蹤。這種模型與卡爾曼濾波相結合能夠更好地進行跟蹤。Snake模型比較適合單目標的跟蹤,對於多目標跟蹤更多地是採用基於水平集(Level Set)方法的主動輪廓模型

 4.光流

Lucas-Kanade稀疏光流calcOpticalFlowPyrLK(利用金字塔)

Horn-Schunck稠密光流calcOpticalFlowHS

 稠密光流需要很大的計算量,OpenCV中對此方法做了簡化,即對前後連續幀的一個像素的鄰域進行匹配,這種方法叫塊匹配。

稀疏光流需要在跟蹤之前指定一組點,如果這些點具有某些明顯特徵,那麼跟蹤就會相對穩定和可靠。可見,其運算量比稠密光流要小很多。

 首先利用goodFeaturesToTrack函數得到圖像中的強邊界作爲跟蹤的特徵點,接下來要調用calcOpticalFlowPyrLK函數,輸入兩幅連續的圖像,並在第一幅圖像裏選擇一組特徵點,輸出爲這組點在下一幅圖像中的位置。再把得到的跟蹤結果過濾一下,去掉不好的特徵點。再把特徵點的跟蹤路徑標示出來。

 (實際效果一般)

 5.mean-shift和 camshift

 Mean-shift優缺點

meanShift算法用於視頻目標跟蹤時,採用目標的顏色直方圖作爲搜索特徵,通過不斷迭代meanShift向量使得算法收斂於目標的真實位置,從而達到跟蹤的目的。

傳統的meanShift算法在跟蹤中有幾個優勢:

(1)算法計算量不大,在目標區域已知的情況下完全可以做到實時跟蹤;

(2)採用核函數直方圖模型,對邊緣遮擋、目標旋轉、變形和背景運動不敏感。

同時,meanShift算法也存在着以下一些缺點:

(1)缺乏必要的模板更新;

(2)跟蹤過程中由於窗口寬度大小保持不變,當目標尺度有所變化時,跟蹤就會失敗;

(3)當目標速度較快時,跟蹤效果不好;

(4)直方圖特徵在目標顏色特徵描述方面略顯匱乏,缺少空間信息;

由於其計算速度快,對目標變形和遮擋有一定的魯棒性,所以,在目標跟蹤領域,meanShift算法目前依然受到大家的重視。但考慮到其缺點,在工程實際中也可以對其作出一些改進和調整;例如:

(1)引入一定的目標位置變化的預測機制,從而更進一步減少meanShift跟蹤的搜索時間,降低計算量;

(2)可以採用一定的方式來增加用於目標匹配的“特徵”;

(3)將傳統meanShift算法中的核函數固定帶寬改爲動態變化的帶寬;

(4)採用一定的方式對整體模板進行學習和更新;

  

CamShift算法

CamShift算法的全稱是"ContinuouslyAdaptive Mean-SHIFT",即:連續自適應的MeanShift算法。其基本思想是對視頻序列的所有圖像幀都作MeanShift運算,並將上一幀的結果(即搜索窗口的中心位置和窗口大小)作爲下一幀MeanShift算法的搜索窗口的初始值,如此迭代下去。簡單點說,meanShift是針對單張圖片尋找最優迭代結果,而camShift則是針對視頻序列來處理,並對該序列中的每一幀圖片都調用meanShift來尋找最優迭代結果。正是由於camShift針對一個視頻序列進行處理,從而保證其可以不斷調整窗口的大小,如此一來,當目標的大小發生變化的時候,該算法就可以自適應地調整目標區域繼續跟蹤。

 

在OpenCV自帶的camShift的例子當中,是通過計算目標在HSV空間下的H分量直方圖,通過直方圖反向投影得到目標像素的概率分佈,然後通過調用OpenCV的CAMSHIFT算法,自動跟蹤並調整目標窗口的中心位置與大小。該算法對於簡單背景下的單目標跟蹤效果較好,但如果被跟蹤目標與背景顏色或周圍其它目標顏色比較接近,則跟蹤效果較差。另外,由於採用顏色特徵,所以它對被跟蹤目標的形狀變化有一定的抵抗能力。 

    OpenCV自帶例子中的camShift算法,可以分爲三個部分:

 A、計算色彩投影圖(反向投影):

 (1)爲了減少光照變化對目標跟蹤的影響,首先將圖像從RGB顏色空間轉換到HSV顏色空間;

 (2)對H分量進行直方圖統計,直方圖代表了不同H分量取值出現的概率,或者說可以據此查找出H分量的大小爲x時的概率或像素個數,即,得到顏色概率查找表;

 (3)將圖像中每個像素的值用其顏色出現的概率進行替換,由此得到顏色概率分佈圖;

   以上三個步驟稱之爲反向投影,需要提醒的是,顏色概率分佈圖是一個灰度圖像;

 B、meanShift尋優

 前面提到過meanShift算法(http://blog.csdn.net/carson2005/article/details/7337432)是一種非參數概率密度估計方法,它通過不斷迭代計算得到最優搜索窗口的位置和大小。

 C、camShift跟蹤算法

 前面提到,camShift其實就是在視頻序列的每一幀當中都運用meanShift,並將上一幀的meanShift結果作爲下一幀的初始值,如此不斷循環迭代,就可以實現目標的跟蹤了。

  

6.kalman濾波(預估器)

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