矩阵卷积

矩阵卷积
矩阵卷积

矩阵卷积、矩阵相乘的转化

两个矩阵卷积转化为矩阵相乘形式——Matlab应用(这里考虑二维矩阵,在图像中对应)两个图像模糊(边缘)操作,假设矩阵A、B,A代表源图像,B代表卷积模板,那么B的取值决定最后运算的结果。

Matlab中的应用函数——conv2(二维卷积,一维对应conv)

函数给出的公式定义为:

同一维数据卷积一样,它的实质在于将卷积模板图像翻转(旋转180),这里等同于一维信号的翻转,然后将卷积模板依次从上到下、从左到右滑动,计算在模板与原始图像交集元素的乘积和,该和就作为卷积以后的数值。

为了验证后续矩阵卷积转化为矩阵相乘,这里给出的conv2的实例描述:

假设矩阵A(4*3)、B(2*3)如下:

首先,B需要旋转180,

命令旋转2次90即可:

B = rot90(rot90(B));或者B = rot90(h,2); 结果为:

其次:命令conv2函数:

C = conv2(A,B,‘shape’),该函数的具体操作图示:

依次计算直至结束,结果数据为:

shape的取值有三种,full代表返回卷积以后的全部数据,size为

(mA+mB-1,nA+nB-1)的数据;same代表返回卷积以后的原图size (mA,nA)的部分数据;valid返回size为(mA-mB+1,nA-nB+1)的数据,指的是模板元素全部参加运算的结果数据,即源图像和模板的交集为模板。

矩阵卷积转化为矩阵相乘,网上也有很多方法,通俗化表示为:

A×B = B1*A1;

需要针对原始数据与模板数据做变换,变换过程如下:

首先进行周期延拓,补零:

M = mA+mB-1 = 5; N = nA+nB-1 = 5,对应卷积以后full数据大小。那么初次换换的A和B为:

其次对A1和B1分别进行变换

转化B1——针对B1以及转换矩阵方法为:

将B1中的每一行向量依次按照B转化为一个方形矩阵Ba~Be,然后针对于每一个方形矩阵按照B矩阵组合成一个新的矩阵B1。B1矩阵的大小为((mA+mB-1)*

(nA+nB-1),(mA+mB-1)*(nA+nB-1))。

转化A1——堆叠向量式

将上个步骤转换的A1按照行向量顺寻依次转化为一个列向量,那么列向量的大小为((mA+mB-1)*(nA+nB-1),1)大小。

针对实例:具体代码为:

周期延拓:

转化A——>A1

1[m1,n1] = size(A); [m2,n2] = size(B);

2m=m1+m2-1;n=n1+n2-1;

3AA = padarray(A,[m2-1,n2-1],'post');%%%补零

4BB = padarray(B,[m1-1,n1-1],'post');%%%补零

5AA =AA';

6A1 = AA(:);%%%%

转化B——>B1

7B2(1,:) = BB(1,:);

8for i =2:m

9 B2(i,:) = BB(m-i+2,:);

10end %%%矩阵a ~ e的重新赋值

11

12B4 = zeros(n,n);%%%%%%%每一行转化的方阵

13B1 = zeros(m*n,m*n);%%%%%最后的矩阵

14for i =1:m%%%%%%%%几维向量

15 B = B2(i,:);

16 if sum(sum(abs(B))==0)

17 B4 = zeros(n,n);

18 else

19 for j = 1:n%%%%%%%元素

20 for k =0:n-1%%%%%%%%位置(搞定一行向量转化为方阵的形式)

21 t = mod(j+k,n);

22 if t==0

23 t = n;

24 end %%%end if

25 B4(t,k+1) = B(j);

26 end %%%end for

27 end %%%end for

28 for k =0:m-1%%%%%%%%每一个转换矩阵在大矩阵中的位置编号(搞定小方阵在大阵中的位置转化为大方阵的形式)

29 t = mod(i+k,m);

30 if t==0

31 t = m;

32 end %%%end if

33 B1(k*n+1:(k+1)*n,(t-1)*n+1:t*n) = B4;

34 end %%%end for

35 end %%%end if else

36end %%%end for

结果数据转化:

37Result = B1*A1;

38Result = reshape(Result,n,m);

39Result = Result';

得到的结果等同于conv2的数据结果:

矩阵的运算及其运算规则

矩阵基本运算及应用 牛晨晖 在数学中,矩阵是一个按照长方阵列排列的或集合。矩阵是高等代中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、、光学和中都有应用;中,制作也需要用到矩阵。矩阵的运算是领域的重要问题。将为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则 简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的.

1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或.特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB. 1.2.3典型举例 已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知

? 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即. (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和. 1.3.2典型例题 设矩阵 计算 解是的矩阵.设它为

离散数学之图的矩阵表示及基本运算

实验四图的矩阵表示及基本运算 实验目的 学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。 实验内容与要求 根据输入的整数对,输出一个图形的邻接矩阵。并求出各结点的出度和入度。实验准备 图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。复习关于邻接矩阵的描述。明确一下内容: 1.如何使用邻接矩阵表示图。 2.利用图的邻接矩阵求结点的出度和入度的方法。 #include int** g(int n) { int** a, i, j; a = new int* [n];//分配指针数组 for(i=0; i

void CreateMatrix2(M *x, int n, int isOrient); void Input(M *x); void Show(M *x); int deg_out(M *a, int i); int deg_in(M *a, int i); void Maccessibility(M *a, M *Ma); void MatrixMultiple(M *a, M *b, M *m); void MatrixAdd(M *a, M *b); }; void Operators::CreateMatrix2(M *x, int n, int isOrient) { x->n=n; x->isOrient=isOrient; x->ele=g(x->n); } void Operators::CreateMatrix(M *x) { int n, isOrient; cout<<"Matrix's n="; cin>>n; cout<<"Is the graph oriented? 1=yes, 0=no :"; cin>>isOrient; CreateMatrix2(x, n, isOrient); } void Operators::Input(M *x) { int i, j; while(1) { cout<<"Input the edge's start-point and end-point, -1 is to finish inputing:"; cin>>i>>j; if(i==-1 || j==-1) break; x->ele[i][j]=1; if(!x->isOrient) x->ele[j][i]=1; } }

