Matlab filter2的用法

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

%%文章爲作者手打,記錄和分享自己的學習,如有錯誤請指出,轉載請註明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章