首先定义两个矩阵
>> a = [1 2 3 5 ; 4 7 9 5;1 4 6 7;5 4 3 7;8 7 5 1] %a矩阵取5*4
b = [1 5 4; 3 6 8; 1 5 7] %b矩阵如多数模板一样取3*3
然后定义一个高斯模板
>> gaussian=fspecial('gaussian',3,1.8)
gaussian =
0.0997 0.1163 0.0997
0.1163 0.1358 0.1163
0.0997 0.1163 0.0997
之后我们看看利用imfilter计算结果
>> g=imfilter(a,gaussian)
g =
1.5318 2.8476 3.4654 2.5070
2.1885 4.2578 5.4600 4.0195
2.7451 4.7312 5.7839 4.2411
3.2882 4.7479 4.8615 3.3270
2.8811 3.7260 3.0555 1.8311
然后我们看看用卷积的结果
>> cc=conv2(a,gaussian,'same')
cc =
1.5318 2.8476 3.4654 2.5070
2.1885 4.2578 5.4600 4.0195
2.7451 4.7312 5.7839 4.2411
3.2882 4.7479 4.8615 3.3270
2.8811 3.7260 3.0555 1.8311
这里cc和g的结果是一样的
然而 如果我们把高斯矩阵换成b矩阵又会有什么结果呢?
先对b归一化
>> bb=b/sum(sum(b))
bb =
0.0250 0.1250 0.1000
0.0750 0.1500 0.2000
0.0250 0.1250 0.1750
>> gg=imfilter(a,bb) %滤波
gg =
2.2750 3.5250 3.7750 1.8250
3.1500 5.3000 5.8750 3.1500
3.4750 4.9000 6.1000 3.3000
4.3000 4.6500 4.6750 2.5500
3.6250 3.5750 2.6500 1.4750
>> ccc=conv2(a,bb,'same') %执行卷积操作的结果
ccc =
0.9750 2.2250 3.1750 2.8750
1.5250 3.7750 5.3000 5.1750
1.8500 4.1250 5.6500 5.6250
2.4500 4.4500 4.7500 4.2000
2.4500 4.4750 3.4750 2.5500
这里执行的结果却不相等~ 无法理解
然而 若执行
>> ggg=imfilter(a,bb,'conv') %表示a与bb矩阵执行的是卷积操作 这个时候的结果与直接ccc=conv2(a,bb,'same') %执行卷积操作的结果是一样的
ggg =
0.9750 2.2250 3.1750 2.8750
1.5250 3.7750 5.3000 5.1750
1.8500 4.1250 5.6500 5.6250
2.4500 4.4500 4.7500 4.2000
2.4500 4.4750 3.4750 2.5500
事实证明不进行归一化conv2的结果与imfilter的结果是一样的
>> ggg=imfilter(a,b,'conv')
ggg =
39 89 127 115
61 151 212 207
74 165 226 225
98 178 190 168
98 179 139 102
>> ccc=conv2(a,b,'same')
ccc =
39 89 127 115
61 151 212 207
74 165 226 225
98 178 190 168
98 179 139 102