二维卷积


前两天参加笔试时候有个题考的是二维卷积,发现不会做了,这里做一下方法总结:

二维卷积公式:


离散二维卷积公式:


在网上找到一种比较好理解的多项式乘法方法计算矩阵卷积方法(来源:http://bbs.sciencenet.cn/home.php?mod=space&uid=268138&do=blog&id=383185):

二维卷积_第1张图片

a和d的卷积就是,把a和d的第一行作为一个多项式的系数,按多项式升幂排列(也可以按降幂),即为:


二维卷积_第2张图片

所得卷积矩阵为:


二维卷积_第3张图片

 经过matlab函数conv2的验证,这种方法结果是正确的。

这里给出的矩阵大小是相同的,如果大小不相同又怎么办呢?比如说:

c=[1 2;3 4;5 6],d=[7 8;1 2];c*d=?

按多项式相乘方法算了下(因为是2x3矩阵卷积2x2矩阵,卷积后矩阵大小应为(2+2-1)x(2+3-1)=3x4),这里只写出多项式系数:

(1 2)(7 8)=(7 22 16);

(1 2)(1 2)+(3 4)(7 8)=(21 52 32)+(1 4 4)=(22 56 36);

(5 6)(7 8)+(3 4)(1 2)=(3 10 8)+(35 82 48)=(38 92 56);

(5 6)(1 2)=(5 16 12);

matlab的运算结果为[7 22 16;22 56 36;38 92 56;5 16 12],一致。

方法清楚了,但是感觉还是有点乱,规律是什么呢?仔细看下,发现规律如下:

将前面一个矩阵翻转180°,然后像一般卷积那样移位相乘相加,只不过方向变成了由上往下。比如,第一个例子中a翻转后(8 1 6)在最下面,当由上往下移动时,先与b的第一行(2 3 2)重叠,于是做二项式相乘得到结果的第1行;然后继续a继续向下移动,(8 1 6)与b的第2行重叠,(3 5 7)与b的第二行重叠,于是这两项分别进行相乘,然后相加得到结果的第二行...以此类推,最后得出结果。


(转自http://hi.baidu.com/foolwish/item/92f40e4456d38f3a10ee1e9f)

你可能感兴趣的:(图像处理与算法)