天天看點

20170330_濾波_基于粒子濾波的物體跟蹤

一直都覺得粒子濾波是個挺牛的東西,每次試圖看文獻都被複雜的數學符号搞得看不下去。一個偶然的機會發現了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)空間的直方圖,即為目标的特征。直方圖可以用一個向量來表示,是以目标特征就是一個N*1的向量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工程檔案

from http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html

繼續閱讀