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
0 Comments