|
|
clear
N=200;%取200個(gè)數(shù)
w(1)=0;
w=randn(1,N);%產(chǎn)生一個(gè)1×N的行向量,第一個(gè)數(shù)為0,w為過(guò)程噪聲(其和后邊的v在卡爾曼理論里均為高斯白噪聲)
x(1)=0;%狀態(tài)x初始值
a=1;%a為狀態(tài)轉(zhuǎn)移陣,此程序簡(jiǎn)單起見(jiàn)取1
for k=2:N
x(k)=a*x(k-1)+w(k-1); %系統(tǒng)狀態(tài)方程,k時(shí)刻的狀態(tài)等于k-1時(shí)刻狀態(tài)乘以狀態(tài)轉(zhuǎn)移陣加噪聲(此處忽略了系統(tǒng)的控制量)
end
V=randn(1,N);%測(cè)量噪聲
q1=std(V);
Rvv=q1.^2;
q2=std(x);
Rxx=q2.^2; %此方程未用到Rxx
q3=std(w);
Rww=q3.^2; %Rvv、Rww分別為過(guò)程噪聲和測(cè)量噪聲的協(xié)方差(此方程只取一組數(shù)方差與協(xié)方差相同)
c=0.2;
Y=c*x+V;%量測(cè)方差,c為量測(cè)矩陣,同a簡(jiǎn)化取為一個(gè)數(shù)
p(1)=0;%初始最優(yōu)化估計(jì)協(xié)方差
s(1)=0;%s(1)表示為初始最優(yōu)化估計(jì)
for t=2:N
p1(t)=a.^2*p(t-1)+Rww;%p1為一步估計(jì)的協(xié)方差,此式從t-1時(shí)刻最優(yōu)化估計(jì)s的協(xié)方差得到t-1時(shí)刻到t時(shí)刻一步估計(jì)的協(xié)方差
b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);%b為卡爾曼增益,其意義表示為狀態(tài)誤差的協(xié)方差與量測(cè)誤差的協(xié)方差之比(個(gè)人見(jiàn)解)
s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));%Y(t)-a*c*s(t-1)稱(chēng)之為新息,是觀測(cè)值與一步估計(jì)得到的觀測(cè)值之差,此式由上一時(shí)刻狀態(tài)的最優(yōu)化估計(jì)s(t-1)得到當(dāng)前時(shí)刻的最優(yōu)化估計(jì)s(t)
p(t)=p1(t)-c*b(t)*p1(t);%此式由一步估計(jì)的協(xié)方差得到此時(shí)刻最優(yōu)化估計(jì)的協(xié)方差
end
t=1:N;
plot(t,s,'r',t,Y,'g',t,x,'b');%作圖,紅色為卡爾曼濾波,綠色為量測(cè),藍(lán)色為狀態(tài)
%整體來(lái)說(shuō),此卡爾曼程序就是一個(gè)循環(huán)迭代的過(guò)程,給出初始的狀態(tài)x和協(xié)方差p,得到下一時(shí)刻的x和p,循環(huán)帶入可得到一系列的最優(yōu)的狀態(tài)估計(jì)值,此方法通常用于目標(biāo)跟蹤和定位。
%本人研究方向與此有關(guān),有興趣可以交流下
在cnki上下篇kalman目標(biāo)跟蹤的碩士論文吧,很多的,當(dāng)然期刊也可以,不過(guò)一般情況下碩士論文講的能詳細(xì)點(diǎn),然后找準(zhǔn)一篇仔細(xì)研讀,這樣子基本上理論就沒(méi)啥問(wèn)題了,編程就用MATLAB,用C很麻煩,很多算法都沒(méi)有得自己從頭編,matlab集成了很多的算法的,只要找出來(lái)調(diào)用就行了。
這里給你說(shuō)下kalman跟蹤的思路吧:
0.如果你的視頻是實(shí)際錄得話,為防止檢測(cè)到偽目標(biāo),首先要對(duì)輸入的圖像進(jìn)行濾波,簡(jiǎn)單的有中值均值濾波。
1.對(duì)視頻序列采用背景差分或幀間差分就可以得到運(yùn)動(dòng)區(qū)域了,這里重點(diǎn)就是背景建模,如果嫌麻煩也就別看什么單高斯或多高斯的了,直接找一個(gè)空幀(沒(méi)有運(yùn)動(dòng)目標(biāo))當(dāng)背景就OK了,差分后就有了運(yùn)動(dòng)區(qū)域,然后二值化方便以后的處理。然后視有沒(méi)有陰影而進(jìn)行陰影去除的工作。
2.上邊這步也就是檢測(cè)出了運(yùn)動(dòng)區(qū)域,按你的檢測(cè)出來(lái)是要給邊邊畫(huà)圈,這個(gè)在matlab上好好研究研究怎樣提取目標(biāo)邊緣的點(diǎn),在原位圖圖上把邊緣的點(diǎn)改變成一個(gè)同像素值就行了,這樣檢測(cè)就完了。
3.跟蹤,首先得找到目標(biāo)的中心,因?yàn)槟繕?biāo)不只是一個(gè)像素,必須有一個(gè)中心來(lái)表示它的坐標(biāo)位置,這個(gè)方法自己想啦,什么取均值求外接矩形中心啊都可以的,然后每一幀都這么做就有一系列的中心坐標(biāo)了。
4.Kalman,Kalman的作用還是以濾波為主,相當(dāng)于把第三步的那些坐標(biāo)都當(dāng)成信號(hào)序列,用Kalman濾波,邊檢測(cè)邊濾波,kalman主要記住那5個(gè)公式,知道它的遞推過(guò)程就基本能編出來(lái)了,至于濾波器參數(shù)就在參考文獻(xiàn)里找吧,編出來(lái)kalman部分的程序沒(méi)多少行的,別怕。
5.如果是多目標(biāo)跟蹤的話就進(jìn)行目標(biāo)匹配的工作,相當(dāng)于每幀都檢測(cè)出兩個(gè)目標(biāo),你要知道最新一幀中的每個(gè)分別對(duì)應(yīng)的是前邊幀的哪個(gè)目標(biāo)。
上邊這些給你一個(gè)大體的思路,你根據(jù)自己的任務(wù)選擇做哪些工作,這個(gè)題目不難的,要有信心。
|
|