matlab 矩阵卷积

卷积的表达式:

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

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值