matlab 卷积算子,matlab  矩阵卷积imfilter  conv2  filter 区别探究

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

>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值