Matlab中矩阵卷积函数convn

来源:互联网 发布:淘宝视频缓冲地址 编辑:程序博客网 时间:2024/05/02 01:47

Matlab中矩阵卷积函数convn

最近在看CNN做手写数字识别,其中CNN中Convolution在图像处理中就涉及了矩阵卷积。因为博主有了奥本海姆《信号与系统》中一维卷积的基础,这里就类比的推广一下矩阵卷积(二维,高维类似)。

卷积步骤:
1. 考虑到卷积的交换律,可以选择较方便矩阵(一般选较小)作为卷积核。对此矩阵进行绕中心的180度旋转,如[1420]变换成[0241]
2. 将旋转过的卷积核左下角的元素与待卷积矩阵的右上角元素对齐(重叠),没有重叠元素处补零,重叠处相乘,乘积和即为结果矩阵的a1,1;
3. 依次左移,求结果矩阵第一行元素,直到两矩阵无重叠为止;
4. 依次下移,求结果矩阵第一列元素,直到两矩阵无重叠为止;
5. 其余各处元素类似可求的;

这里Matlab还提供了其他几种用法:

%   C = CONVN(A, B, 'shape') controls the size of the answer C:%     'full'   - (default) returns the full N-D convolution%     'same'   - returns the central part of the convolution that%                is the same size as A.%     'valid'  - returns only the part of the result that can be%                computed without assuming zero-padded arrays.%                size(C,k) = max([nak-max(0,nbk-1)],0).

其中’valid’就可以直接用在CNN的图像处理中。

example:>> a = [1,2;4,0]a =     1     2     4     0>> b = [1,2;3,4]b =     1     2     3     4>> conv2(a,b)ans =     1     4     4     7    18     8    12    16     0%conv2是专门用于二维的卷积函数,convn可用于高维;