最給人啓發的粒子濾波目標跟蹤思路!

這裏聲明原文:Particle-Filter

發博客只是爲了能夠收藏起來這篇對我很有用處的文章,並且希望讓跟多人看到。

一直都覺得粒子濾波是個挺牛的東西,每次試圖看文獻都被複雜的數學符號搞得看不下去。一個偶然的機會發現了Rob Hess(http://web.engr.oregonstate.edu/~hess/)實現的這個粒子濾波。從代碼入手,一下子就明白了粒子濾波的原理。根據維基百科上對粒子濾波的介紹(http://en.wikipedia.org/wiki/Particle_filter),粒子濾波其實有很多變種,Rob Hess實現的這種應該是最基本的一種,Sampling Importance Resampling (SIR),根據重要性重採樣。下面是我對粒子濾波實現物體跟蹤的算法原理的粗淺理解:
1)初始化階段-提取跟蹤目標特徵
該階段要人工指定跟蹤目標,程序計算跟蹤目標的特徵,比如可以採用目標的顏色特徵。具體到Rob Hess的代碼,開始時需要人工用鼠標拖動出一個跟蹤區域,然後程序自動計算該區域色調(Hue)空間的直方圖,即爲目標的特徵。直方圖可以用一個向量來表示,所以目標特徵就是一個N1的向量V。
2)搜索階段-放狗
好,我們已經掌握了目標的特徵,下面放出很多條狗,去搜索目標對象,這裏的狗就是粒子particle。狗有很多種放法。比如,a)均勻的放:即在整個圖像平面均勻的撒粒子(uniform distribution);b)在上一幀得到的目標附近按照高斯分佈來放,可以理解成,靠近目標的地方多放,遠離目標的地方少放。Rob Hess的代碼用的是後一種方法。狗放出去後,每條狗怎麼搜索目標呢?就是按照初始化階段得到的目標特徵(色調直方圖,向量V)。每條狗計算它所處的位置處圖像的顏色特徵,得到一個色調直方圖,向量Vi,計算該直方圖與目標直方圖的相似性。相似性有多種度量,最簡單的一種是計算sum(abs(Vi-V)).每條狗算出相似度後再做一次歸一化,使得所有的狗得到的相似度加起來等於1.
3)決策階段
我們放出去的一條條聰明的狗向我們發回報告,“一號狗處圖像與目標的相似度是0.3”,“二號狗處圖像與目標的相似度是0.02”,“三號狗處圖像與目標的相似度是0.0003”,“N號狗處圖像與目標的相似度是0.013”…那麼目標究竟最可能在哪裏呢?我們做次加權平均吧。設N號狗的圖像像素座標是(Xn,Yn),它報告的相似度是Wn,於是目標最可能的像素座標X = sum(Xn
Wn),Y = sum(Yn*Wn).
4)重採樣階段Resampling
既然我們是在做目標跟蹤,一般說來,目標是跑來跑去亂動的。在新的一幀圖像裏,目標可能在哪裏呢?還是讓我們放狗搜索吧。但現在應該怎樣放狗呢?讓我們重溫下狗狗們的報告吧。“一號狗處圖像與目標的相似度是0.3”,“二號狗處圖像與目標的相似度是0.02”,“三號狗處圖像與目標的相似度是0.0003”,“N號狗處圖像與目標的相似度是0.013”…綜合所有狗的報告,一號狗處的相似度最高,三號狗處的相似度最低,於是我們要重新分佈警力,正所謂好鋼用在刀刃上,我們在相似度最高的狗那裏放更多條狗,在相似度最低的狗那裏少放狗,甚至把原來那條狗也撤回來。這就是Sampling Importance Resampling,根據重要性重採樣(更具重要性重新放狗)。
(2)->(3)->(4)->(2)如是反覆循環,即完成了目標的動態跟蹤。

根據我的粗淺理解,粒子濾波的核心思想是隨機採樣+重要性重採樣。既然我不知道目標在哪裏,那我就隨機的撒粒子吧。撒完粒子後,根據特徵相似度計算每個粒子的重要性,然後在重要的地方多撒粒子,不重要的地方少撒粒子。所以說粒子濾波較之蒙特卡洛濾波,計算量較小。這個思想和RANSAC算法真是不謀而合。RANSAC的思想也是(比如用在最簡單的直線擬合上),既然我不知道直線方程是什麼,那我就隨機的取兩個點先算個直線出來,然後再看有多少點符合我的這條直線。哪條直線能獲得最多的點的支持,哪條直線就是目標直線。想法非常簡單,但效果很好。

扯遠了,下面還是說說代碼吧。Rob Hess的代碼好像是linux上的,我稍微改了下,讓Windows+VS2008能跑。main函數在track1.c裏,默認是處理附帶的視頻,當然可以方便的改成從攝像頭輸入視頻(cvCaptureFromCAM)。我用的是opencv2.0,沒有測試低於2.0的版本。程序開始後,讀入第一幀圖像後,需要用鼠標拖動出跟蹤目標區域,(然後按回車)。跟蹤區域較小時速度較快,跟蹤區域大時明顯變得很卡。代碼還需要gsl庫的支持,我用的是gsl1.8,下面提供了gsl1.8安裝文件的下載。這裏是全部代碼和相關的VS2008工程文件

Hope you find it useful!

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