矩阵的运算及其运算规则

矩阵基本运算及应用 201700060牛晨晖 在数学中,矩阵是一个按照长方阵列排列的或集合。矩阵是高等代中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、、光学和中都有应用;中,制作也需要用到矩阵。矩阵的运算是领域的重要问题。将为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则

简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的. 1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或. 特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律

结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB. 1.2.3典型举例 已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即 .

(2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和. 1.3.2典型例题 设矩阵 计算 解是的矩阵.设它为 可得结论1:只有在下列情况下,两个矩阵的乘法才有意义,或说乘法运算是可行的:左矩阵的列数=右矩阵的行数;结论2在矩阵的乘法中,必须注意相乘的顺序.即使在与均有意义时,也未必有=成立.可见矩阵乘法不满足交换律;结论3方阵A和它同阶的单位阵作乘积,结果仍为A,即. 1.3.3运算性质(假设运算都是可行的)

利用矩阵运算处理图像

东北大学秦皇岛分校 数学软件认识实习报告 利用矩阵运算处理图像 学院数学与统计学院 专业信息与计算科学 学号******* 姓名**** 指导教师**** **** 成绩 教师评语: 指导教师签字: 2014年1月14日

1 绪论 1.1关于MATLAB的介绍 MATLAB是MATRIX和LABORATORY两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JA V A的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用。 1.2课题的背景 MATLAB中的图像处理工具箱几乎包括了经典图像处理的所有方面,从基本的图像增强到图像分割,MATLAB都提供了简便的函数调用来实现许多经典的图像处理方法。数字图像处理工具箱函数包括12类:(1)图像文件操作和显示函数;(2)图像的矩阵表示及运算函数;(3)图像增强函数;(4)图像变换函数(5)图像的空间变换函数;(6)二值形态学操作函数;(7)图像分析和理解函数;(8)其它的一些图像处理函数。另外MATLAB提供了对多种图像文件格式的读写和显示,这使得MATLAB在集成环境中进行图像处理的实验模拟非常方便。 MATLAB图像处理的前景广阔。主要在以下几个方面应用比较广泛,①搜索方向:基于内容的图像或视频搜索是很多搜索公司研究的热点。要想进入这个领域,必须有很强的

离散数学之图的矩阵表示及基本运算

离散数学之图的矩阵表示及基本运算

实验四图的矩阵表示及基本运算 实验目的 学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。 实验内容与要求 根据输入的整数对,输出一个图形的邻接矩阵。并求出各结点的出度和入度。 实验准备 图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。复习关于邻接矩阵的描述。明确一下内容: 1.如何使用邻接矩阵表示图。 2.利用图的邻接矩阵求结点的出度和入度的方法。 #include int** g(int n) { int** a, i, j; a = new int* [n];//分配指针数组 for(i=0; i

void MatrixMultiple(M *a, M *b, M *m); void MatrixAdd(M *a, M *b); }; void Operators::CreateMatrix2(M *x, int n, int isOrient) { x->n=n; x->isOrient=isOrient; x->ele=g(x->n); } void Operators::CreateMatrix(M *x) { int n, isOrient; cout<<"Matrix's n="; cin>>n; cout<<"Is the graph oriented? 1=yes, 0=no :"; cin>>isOrient; CreateMatrix2(x, n, isOrient); }

离散数学课程设计.图的矩阵表示与基本运算

中国矿业大学 软件开发基础实践报告 姓名: xxs 学号: bbaa0edf 专业:计算机科学与技术 指导教师: sjc 职称: js (仅供徐海计算机参考哈哈哈哈) 2012 年 6 月 20 徐州

目录 第一章实验概述 (3) 1.1实验目的 (3) 1.2实验内容 (3) 1.3实验环境 (3) 第二章实验原理和实现过程 (4) 2.1实验原理 (4) 2.1.1建立图的邻接矩阵,判断图是否连通 (4) 2.1.2 计算任意两个结点间的距离 (4) 2.1.3对不连通的图输出其各个连通支 (5) 2.2实验过程(算法描述) (5) 2.2.1 程序整体思路 (5) 2.2.2具体算法流程 (5) 第三章实验数据及结果分析 (7) 3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析 (7) 3.1.1输入无向图的边 (7) 3.1.2建立图的连接矩阵 (8) 3.2其他功能的功能测试和结果分析 (9) 3.2.1计算节点间的距离 (9) 3.2.2判断图的连通性 (9) 3.2.3输出图的连通支 (10) 3.2.4退出系统 (10) 第四章实验收获和心得体会 (11) 4.1实验收获 (11) 4.2心得体会 (12) 第五章实验源程序清单 (13) 5.1程序代码 (13)

第一章实验概述 1.1 实验目的 理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。 通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。 1.2 实验内容 以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。 注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。 基本要求如下:程序需具有基本的容错控制,在输入错误时有处理手段;程序界面友好,需要输入的地方有输入说明,说明输入的内容和格式要求等;实验原理和实现过程应该详细分析问题,给出解决思路,描述算法思想,不能用源程序代替算法;测试数据应全面,包括非法输入的处理结果等都应包含在内。 1.3 实验环境 C或C++语言编程环境实现。

相关主题
相关文档
最新文档