一.運動目標檢測
(一)背景差
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濾波(預估器)