標籤: matrix
transitionc
2011-12-08 09:26
28030人閱讀收藏
舉報
opencv(60)
作者同類文章x
kalman濾波大家都很熟悉,其基本思想就是先不考慮輸入訊號和觀測雜訊的影響,得到狀態變數和輸出訊號的估計值,再用輸出訊號的估計誤差加權後校正狀態變數的估計值,使狀態變數估計誤差的均方差最小。具體它的原理和實現,我想也不用我在這裡費口舌,但這個理論基礎必須的有,必須得知道想用kalman濾波做跟蹤,必須得先建立運動模型和觀察模型,不是想用就能用的。如果不能建立運動模型,也就意味著你所要面對的問題不能用kalman濾波解決。
我結合一下opencv自帶的kalman.cpp這個例程來介紹一下如何在opencv中使用kalman濾波吧,opencv已經把kalman濾波封裝到乙個類kalmanfilter中了。使用起來非常方便,但那繁多的各種矩陣還是容易讓人摸不著頭腦。這裡要知道的一點是,想要用kalman濾波,要知道前一時刻的狀態估計值x,當前的觀測值y,還得建立狀態方程和量測方程。有了這些就可以運用kalman濾波了。
opencv自帶了例程裡面是對乙個1維點的運動跟蹤,雖然這個點是在2維平面中運動,但由於它是在乙個圓弧上運動,只有乙個自由度,角度,所以還是1維的。還是乙個勻速運動,建立勻速運動模型,設定狀態變數x = [ x1, x2 ] = [ 角度,角速度 ],則運動模型為
x1(k+1) = x1(k)+x2(k)*t
x2(k+1)= x2(k)
則狀態轉移方程為
x* = ax + w
這裡設計的雜訊是高斯隨機雜訊,則量測方程為:
z = cx + v
看了**,對應上以上各項:
狀態估計值x --> state
當前觀測值z --> measurement
kalmanfilter類內成員變數transitionmatrix就是狀態轉移方程中的矩陣a
kalmanfilter類內成員變數measurementmatrix就是量測方程中矩陣c
[cpp]view plain
copy
print?
mat statepre; //!
mat statepost; //!
mat transitionmatrix; //!
mat controlmatrix; //!
mat measurementmatrix; //!
mat processnoisecov; //!
mat measurementnoisecov;//!
mat errorcovpre; //!
mat gain; //!
mat errorcovpost; //!
mat statepre; //!< predicted state (x'(k)): x(k)=a*x(k-1)+b*u(k)
mat statepost; //!< corrected state (x(k)): x(k)=x'(k)+k(k)*(z(k)-h*x'(k))
mat transitionmatrix; //!< state transition matrix (a)
mat controlmatrix; //!< control matrix (b) (not used if there is no control)
mat measurementmatrix; //!< measurement matrix (h)
mat processnoisecov; //!< process noise covariance matrix (q)
mat measurementnoisecov;//!< measurement noise covariance matrix (r)
mat errorcovpre; //!< priori error estimate covariance matrix (p'(k)): p'(k)=a*p(k-1)*at + q)*/
mat gain; //!< kalman gain matrix (k(k)): k(k)=p'(k)*ht*inv(h*p'(k)*ht+r)
mat errorcovpost; //!< posteriori error estimate covariance matrix (p(k)): p(k)=(i-k(k)*h)*p'(k)
我想就不用我再翻譯了吧。相信有了以上的注釋,大家都能找到它們的對應項。
使用的時候,除了初始化我剛剛初始化過的transitionmatrix和measurementmatrix外,還需要初始化processnoisecov,measurementnoisecov和errorcovpost。
把它們初始化好之後,接下來的動作就很簡單了,分兩步走,第一步呼叫成員函式predict得到當前狀態變數的估計值,第二步呼叫成員函式correct用觀測值校正狀態變數。再更新狀態變數做下一次估計。聽著好簡單啊,**就不上傳坑爹了,在opencv2.3.1\samples\cpp\kalman.cpp中其義自見。
頂 30
踩 2
我的同類文章
opencv(60)
kalman目標跟蹤
2 手動獲取跟蹤目標 滑鼠事件處理 3 進行kalman跟蹤 狀態估計值x state 當前觀測值z measurement kalman類內成員變數transitionmatrix就是狀態轉移方程中的矩陣a kalman類內成員變數measurementmatrix就是量測方程中矩陣h 1 初始化...
卡爾曼kalman濾波跟蹤例子
include include include using namespace std using namespace cv mat img 500,500,cv 8uc3 計算相對視窗的座標值,因為座標原點在左上角,所以sin前有個負號 static inline point calcpoint ...
運動目標跟蹤
運動目標跟蹤 mot 子系統 也稱為移動障礙物的檢測器和 datmo 負責檢測和跟蹤自動駕駛汽車周圍環境中移動的障礙物的姿態。這個子系統對於讓自動駕駛汽車決定如何行動以避免與可能移動的物體 如其他車輛和行人 相撞至關重要。移動障礙物在一段時間內的位置通常是由測距感測器 如雷射雷達和雷達 或立體和單目...