粒子濾波在圖像跟蹤領域的實踐

粒子濾波在圖像跟蹤領域的實踐

前言

前兩天在GitChat上總結了自己當初研究粒子濾波跟蹤時的一些經驗與總結:http://gitbook.cn/gitchat/activity/5abf7d5d3deaad78002799ee。 此處對部分章節略有刪改,整理如下。

粒子濾波與卡爾曼濾波的介紹

卡爾曼濾波

卡爾曼濾波可以根據一些已知的量來預測未知的量,這些量受到干擾必須得近似高斯噪聲。這個東西可以用來幹什麼呢?例如我們可以用來預測明天,後天,未來好幾天的溫度。我們可以在前幾天用溫度計記錄下一系列的溫度數據作為我們未來預測的參考數據之一,然後我們根據一年四季的溫度變化作為參考數據之二,我們給這兩個參考數據各加一個權重綜合起來預測未來的溫度。如果前幾天記錄下來的數據與真實溫度很切合(畢竟溫度計也是有誤差),我們就把它的權重加大。用這個方法卡爾曼先生對近期未來的數據預測還是很精確的,只要我們的數據只收到高斯噪聲的干擾。

關於 kalman 濾波器詳細的推導過程,如果有興趣者,可以參考以下一篇論文,這篇論文中對 kalman 濾波器的推導過程做了詳細地推導說明。參考論文:《Understanding the Basis of the Kalman Filter Via a Simple and Intuitive Derivation》 可以到我的網盤中直接下載閱讀。鏈接:https://pan.baidu.com/share/init?surl=w9w7pOha4YxD7MijSzezQw 密碼:8k07

粒子濾波

粒子濾波算法源於蒙特卡羅思想,即以某事件出現的頻率來指代該事件的概率。通俗地講,粒子濾波也是能用已知的一些數據預測未來的數據,但是粒子濾波可以不限於高斯噪聲,原理上粒子濾波可以駕馭所有的非線性、非高斯系統。粒子濾波還廣泛運用於各種軍事領域。

舉個例子,假設美帝的愛國者防空導彈裡面的程序用的是粒子濾波。三胖某天閒來無事射個導彈出去玩玩,導彈在剛出朝鮮領土時便被美帝的衛星間諜發現,衛星間諜神情高度緊張,它的程序虛擬出來一塊包含朝鮮與美國的巨大立體三維空間,在這個空間中加入地球大氣阻力系數,地心引力等等參數。然後順手撒了一把沙子,並給這些沙子賦予初始動量,和模擬導彈質量與外觀的係數。這些沙子開始在空間中從朝鮮向著美帝飛去,剛剛進入太平洋的時候,位於夏威夷軍事基地上的愛國者導彈發射了,它朝著太平洋中心飛去,因為程序中的那一大堆沙子構成的軌跡最多最粗的那一根 10 分鐘後要經過太平洋中心的一個點。10 分鐘後 2 個導彈在太平洋中心相遇了,粒子濾波成功預測了導彈的軌跡。

在粒子濾波過程中,X(t) 實際上是通過對大量粒子的狀態進行處理得到的。編寫粒子濾波代碼的五個步驟如下:

1.初始狀態:用大量粒子模擬 X(t), 粒子在空間內均勻分佈;

2.預測階段:根據狀態轉移方程,每一個粒子得到一個預測粒子;

3.校正階段:對預測粒子進行評價,越接近於真實狀態的粒子,其權重越大;

4.重採樣:根據粒子權重對粒子進行篩選,篩選過程中,既要大量保留權重大的粒子,又要有一小部分權重小的粒子;

5.濾波:將重採樣後的粒子帶入狀態轉移方程得到新的預測粒子,即步驟 2。

關於 Particle Filter 詳細的推導過程,如果有興趣者,可以參考以下一篇論文,這篇論文中對粒子濾波的推導過程做了詳細地推導說明。參考論文:《Contour Tracking by Stochastic Propagation of Conditional Density 》 可以到我的網盤中直接下載閱讀。

鏈接:https://pan.baidu.com/s/1UtmNpI54lWS-glEBKcQ_AQ 密碼:dp2z。

當然,對於卡爾曼濾波以及粒子濾波的函數已經封裝好了,後面對比實驗中我會提供代碼。

粒子濾波與卡爾曼濾波跟蹤對比實驗

在運動跟蹤領域,粒子濾波和卡爾曼濾波的重要性不再贅述,都是貝葉斯濾波的不同表述和推廣。


粒子濾波在圖像跟蹤領域的實踐


.1 對比實驗流程圖


粒子濾波在圖像跟蹤領域的實踐


1.2 編碼標誌點做近似圓周運動(非線性)

