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

%%文章为作者手打,记录和分享自己的学习,如有错误请指出,转载请注明出处

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