精华内容
下载资源
问答
  • matlab矩阵卷积

    热门讨论 2011-07-17 19:15:30
    这是一个实现两个矩阵卷积计算的matlab源代码,经实验可用。
  • matlab 矩阵卷积

    千次阅读 2019-11-14 18:51:28
    卷积的表达式: y(n)=x(n)*h(n)=sigma{x(m)h(n-m)} y(n)=x(n)*sigma{deta(n-m)} 对应信号系统的卷积冲激函数,系统的结果就是信号和其本身的线性移位 结果元素的个数,x(n)的长度是n,h(n)的长度是m,则结果的序列...

    卷积的表达式:

    y(n)=x(n)*h(n)=sigma{x(m)h(n-m)}
    y(n)=x(n)*sigma{deta(n-m)} 对应信号系统的卷积冲激函数,系统的结果就是信号和其本身的线性移位

    结果元素的个数,x(n)的长度是n,h(n)的长度是m,则结果的序列长度就是n+m-1

    和信号处理的过程是一致的,任何一本信号处理的书都有详细的讲解

    1.h(n)序列倒置->位移->相乘->取和

    举例:x(n) = [4,3,2,1],h(n) = [3,2,1]。

    h(n)倒置为h'(n)[1,2,3],逐渐从前向x(n)位移,直到h'(n)最后一个元素3与x(n)第一个元素4接触时,开始相乘,也就是将两个序列相交的元素相乘并求和。

    因此x(n)*h(n) = [4×3,2×4+3×3,1×4+2×3+3×2,1×3+2×2+3×1,1×2+2×1,1×1]  = [12,17,16,10,4,1]

    2.对位相乘求和。

    步骤:①两序列右对齐;②逐个元素对应相乘但是不进位;③同列乘值相加

    clear;clc;
    p=[1 2 3];
    q=[1 1];
    result1=conv(p,q);
    a=[1 1 1];
    b=[1 1 1;1 1 1;1 1 1];
    result2=conv2(a,b,'full');
    result3=conv2(a,b,'same');
    result4=conv2(a,b,'valid');

    矩阵卷积conv2用于二维矩阵的卷积

    也是类似于一维,将较小的那个矩阵旋转180,就是将矩阵翻转,初始矩阵按照两个矩阵大小补零,然后按顺序乘,顺序是从左向右,从上向下,然后相加.

    直到没有重叠的部分.

    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).
    

     

    最后,我们可以总结出full,same,valid三种卷积后图像大小的计算公式:

     

    1.full: 滑动步长为1,矩阵大小为n*n,卷积核大小为mxm,卷积后图像大小:(n+m-1) *(n+m-1)

    如图, 滑动步长为1,矩阵大小为6*6,卷积核大小为4*4,卷积后图像大小:10*10

    2.same: 滑动步长为1,矩阵大小为n*n,卷积核大小为mxm,卷积后图像大小:n*n

    3.valid:滑动步长为S,矩阵大小为n*n,卷积核大小为mxm,卷积后图像大小:(n-m)/S+1 *(n-m)/S+1

    步骤:1

    2:

    3:

    本文参考文章:https://www.cnblogs.com/hyb221512/p/9276621.html and https://www.cnblogs.com/dasein/p/5692153.html

    展开全文
  • 1 5 7] %b矩阵如多数模板一样取3*3那么conv(a,b)的结果肯定是(5+3-1)*(4+3-1)=7*6的矩阵卷积计算过程如下:默认先把a矩阵补0变成7*6维的矩阵,然后b翻转 之后进行模板操作,要计算a矩阵中哪个点卷积...

    先定义两个矩阵

    a = [1 2 3 5 ; 4 7 9 5;1 4 6 7;5 4 3 7;8 7 5 1] %a矩阵取5*4

    b = [1 5 4; 3 6 8; 1 5 7]   %b矩阵如多数模板一样取3*3

    那么conv(a,b)的结果肯定是(5+3-1)*(4+3-1)=7*6的矩阵

    卷积计算过程如下:默认先把a矩阵补0变成7*6维的矩阵,然后b翻转 之后进行模板操作,要计算a矩阵中哪个点卷积以后的值,就把翻转之后b‘矩阵的中心如图中的6放到要计算的位子 然后对应的3*3矩阵对应位置相乘,之后全部相加即为对应点的卷积之后的结果。如下图所示


    结果如下:

    c=conv2(a,b)

    c =


         1      7      17      28      37     20
         7     39     89     127   115     60
        14    61   151    212    207   103
        12    74   165    226    225   119
        24    98   178    190   168    109
        29    98   179    139   102     57
         8     47    96       75     40      7

    d=conv2(a,b,'same')  %这个结果表示卷积出来的结果与a矩阵的维数一样

    d =


        39    89   127   115
        61   151   212   207
        74   165   226   225
        98   178   190   168
        98   179   139   102

    接下来看看e=ifft2(fft2(a).*fft2(b));计算这个的时候由于是点乘,两个矩阵的维数应该相同因此首先应该将a、b两个矩阵都变成卷积之后的维数大小才行,这里都变成7*6维

    因此首先:

    a(7,6)=0;

    b(7,6)=0;

    此时a =


         1     2     3     5     0     0
         4     7     9     5     0     0
         1     4     6     7     0     0
         5     4     3     7     0     0
         8     7     5     1     0     0
         0     0     0     0     0     0
         0     0     0     0     0     0

    b =


         1     5     4     0     0     0
         3     6     8     0     0     0
         1     5     7     0     0     0
         0     0     0     0     0     0
         0     0     0     0     0     0
         0     0     0     0     0     0
         0     0     0     0     0     0

    然后执行e=ifft2(fft2(a).*fft2(b))

    得到

    e =


        1.0000    7.0000   17.0000   28.0000   37.0000   20.0000
        7.0000   39.0000   89.0000  127.0000  115.0000   60.0000
       14.0000   61.0000  151.0000  212.0000  207.0000  103.0000
       12.0000   74.0000  165.0000  226.0000  225.0000  119.0000
       24.0000   98.0000  178.0000  190.0000  168.0000  109.0000
       29.0000   98.0000  179.0000  139.0000  102.0000   57.0000
        8.0000   47.0000   96.0000   75.0000   40.0000    7.0000

    是不是与之前conv(a,b)的结果一样,只不过这里是双精度型的

    展开全文
  • Matlab矩阵卷积函数convn

    千次阅读 2017-07-12 10:16:43
    Matlab矩阵卷积函数convn最近在看CNN做手写数字识别,其中CNN中Convolution在图像处理中就涉及了矩阵卷积。因为博主有了奥本海姆《信号与系统》中一维卷积的基础,这里就类比的推广一下矩阵卷积(二维,高维类似)...

    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可用于高维;
    展开全文
  • 与 CONV2 相同,但适用于稀疏矩阵
  • % 时卷频乘,可用于求矩阵卷积 [ra,ca] = size(A); [rb,cb] = size(B); r = ra+rb-1; % A,B两个矩阵做卷积后其行数和列数分别为A,B矩阵的行列数相加减1 c = ca+cb-1; a1 = [A zeros(ra,c-ca);zeros(r-ra,c)]; % ...

    function out = SJPC(A,B)
    % 时卷频乘,可用于求矩阵卷积
    [ra,ca] = size(A);
    [rb,cb] = size(B);
    r = ra+rb-1; % A,B两个矩阵做卷积后其行数和列数分别为A,B矩阵的行列数相加减1
    c = ca+cb-1;
    
    a1 = [A zeros(ra,c-ca);zeros(r-ra,c)];  % 0延拓,补齐成r*c大小的矩阵,原矩阵在左上方
    b1 = [B zeros(rb,c-cb);zeros(r-rb,c)];
    fftA = fft2(a1);
    fftB = fft2(b1);
    result1 = ifft2(fftA.*fftB);  % 频域相乘
    
    r_start = floor(rb/2) +1;
    r_end = r_start + ra -1;
    c_start = floor(cb/2) +1;
    c_end = c_start + ca -1; % 此处返回的矩阵大小和A相同,也可不做截取,返回result1
    out = result1(r_start:r_end,c_start:c_end);
    
    end



    展开全文
  • 矩阵卷积(matlab函数)

    2012-04-29 12:49:24
    矩阵卷积原理与实现 function [ hp] = juanji( f,g ) %此函数只为计算两任意二维矩阵的卷积 %命令格式:C=juanji(A,B) C为A B的卷积; %若A为m*n矩阵,B为p*q矩阵,则C为(m+p-1)*(n+q-1)矩阵;
  • matlab 循环卷积函数

    2020-11-08 11:05:10
    matlab循环卷积函数,使用矩阵实现,用于理解循环卷积。分2部分,一部分为循环移位,第二部分给矩阵赋值、计算循环卷积
  • 这个的例子函数是y=exp(-Ts*n)的自身卷积,源程序只需要修改为相应函数。矩阵的算法相同。
  • 矩阵卷积理解

    2018-11-20 19:18:55
    在图像处理的过程中,经常会看到矩阵卷积的概念,比如说用一个模板去和一张图片进行卷积,因此很有必要了解矩阵卷积到了做了什么,具体又是怎么计算的。  在matlab中有conv2函数对矩阵进行卷积运算,其中有一个...
  • 特里斯坦·乌塞尔亚像素分辨二维卷积2012 年 3 月matout=matoverlay(mat1,mat2,x,y); 此函数采用输入矩阵 mat1 并创建mat1 中位置 (x,y) 处的矩阵 mat2。 如果 (x,y) 是浮点数,则图像是 mat2 在位置 (x,y) 处的亚...
  • MATLAB卷积

    千次阅读 2019-04-14 10:35:42
    文章目录卷积相关卷积定理卷积与互相关,自相关函数的关系卷积原理卷积矩阵表达形式基于MATLAB的不用卷积函数conv求卷积的三种方法 卷积 输入信号:x,系统响应h,输出信号y 卷积:conv(x,h)=y或conv(h,x)=y 反...
  • 详细讲述matlab矩阵卷积函数convn 在用到matlab卷积神经网络的时候要用到C=convn(A,B,‘shape’)函数,在这里详细讲述一下他用用来干嘛的以及怎么用。文字陈述的话太难懂,不如一个图片例子来的快。例如:矩阵...
  • 矩阵卷积

    2014-10-24 09:49:21
    Matlab应用(这里考虑二维矩阵,在图像中对应)两个图像模糊(边缘)操作,假设矩阵A、B,A代表源图像,B代表卷积模板,那么B的取值决定最后运算的结果。  Matlab中的应用函数——conv2(二维卷积,一维对应conv)...
  • 基于matlab卷积实现

    千次阅读 2019-10-14 07:35:15
    本文使用了matlab的convn和imgI/O相关函数,构建一套可以处理任何卷积的体系。 参考列表: 图像处理其实其实很简单(感性的教你理论知识) 常用算子汇总 流程 总体而言,我们要完成以下三个步骤。 读入图像文件到...
  • 矩阵卷积、矩阵相乘的转化

    千次阅读 2014-11-30 10:44:15
    之前图形学课上老师在 Image Filters中讲过用矩阵卷积对图像进行处理,当时一直不懂卷积是怎么个东东,今天... 两个矩阵卷积转化为矩阵相乘形式——Matlab应用(这里考虑二维矩阵,在图像中对应)两个图像模糊(边缘)操
  • matlab卷积矩阵代码NMF工具箱 用于执行非负矩阵分解(NMF)和多个变体的工具箱。 当前,代码在MATLAB中,但是计划创建Python版本,也可能创建C / C ++版本。 安装 克隆此存储库或下载zip版本。 在MATLAB中,将NMF ...
  • matlab 空域卷积 == 频域相乘

    千次阅读 2018-06-12 15:38:55
    情况一,矩阵不拓展: ...**即空域是'same',频域也是same,而不是fft2(p,x+p-1),要是完全卷积里的填充才能是完全卷积** p=[0,-1,0;-1,4,-1;0,-1,0];%矩阵1 x=magic(5);%矩阵2 a=conv2(x,p,'same');%...
  • 本文件是用matlab实现用矩阵法计算循环卷积矩阵。适合初学数字信号处理的筒子参考
  • 这里借用matlab进行矩阵循环卷积。这里放出我自用的matlab函数。 下面展示 matlab源代码。 function yn=circonv(hn,xn,N) %先要根据N点数的长度对矩阵进行补零 %然后对hn进行处理获得其循环矩阵hn_f %最后将hn_f与xn...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

matlab矩阵卷积

matlab 订阅