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函数