矩阵的卷积

news/2024/7/21 7:37:06 标签: matlab, 矩阵卷积, 图像处理

转载地址: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




http://www.niftyadmin.cn/n/1166827.html

相关文章

VS环境中,cmake出来的ALL_BUILD项目和 ZERO_CHECK项目的作用

转载地址:http://blog.csdn.net/jtop0/article/details/6167432 CMake是 跨平台软件开发和维护过程的 工程构建工具。“在每个系统构建你的工程,而无须关心创建可执行文件和动态库的具体方法”。 CMake 相对于其他类似工具(shell脚本、Makefi…

我对SIFT的一点点了解

说来惭愧,每次不管看什么算法,都不能彻底搞明白。这两天心血来潮看起了SIFT,主要通过看各位的博文来学习,大致有了自己的一点点了解,因为还有其他事情也没有时间一直看下去了,就暂且总结一下自己的浅薄了解…

Kinect for Windows SDK开发学习相关资源

转载地址:http://www.cnblogs.com/yangecnu/p/3150744.html Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的…

Kinect sdk与OpenNI的前世今生

转载地址:http://blog.csdn.net/yangtrees/article/details/8650202 前世:Kinect SDK 1.6之前、OpenNI2.0之前 通过试玩过微软的Kinect sdk与OpenNi的Kinect之后,下面对两者作了一些比较。注意:微软的sdk版本是最初的beta版&#…

关于OpenNI和Kinect SDk的共存问题

众所周知,OpenNI2使用的是微软的驱动,二者自然兼容,共存没有问题。 OpenNI1.X系列虽然是用的KinectSensor驱动,但是也可以和KinectSDk共存。 如果我们在电脑上同时装了OpenNI1.X和Kinect SDK,电脑会自动检测到微软的驱动&#x…

正则化(regularization)

转载地址:http://blog.csdn.net/xjbzju/article/details/6618064 正则化(regularization)在线性代数理论中,不适定问题通常是由一组线性代数方程定义的,而且这组方程组通常来源于有着很大的条件数的不适定反问题。大条件数意味着舍入误差或其…

Kinect前世今生

转载地址:http://www.doc88.com/p-897244143318.html 2009年,微软收购了3DV System,包含公司员工和所有专利。3DV System拥有Zcam动作感知系统,采用TOF技术。 但是微软在2010年推出的Project Natal(Kinect的前身&…

debugging information cannot be found or does not match.binary was not built

转载地址:http://blog.csdn.net/xexiyong/article/details/8614876debugging information cannot be found or does not match.binary was not built Error Msg: Debugging information for "YourProject.exe" cannot be found or does not match. Binary…