矩阵的卷积

转载地址:http://blog.csdn.net/frankyzhangc/article/details/6990782  自己也做了一定的添加和修改

想要深刻理解矩阵的卷积,那么首先要知道什么是离散序列的卷积。

已知离散序列x(n)和h(n),则x(n)和h(n)的卷积定义为:


其计算过程是对h(n)翻转,平移,相乘,求和。也可以用不进位乘法计算,并且Length(y)=Length(x)+Length(h)。

还有,若x(n):n1≤n≤n2;h(n):n3≤n≤n4;那么y(n):n1+n3≤n≤n2+n4


一个矩阵与另一个矩阵的卷积运算大部分运用在图像处理上,例如用一个模板去对一幅图像进行卷积。我们这里只考虑n*n的模板,并且n为奇数(当然不是方阵或者n不是奇数也可以,但是在实际应用中模板大都为n为奇数的方阵)。

把模板(n*n)放在矩阵上(中心对准要处理的元素),用模板的每个元素去乘矩阵中的的元素,累加和等于这个元素,依次计算每个元素的值,如果矩阵的中心在边缘就要将原矩阵进行扩展,例如补0,或者直接规定模板的中心距离边缘(n-1)/2个单位以上。

卷积的计算步骤:
(1)    卷积核绕自己的核心元素顺时针旋转180度(这个千万不要忘了)
(2)    移动卷积核的中心元素,使它位于输入图像待处理像素的正上方
(3)    在旋转后的卷积核中,将输入图像的像素值作为权重相乘
(4)    第三步各结果的和做为该输入像素对应的输出像素


以下举一个简单的例子,并用Matlab来观察

相关MATALB代码

a=[2 1 3 1;1 2 1 2;2 1 3 2;1 3 1 2];%大小为ma*na
b=[1 1 1;1 1 1;1 1 1];%大小为mb*nb
c=conv2(a,b,'same');%返回和a同样大小的部分,ma*na,一般在图像中的应用都是这样使用
d=conv2(a,b,'full');%返回完整矩阵,大小为(ma+mb-1,na+nb-1)
fprintf('\na = \n');
disp(a);
fprintf('\nb = \n');
disp(b);
fprintf('\nc = \n');
disp(c);
fprintf('\nd = \n');
disp(d);


MATALB仿真结果

a = 
     2     1     3     1
     1     2     1     2
     2     1     3     2
     1     3     1     2

b = 
     1     1     1
     1     1     1
     1     1     1

c = 
     6    10    10     7
     9    16    16    12
    10    15    17    11
     7    11    12     8

d = 
     2     3     6     5     4     1
     3     6    10    10     7     3
     5     9    16    16    12     5
     4    10    15    17    11     6
     3     7    11    12     8     4
     1     4     5     6     3     2



阅读更多
个人分类: 基本图像处理
想对作者说点什么? 我来说一句

矩阵卷积与图像处理.pptx

2017年12月06日 8.36MB 下载

两个矩阵的中心卷积和普通卷积

2009年01月19日 158KB 下载

没有更多推荐了,返回首页

不良信息举报

矩阵的卷积

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