最近在做目標跟蹤相關的工作,看了很多資料,零零總總的,過段時間自己都有些小混亂了…(不知道是不是自己應該吃點核桃補腦了呢),在這裡mark些資料,當腦容量不足時候,就暫且卸掉一些,擴充容量後,再繼續裝載……
kalman filter,wiki上對它的介紹很詳細,對應中文的介紹~
對每一步k,定義矩陣a,h,q,r,有時候也需要定義b,卡爾曼濾波模型假設k時刻的真實狀態時從k-1時刻狀態演化而來,卡爾曼濾波有經典的五個公式,下面一一來對每個公式進行介紹:
1. **模型和測量模型
**模型為:
xk = a·
xk-1+b·
uk +wk;ak**轉移矩陣,bk輸入控制模型,uk控制向量,wk**過程雜訊~n(0,q
)測量模型為:
zk = h·x
k +vk;h
測量矩陣,vk測量過程雜訊~n(0,r)
以上兩個模型是進行kalman filter的基礎,缺少任何乙個,則無法構成完整的**測量系統,而後……自然也就沒有而後了……只能另尋他法嘍。
2.後驗誤差協方差模型 p
k =
a·pk-1·a+
q, 因為這裡不方便敲擊公式,故a的轉置無法打出來,第一項相乘的三個因子分別為a,
pk-1,
a的轉置。
1&2為**過程,而後利用kalman filter經典的另三個公式進行更新過程。
3. kalman filter增益k的計算
kk = pk·
h/(h·pk·
h + r),其中除了pk前h外的另兩個h均表示h的轉置。
獲得的kk可以理解為對**值和測量值之間的權重分配過程,哪個值的置信度更高。
4. 進行xk校正更新
xk = xk +kk·(zk - h
·xk)
kalman filter 求解的x值是最優自回歸的解,根據kalman gain對xk的值進行校正更新。
5. 級更新後驗誤差協方差pk
pk = ( 1- kk·
h)·pk,為k+1提供協方差值,以此迴圈下去。
note: 以上pk的更新式為僅在使用最優卡爾曼增益時候才得到此化簡式,由於化簡式的計算簡單,故在計算過程中其使用頻率最高。
如果算數精度總是很低導致數值穩定性出現問題,或者特意使用非最優卡爾曼增益,以上這個化簡式就不再適用。
個人總結:
kalman filter適用於能獲得x**值和觀測值,但各自都有一定偏差的情況下,通過kalman filter完成自回歸過程,以此得到最小誤差的x值。
後期會再結合opencv中cvkalman的相關結構和函式對其實現進行mark
後續:對kalman filter的五個公式理解後,即可進入到實現過程
1.初始化
對opencv中kalman中的如下變數進行初始化操作:
a **轉移矩陣;
uk控制向量,b輸入-控制向量;(如果存在uk,則需初始化b,否則b.release)
h測量矩陣;
wk過程雜訊協方差矩陣;
vk觀測雜訊協方差矩陣;
pk後驗錯誤協方差矩陣;
xk-1前一狀態校正後的值;
zk當前觀察值;
dp狀態向量維數;
mp測量向量維數;
cp控制向量維數(如果存在uk)
2,**predict
xk = a·
xk-1+b·
uk 3,校正correct
xk = xk +kk·(zk - h
·xk)
通過以上幾個步驟,即可獲得kalman filter的**結果。
Kalman Filter學習筆記
由於感測器本身的特性,任何測量結果都有誤差。因此需要在感測器測量結果的基礎上,進行跟蹤,以此來保證所觀測物體的資訊不會發生突變。這就需要用到經典跟蹤演算法 卡爾曼濾波器。卡爾曼濾波器就是根據上一時刻的狀態,當時時刻的狀態,將 的狀態與當時時刻的測量值進行加權,加權後的結果才認為是當前的實際狀態,而不...
個人的反思
快速排序,是為了解決什麼問題呢,暫時我無法對排序這一類問題作出乙個比較不錯的總結,事實上我的大腦現在有點亂,無論是過程向的,還是物件向的,光是c 語言已經讓我現在的大腦有些接受不住了。我們是在使用工具,當工具為人所用,將產生巨大效果。雖然我不知道別人考慮沒考慮過,但我的大腦現在是不大能理解乙個問題,...
個人的執行力
個人的執行力取決於其本人是否有良好的工作方式與習慣,是否熟練掌握管人與管事的相關管理工具,是否有正確的工作思路與方法,是否具有執行力的管理風格與性格特質等。具體可以體現在以下幾點 1 個性化的工作方式與習慣 如何管好自己的工作 有效的工作方式 時間日程管理 優先順序管理 授權與任務管理 意外干擾管理...