Matlab filter2的用法
Y=filter2(h,x,’shape’)
h爲濾波器,x爲要濾波的數據,將h放在x上移動進行模板濾波。
shape可取 full,same,valid (不寫默認是same)。
下面直接看例子:
首先用fspecial(‘average’)創建一個均值濾波器,默認3*3,每個值都是1/3*3=0.1111
>> h=fspecial('average')
h =
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
然後創建個簡單矩陣
>> x=[1,2,3;4,5,6;2,2,2]
x =
1 2 3
4 5 6
2 2 2
使用filter2(h,x)
y=filter2(h,x)
y =
1.3333 2.3333 1.7778
1.7778 3.0000 2.2222
1.4444 2.3333 1.6667
下面分析過程:首先濾波模板h的右下角點對準x的左上角點,那麼h的其他點在x處就沒有對應的點了,因此需要對x補0:(x補0後變成)
x =
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 2 3 0 0
0 0 4 5 6 0 0
0 0 2 2 2 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
此時開始計算h與x對應的元素的乘積和:0+0+0+0+0+0+0+0+1*0.1111=0.1111
這個值作爲補0後的x的矩陣在x(2,2)處對應的值,也是h中心點h(2,2)處對應的值。
然後h沿着x往右移動一列,計算乘積和,以此類推。
最終得出:
`y =
0.1111 0.3333 0.6667 0.5556 0.3333
0.5556 1.3333 2.3333 1.7778 1.0000
0.7778 1.7778 3.0000 2.2222 1.2222
0.6667 1.4444 2.3333 1.6667 0.8889
0.2222 0.4444 0.6667 0.4444 0.2222
這結果與前面我們得出的結果不一樣,原因是前面我們得出的結果是shape=same的結果,而這裏我們得出的結果是shape=full的結果,觀察容易發現這裏的結果中間9個值就是shape=same的結果。因爲same得出的結果是與x大小相同的矩陣,因此,在h的右下角點對準x的5的時候(或者說h的中心點對準x的左上角點1的時候),乘積爲(1+2+4+5)*0.1111=1.3333,這個結果纔是x的矩陣在x(1,1)處對應的值,也是same結果的第一個值,以此類推得出其他的值。
由此我們得出(假設h的大小爲p*q,x的大小爲m*n):
shape=same時,返回的結果的大小是m*n
shape=full時,返回的結果大小是(p+m-1)*(q+n-1)
shape=valid時,邊界不補0,返回的結果大小是(m-p+1)*(n-q+1)
下面是三種情況時的運行結果:
>> y=filter2(h,x,'full')
y =
0.1111 0.3333 0.6667 0.5556 0.3333
0.5556 1.3333 2.3333 1.7778 1.0000
0.7778 1.7778 3.0000 2.2222 1.2222
0.6667 1.4444 2.3333 1.6667 0.8889
0.2222 0.4444 0.6667 0.4444 0.2222
>> y=filter2(h,x,'same')
y =
1.3333 2.3333 1.7778
1.7778 3.0000 2.2222
1.4444 2.3333 1.6667
>> y=filter2(h,x,'valid')
y =
3.0000
%%文章爲作者手打,記錄和分享自己的學習,如有錯誤請指出,轉載請註明出處