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

————————————————
版权声明:本文为CSDN博主「JMasker」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/JMasker/article/details/81906348

Categories: Matlab

0 Comments

Leave a Reply

Your email address will not be published.