看了别人的讲解后自己的一些见解,如有错误,还望指正,谢谢哈。
对于矩阵A和B。
假定矩阵A大小为ma×na,矩阵B大小为mb×nb.
则conv2(A,B)的矩阵大小有三种形式分别为full、same、valid
其中full为(ma+mb-1)×(na+nb-1)
特举例子:A大小为2×5,B大小为3×4
则conv2(A,B)的算法如下:
首先对矩阵B旋转180°→变为C,即
C=fliplr(flipud(B));
或
C=rot90(B,2);
%表示逆时针旋转两次90°
conv2(A,B)的大小为4×8。即(2+3-1)×(5+4-1)。
矩阵D内的元素为:在矩阵A的基础上向上向下各补(3-1)行零,向左向右各补(4-1)行零。大小为6×11.
conv2(A,B)中的元素计算方法如下:
取A中的子矩阵Di(矩阵大小与C相等)与C做运算,其中C大小为3×4,Di大小为3×4。
Di与C中相同位置处的元素相乘,再将所有元素相乘的结果求和,即得到conv2的一个元素。
即,
conv2(i)=sum(sum(Di.*C));
例如: 矩阵A为
[ 0 1 2 3 4
5 6 7 8 9 ]
矩阵B为
[ 1 2 3 4
5 6 7 8
2 3 4 1 ]
矩阵D为
[ 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 2 3 4 0 0 0
0 0 0 5 6 7 8 9 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 ]
矩阵C为
[ 1 4 3 2
8 7 6 5
4 3 2 1 ]
则conv2(A,B)为
[ 0 1 4 10 20 25 24 16
5 21 50 94 130 131 111 68
25 62 113 180 216 192 146 76
10 27 52 66 76 66 44 9 ]
例如conv2中的0是这样来的:
0×1+0×4+0×3+0×2+0×8+0×7+0×6+0×5+0×4+0×3+0×2+0×1
10是这样来的:
0×1+0×4+0×3+0×2+0×8+0×7+0×6+0×5+0×4+1×3+2×2+3×1
16是这样来的:
0×1+0×4+0×3+0×2+0×8+0×7+0×6+0×5+4×4+0×3+0×2+0×1