1. 程式人生 > >從meanshift目標跟蹤到粒子濾波

從meanshift目標跟蹤到粒子濾波

本文一開始總結我對meanshift演算法在影象分割、視訊目標跟蹤的一些粗淺認識,進一步引申到粒子濾波在目標跟蹤中如何應用,由於本人學術水平尚淺,必然有很多認識有誤,希望得到大家的批評指正,不勝感激。

在初學均值漂移演算法的時候,有個總體印象,就是演算法希望通過尋找密度最大的位置作為收斂位置,用白話講,其實就是要找一個區域內的重心而已,這個重心為什麼不是區域的所有粒子的平均呢?因為每個粒子還帶個權重,這個權重我們用物理力學中的重心公式想想就明白,權重代表每個粒子對重心的貢獻程度,那麼,做個最極端的近似,當所有粒子的權重都是1,那麼這時候重心剛剛好就是所有粒子的平均值,現在加個權重,用Pazen窗來進行加權,Pazen窗最大的特點就是概率值隨著距離變化而變化,換句話說就是當一個粒子xi離我關心的x點距離遠的話,這個權小些,就這樣,我們把原先的平均值變成了加權平均,這就是meanshift的本質,一言概括之,meanshift就是以Pazen窗加了權後的加權平均,直到找到重心的位置不變了,就停止迭代,其實就是求重心的過程。

    在初學過程中,我一直很納悶,一個影象中,所有畫素不都是均勻分佈的嗎?哪來的某個位置粒子最密呢?這是大誤解,我們在影象分割中應用meanshift演算法,其實不是以畫素的位置密度作為密度衡量的,而是以直方圖來作為研究物件,將某個區域內頻率最高的某個區間定義為密度最大,那麼,如果我以半徑為2來找一個區域,只要通過meanshift演算法把這個區域中密度最大的那個灰度作為這個區域的代表,就實現了影象分割。    關於meanshift演算法在目標跟蹤中的應用,一開始受到meanshift影象分割應用的干擾,沒理解如何通過meanshift進行跟蹤的,其實關鍵問題還在於這個密度怎麼定義的,不再是灰度直方圖中概率來衡量密度了,如果這種想法是對的,那麼跟蹤必然失效,因為你要跟蹤的物體不見得就是整個圖中灰度最大的,而且跟蹤的目標更多情況下是存在很多種灰度的,用影象分割那套方法,你只能跟蹤到灰度最大位置,這不是我們想要的,那麼怎麼跟蹤目標呢?我們需要目標的特徵,什麼特徵最直觀呢?目標區域的目標灰度分佈!需要再引入巴氏相似度,用於衡量跟蹤區域的灰度分佈和目標灰度分佈直接的相似度,顯然,最理想的情況就是這個讓跟蹤收斂的區域和目標區域的灰度分佈一致,所以,在目標跟蹤中是否跟蹤上目標是以跟蹤區域灰度直方圖分佈和目標區域灰度直方圖的相似度來衡量的。
   將目標跟蹤的基本原理搞清楚,我們就能用粒子濾波來實現目標跟蹤,怎麼做呢?你拿到一個視訊,一開始,把想跟蹤的區域框出來,目標區域就有了,那麼跟蹤它,你要有個特徵,什麼特徵呢?就是目標區域的直方圖分佈,好,接下來,我們在視訊一幀影象中廣泛撒粒子,就是隨機產生N個塊的patch,這些小塊就是粒子,一開始我們並不知道哪個粒子或者說方塊是想跟蹤的,怎麼辦呢,最直接的方法,比對,以什麼準則比對呢?當然就是 巴氏相似度了, 通過N個粒子的直方圖和目標直方圖的巴氏相似度計算,可以得出N個不同的權重,這時候就等於給N個粒子加上了權重,我們知道,粒子濾波中的後驗概率就是由蒙特卡洛取樣粒子的加權dirac函式組合而成的,那麼有了權重後就有了後驗概率,進一步就可以進行狀態估計了,這個過程中粒子權重不同,我們稱這個求期望或者說求積分的過程為重要性取樣。那麼如何從提議函式或者說重要性函式中進行抽樣呢?注意,這個過程並不是重要性取樣,重要性取樣是利用重要性函式取樣後求積分的過程,所以重要性函式中的取樣並非重要性取樣,這裡特別強調一下!好,在經典粒子濾波教材中都會提到,重要性函式往往直接是用狀態轉移概率來替代,那麼在上一個時刻中的粒子通過狀態轉移就能得到重要性函式在下一個時刻的抽樣粒子,這就實現了提議函式的粒子取樣。重新取樣是對加權粒子的累積概率與0到1的隨機值對比,如果累積概率大於隨機值就取這個粒子,作為重取樣後,才從重要性函式中取樣,所以取樣分成兩步,第一步,根據權值做重取樣,第二步,根據轉移概率獲得轉移概率密度中的取樣,到這裡得到的才是一次完整的取樣。應該指出,當粒子權重過渡集中,導致粒子退化的時候,則需要將權重歸一化為1/N。經過人為指定的步數後,或者當估計狀態不再變化或變化很小的時候,我們認為,目標跟蹤到了,這就是粒子濾波目標跟蹤演算法的整個過程。