本節設計兩組對比實驗,目的是通過實際實驗來對比粒子濾波和卡爾曼濾波在跟蹤非線性、非高斯狀態下運動物體的優劣,從而選擇跟蹤精度更高的方法將其應用於立體視覺動態測量系統,提高程序的運行速度。此處的目標點是編碼標誌點(如果不理解編碼標誌點具體是什麼,也不影響後續文章的閱讀。它僅僅是對我們的運動點有個數值標記而已,編碼標誌點的中心座標即為我們的跟蹤對象)對比實驗的流程圖歸納如圖 1.1 所示。

(一)第一組實驗

選擇一個編碼標誌點,將其固聯於一個長條狀的砧板上,不失一般性,此處手持著砧板使編碼標誌點做近似勻速圓周運動,如圖 1.2 所示,其運動軌跡三維顯示如圖 1.3 所示。按照圖 1.1 所示的流程圖步驟,繪製出卡爾曼濾波與粒子濾波預估編碼標誌點座標位置與真實運動軌跡的誤差情況統計如圖 1.4 所示。圖中紅色虛線代表粒子濾波,藍色虛線代表卡爾曼濾波。


粒子濾波在圖像跟蹤領域的實踐


圖1.3 編碼標誌點做圓周運動的軌跡示意圖

粒子濾波在圖像跟蹤領域的實踐

圖1.4 粒子濾波與卡爾曼濾波跟蹤做圓周運動的編碼標誌點

(二)第二組實驗

選擇一個設計好的編碼標誌點,手持著編碼標誌點在相機視場範圍內做任意非線性無規則運動,實驗中編碼標誌點的運動軌跡示意圖如圖 1.5 所示。依據圖 1.1 所示的流程圖步驟,繪製出卡爾曼濾波與粒子濾波預估編碼標誌點座標位置與真實座標的誤差情況統計如圖 1.6 所示。

從上述兩組實驗結果可以發現,紅色線條總是處於藍色線條下方,由此可知,粒子濾波對於非線性運動的編碼標誌點跟蹤精度更高,穩健性更好。

粒子濾波在圖像跟蹤領域的實踐

圖1.5 編碼標誌點做非線性無規則運動的示意圖

粒子濾波在圖像跟蹤領域的實踐

圖1.6 跟蹤非線性無規則運動的編碼標誌點示意圖

粒子濾波和卡爾曼濾波的測試代碼已經上傳至Github上,粒子濾波測試代碼:https://github.com/QiYongBETTER/Particle_Filter,卡爾曼濾波測試代碼:https://github.com/QiYongBETTER/Kalman-Filter。

測試圖片及統計數據上傳至了百度雲網盤:測試圖片及統計數據:鏈接:https://pan.baidu.com/s/1xk7tAijbmzRDTcxUNOld7Q 密碼:9q79

如若您需要成功運行上述的兩組實驗代碼,僅僅需要將項目工程中的屬性表「OpenCVDebug64.pros」以及「OpenCVRelease64.props」替換您根據文章第一部分配置好的 opencv 屬性表即可。

粒子濾波在圖像跟蹤領域的應用

在圖像跟蹤領域,有時候如果對於高分辨率拍攝的圖像都進行全局檢測,將導致整個程序運行過慢,而不能做到實時處理,達不到工業要求。因而,需要利用粒子濾波來對目標點下一幀中出現的位置進行預估,從而準確地縮小感興趣區域(ROI)來進行檢測。此處以使用相機跟蹤多個編碼標誌點為例。

粒子濾波在圖像跟蹤領域的實踐

圖1.7 編碼標誌點在相機中的成像示意圖

粒子濾波在圖像跟蹤領域的實踐

圖1.8 利用粒子濾波跟蹤編碼標誌點

粒子濾波在圖像跟蹤領域的實踐

圖1.9 圖 3.9 縮小 ROI,局部檢測示意圖

使用粒子濾波跟蹤編碼標誌點的流程圖,可歸納總結如圖 1.8 所示。根據圖 1.8 所示,原先圖 1.7 中的編碼標誌點將不再需要每張圖都進行全局檢測,而是縮小了 ROI 進行檢測,大大提高了程序運行速度,如圖 1.9 所示。

小結

上文主要是對粒子濾波與卡爾曼濾波原理進行了簡單闡述,重點對粒子濾波與卡爾曼濾波的跟蹤性能進行了對比實驗,並以案例形式分析了粒子濾波在圖像領域的應用。

前幾天無意中發現自己曾經寫過的一篇文章被CSDN平臺收錄並公開發表:那些精貴的文獻資源下載經驗總結:https://mp.weixin.qq.com/s/I2Sr1QL-jiNoAKzvs-jzbQ,很多人留了言,表示受益很多,對我而言喜悅之前溢於言表。真誠地希望可以和大家一起學習,互相進步。


分享到:


相關文章: