imfilter实现的是线性空间滤波;

conv2是计算两个矩阵的二维卷积

1、MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C = conv2(A,B)

C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。

2、MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y = filter2(h,X)

其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

Fspecial函数用于创建预定义的滤波算子,其语法格式为:

h = fspecial(type)

h = fspecial(type,parameters)

参数type制定算子类型,parameters指定相应的参数,具体格式为:

type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。

type= 'gaussian',为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为[3,3],sigma表示滤波器的标准差,单位为像素,默认值为0.5

三个函数实际的用法基本结果是一样的。 但imfilter可进行多维图像(RGB等)进行空间滤波,filter2 只能对二维图像(灰度图)进行空间滤波,conv2可以对图像矩阵实现自己想实现的卷积操作,最简单最常用的是二维。所以conv2和filter2类似,多维图像(RGB等)要用imfilter

--------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------

一个矩阵与另一个矩阵的卷积运算大部分运用在图像处理上,例如用一个模板去对一幅图像进行卷积。

把模板(n*n)放在矩阵上(中心对准要处理的元素),用模板的每个元素去乘矩阵中的的元素,累加和等于这个元素例如例子中的第二行第二个元素16=

1*2+1*1+1*3+1*1+1*2+1*1+1*2+1*1+1*2+1*1+1*3的计算,依次计算每个元素的值,如果矩阵的中心在边缘就要将原矩阵进行扩展,例如补0,或者直接规定模板的中心距离边缘(n-1)/2个单位以上。

以下举一个简单的例子,并用Matlab来观察

相关MATALB代码

a=[2 1 3 1;1 2 1 2;2
1 3 2;1 3 1 2];
b=[1 1 1;1 1 1;1 1 1];
c=conv2(a,b,'same');
d=conv2(a,b,'full');
fprintf('\na = \n');
disp(a);
fprintf('\nb = \n');
disp(b);
fprintf('\nc = \n');
disp(c);
fprintf('\nd = \n');
disp(d);

MATALB仿真结果

a

= 2 1 3 1 1 2 1 2 2 1 3 2 1 3 1 2 b = 1 1 1 1 1 1 1 1 1 c = 6 1010 7 9 1616 12 1015 17 11 7 1112 8 d = 2 3 6 5 4 1 3 610 10 7 3 5 916 16 12 5 4 1015 17 11 6 3 711 12 8 4 1 4 5 6 3 2

卷积的计算步骤:

(1)卷积核绕自己的核心元素顺时针旋转180度(这个千万不要忘了)

(2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方

(3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘

(4)第三步各结果的和做为该输入像素对应的输出像素

请看用水平和垂直差分算子对矩阵处理后的结果,然后细细体会

a

= 2 1 3 1 1 2 1 2 2 1 3 2 1 3 1 2

b = -1-1 -1 0 0 0 1 1 1

e = -1 0 1 -1 0 1 -1 0 1 c = -3-4 -5 -3 0 0-1 -1 -1-1 -1 0 3 6 6 5 d = -3-1 0 4 -4-2 -1 7 -6-1 0 5 -4-1 0 4

//自己的总结

1、MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

C = conv2(A,B)

C =

conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则C的大小为(ma+mb+1)×(na+nb+1)。

2、MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

Y = filter2(h,X)

其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:

其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。

3、至于imfilter前面提到了,用法上参数的顺序跟filter相反!

仿真:

a=[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> h=[2 3;5 7]
h =
2 3
5 7
>> r1=imfilter(a,h)
r1 =
63 80 36
114 131 57
38 43 18
>> r2=filter2(h,a)
r2 =
63 80 36
114 131 57
38 43 18
>> h1=fftshift(h)
h1 =
7 5
3 2
>> r3=conv2(a,h1)
r3 =
7 19 31 15
31 63 80 36
61 114 131 57
21 38 43 18
>> r4=conv2(a,h1,'same')
r4 =
63 80 36
114 131 57
38 43 18
>>