MATLAB卷积conv、conv2、convn详解

1. conv(向量卷积运算)

向量的卷积= 多项式乘法
使用说明:

w=conv(u,v)

u,v为向量,其长度可以不相同。

实例1:多项式乘法

(s^2+2s+2)(s+4)(s+1)

w=conv([1,2,2],conv([1,4][1,1]))

w =
1 7 16 18 8

P=poly2str(w,'s')

P =
s^4 + 7 s^3 + 16 s^2 + 18 s + 8

2. conv2(二维矩阵卷积运算)

总结出full,same,valid三种卷积后图像大小的计算公式:

1.full: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1+N2-1) x (N1+N2-1)

a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b)

ans =

     1     2     3     2     1
     2     4     6     4     2
     3     6     9     6     3
     2     4     6     4     2
     1     2     3     2     1

相当于把a看作图片,b看作卷积核,默认为full 卷积后图像大小为 3+3-1 = 5 * 5

如图1, 滑动步长为1,图片大小为2x2,卷积核大小为3x3,卷积后图像大小:4x4(2+3-1)
在这里插入图片描述

图中蓝色为原图像(22),灰色为卷积核(33),白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片(4*4)。(2+3-1)

图的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。

2.same: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1

a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b,'same')

ans =

     4     6     4
     6     9     6
     4     6     4

3.valid:滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:[(N1-N2)/S+1] x [(N1-N2)/S+1]

a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b,'valid')

ans =

     9

如图2,滑动步长为1,图片大小为5x5,卷积核大小为3x3,卷积后图像大小:3x3
在这里插入图片描述

3. MATLAB的conv2函数实现步骤 conv2(A,B)

卷积的时候需要对卷积核进行180的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值

其中,矩阵A和B的尺寸分别为mana即mbnb

① 对矩阵A补零,
第一行之前和最后一行之后都补mb-1行,
第一列之前和最后一列之后都补nb-1列
(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零);
在这里插入图片描述
③ 滑动旋转后的卷积核,将卷积核的中心位于图像矩阵的每一个元素,并求乘积和(即将旋转后的卷积核在A上进行滑动,然后对应位置相乘,最后相加);
下面分别是shape=full, same, valid时取输出图像大小的情况,其中:

位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),
位置2表示到该位置结束(对应输出图像右下角)
在这里插入图片描述
‘full’ 全卷积(默认值)。
‘same’ 与 u 大小相同的卷积的中心部分。
‘valid’ 仅计算没有补零边缘的卷积部分。此时,length(y) 是 max(length(u)-length(v)+1,0)。

4.convn(n维矩阵卷积运算)

a=ones(5,5,5)

a(:,:,1) =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

a(:,:,2) =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

a(:,:,3) =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

a(:,:,4) =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

a(:,:,5) =

 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1

b=ones(5,5,5);

convn(a,b,‘valid’)

ans =

125

convn(a,b,‘same’)

ans(:,:,1) =

27    36    45    36    27
36    48    60    48    36
45    60    75    60    45
36    48    60    48    36
27    36    45    36    27

ans(:,:,2) =

36    48    60    48    36
48    64    80    64    48
60    80   100    80    60
48    64    80    64    48
36    48    60    48    36

ans(:,:,3) =

45    60    75    60    45
60    80   100    80    60
75   100   125   100    75
60    80   100    80    60
45    60    75    60    45

Reference:
1.MATLAB卷积运算(conv、conv2、convn)解释
2.MATLAB-conv函数

Matlab中,可以使用conv函数来实现卷积运算。conv函数可以用于一维和二维矩阵的卷积运算。 对于一维卷积运算,可以使用以下语法: y = conv(u,v) 其中,u和v是待卷积的向量,y是卷积结果。 对于二维卷积运算,可以使用以下语法: C = conv2(A,B) 其中,A和B是待卷积的矩阵,C是卷积结果。 在conv2函数中,可以通过设置不同的参数来控制卷积的边界处理方式和输出图像的大小。常用的参数有: - 'full':全卷积,输出图像的大小为输入图像大小加上卷积核大小减去1。 - 'same':与输入图像大小相同的卷积的中心部分。 - 'valid':仅计算没有补零边缘的卷积部分。 需要注意的是,conv2函数会自动对输入进行边界补零处理,不支持其他的边界补充选项。 除了一维和二维卷积运算外,Matlab还提供了convn函数用于n维矩阵的卷积运算。 综上所述,可以使用conv函数来实现一维卷积运算,使用conv2函数来实现二维卷积运算,并通过设置参数来控制卷积的边界处理方式和输出图像的大小。 #### 引用[.reference_title] - *1* *2* *3* [MATLAB卷积convconv2convn详解](https://blog.csdn.net/weixin_44601578/article/details/117822587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值