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(XnWn),Y = sum(YnWn).
4)重采樣階段Resampling
既然我們是在做目標跟蹤,一般說來,目標是跑來跑去亂動的。在新的一幀圖像里,目標可能在哪里呢?還是讓我們放狗搜索吧。但現在應該怎樣放狗呢?讓我們重溫下狗狗們的報告吧。“一號狗處圖像與目標的相似度是0.3”,“二號狗處圖像與目標的相似度是0.02”,“三號狗處圖像與目標的相似度是0.0003”,“N號狗處圖像與目標的相似度是0.013”...綜合所有狗的報告,一號狗處的相似度最高,三號狗處的相似度最低,於是我們要重新分布警力,正所謂好鋼用在刀刃上,我們在相似度最高的狗那里放更多條狗,在相似度最低的狗那里少放狗,甚至把原來那條狗也撤回來。這就是Sampling Importance Resampling,根據重要性重采樣(更具重要性重新放狗)。
(2)->(3)->(4)->(2)如是反復循環,即完成了目標的動態跟蹤。
根據我的粗淺理解,粒子濾波的核心思想是隨機采樣+重要性重采樣。既然我不知道目標在哪里,那我就隨機的撒粒子吧。撒完粒子后,根據特征相似度計算每個粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以說粒子濾波較之蒙特卡洛濾波,計算量較小。這個思想和RANSAC算法真是不謀而合。RANSAC的思想也是(比如用在最簡單的直線擬合上),既然我不知道直線方程是什么,那我就隨機的取兩個點先算個直線出來,然后再看有多少點符合我的這條直線。哪條直線能獲得最多的點的支持,哪條直線就是目標直線。想法非常簡單,但效果很好。