二维离散卷积公式:

第一部分

conv(向量卷积运算)

所谓两个向量卷积,说白了就是多项式乘法。
比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下:
把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排列,比如就按升幂吧,写出对应的多项式:1+2x+3x^2;同样的,把q的元素也作为多项式的系数按升幂排列,写出对应的多项式:1+x。

卷积就是“两个多项式相乘取系数”。
(1+2x+3x^2)×(1+x)=1+3x+5x^2+3x^3
所以p和q卷积的结果就是[1 3 5 3]。

记住,当确定是用升幂或是降幂排列后,下面也都要按这个方式排列,否则结果是不对的。
你也可以用matlab试试
p=[1 2 3]
q=[1 1]
conv(p,q)
看看和计算的结果是否相同。

conv2(二维矩阵卷积运算)

a=[1 1 1;1 1 1;1 1 1];
b=[1 1 1;1 1 1;1 1 1];
>> conv2(a,b)

ans =

1     2     3     2     1
     2     4     6     4     2
     3     6     9     6     3
     2     4     6     4     2
     1     2     3     2     1

>> conv2(a,b,'valid')

ans =

9

>> conv2(a,b,'same')

ans =

4     6     4
     6     9     6
     4     6     4

>> conv2(a,b,'full')

ans =

1     2     3     2     1
     2     4     6     4     2
     3     6     9     6     3
     2     4     6     4     2
     1     2     3     2     1

convn(n维矩阵卷积运算)

>> a=ones(5,5,5)

a(:,:,1) =

1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

a(:,:,2) =

1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

a(:,:,3) =

1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

a(:,:,4) =

1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

a(:,:,5) =

1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

>> b=ones(5,5,5);

>> convn(a,b,'valid')

ans =

125

>> convn(a,b,'same')

ans(:,:,1) =

27    36    45    36    27
    36    48    60    48    36
    45    60    75    60    45
    36    48    60    48    36
    27    36    45    36    27

ans(:,:,2) =

36    48    60    48    36
    48    64    80    64    48
    60    80   100    80    60
    48    64    80    64    48
    36    48    60    48    36

ans(:,:,3) =

45    60    75    60    45
    60    80   100    80    60
    75   100   125   100    75
    60    80   100    80    60
    45    60    75    60    45

第二部分

1.full

如下图:

图(1)

图中蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。图的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。

2.same

如下图:

图(2)

卷积的时候需要对卷积核进行180的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值

3. valid

如下图:

图(3)

太简单,不解释。

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

【注:在文章置顶的公式中,设A(m*m)为被卷积矩阵,K(n*n)为卷积核,B为卷积结果(可能与其他地方卷积公式的被                               卷矩阵、卷积核选取有差异)则: ‘full’的输出结果为n+m-1,’same’的输出结果为m,’valid’的输出结果为m-n+1

1.full: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1+N2-1 x N1+N2-1

如图1, 滑动步长为1,图片大小为2x2,卷积核大小为3x3,卷积后图像大小:4x4

2.same: 滑动步长为1,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:N1xN1

3.valid:滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2,卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1

如图2,滑动步长为1,图片大小为5x5,卷积核大小为3x3,卷积后图像大小:3x3

第三部分

MATLAB的conv2函数实现步骤(conv2(A,B)):

其中,矩阵A和B的尺寸分别为ma*na即mb*nb

① 对矩阵A补零,第一行之前和最后一行之后都补mb-1行,第一列之前和最后一列之后都补nb-1列(注意conv2不支持其他的边界补充选项,函数内部对输入总是补零);

② 将卷积核绕其中心旋转180度;

③ 滑动旋转后的卷积核,将卷积核的中心位于图像矩阵的每一个元素,并求乘积和(即将旋转后的卷积核在A上进行滑动,然后对应位置相乘,最后相加);下面分别是shape=full, same, valid时取输出图像大小的情况,其中:位置1表示输出图像的值从当前核的计算值开始(对应输出图像左上角),位置2表示到该位置结束(对应输出图像右下角)

MATLAB卷积运算解释(conv、conv2、convn)相关推荐

  1. MATLAB卷积运算(conv、conv2、convn)解释

    1 conv(向量卷积运算) 所谓两个向量卷积,说白了就是多项式乘法. 比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积如下: 把p的元素作为一个多项式的系数,多项式按升幂(或降幂)排 ...

  2. Matlab卷积函数之conv、deconv、conv2、convn

    目录 1.conv:卷积和多项式乘法 2.deconv2:去卷积和多项式除法 3.conv2:二维卷积 4.convn:N维卷积 1.conv:卷积和多项式乘法 matlab官网解释: 示例:求多项式 ...

  3. matlab conv实现,MATLAB卷积运算(conv)以及通用的卷积函数my_conv的实现

    conv(向量卷积运算) 两个向量卷积,简单理解其实就是多项式乘法. 比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积计算方法如下: 把p的元素作为一个多项式的系数,多项式按升幂(或降 ...

  4. matlab中filter卷积补零,matlab中的卷积——filter,conv之间的区别

    filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序: x=[1,2,3,4,5]; h=[1,1,1]; y1=conv(h,x) y2=filter(h,1,x) ...

  5. matlab中conv什么意思,matlab卷积函数conv matlab中conv()是什么意思?

    matlab中conv()是什么意思? conv(向量卷积运算) 两个向量卷积,简单理解其实就是多项式乘法. 比如:p=[1 2 3],q=[1 1]是两个向量,p和q的卷积计算方法如下: 把p的元素 ...

  6. Matlab 卷积函数 ——conv2

    功能:是二维卷积运算函数(与convmtx2相似).如果a和b是两个离散变量n1和n2的函数,则关于a和b的二维卷积运算数学公式如下: 用法:C = conv2(A,B) C = conv2(hcol ...

  7. 序列的卷积运算与相关运算——MATLAB

    一.实验目的 1.掌握有限长序列线性卷积的编程计算原理,并能够利用Matlab或C语言编写算法程序进行线性卷积运算的程序实现; 2.学会线性卷积函数和线性相关函数的使用方法,并能利用二者进行有限长序列 ...

  8. 求助:MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别?

    MATLAB中实现卷积运算和理论分析中的卷积运算有什么区别. 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑 ...

  9. matlab、C语言实现时域卷积运算

    背景 某次面试(岗位为音频算法)遇到了c语言实现卷积的编程题.当时不够精通c语言,写的程序比较垃圾.现在重新整理了一下. 原理 卷积公式: matlab有自带的计算卷积的函数conv() 根据公式,现 ...

最新文章

  1. Exchange 2013部署系列之(十)信息权限保护RMS和Exchange 2013的整合
  2. 新闻与传播c刊_新闻传播类c刊有哪些
  3. 用函数计算工龄_用Excel计算财务账期,离不开这3个函数
  4. Codeforces 977D: Divide by three, multiply by two(暴力)
  5. 快手:今年下架抄袭、搬运内容的违规视频20316个
  6. 【实践】SimSvr在微信推荐系统中的应用实践
  7. 面试准备每日五题:C++(四)——typedefdefine、指针常量、队列栈、地址赋值、C和C++结构体
  8. 《深入浅出通信原理》知识总结
  9. 老龙头公司不完全名单
  10. promise跟ajax区别,Promise和AJAX有什么区别?
  11. Rust FFI 编程 - nix crate
  12. R语言绘图-gganimate 让你的统计图动起来
  13. 目标检测中常提到的IoU和mAP究竟是什么?
  14. 目前住院病人主要由护士护理
  15. JavaWeb+MySql+Tomcat一键部署方案
  16. Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)
  17. MyEclipse2014下载地址
  18. Could not load file or assembly ‘WMS.API.Service, Culture=neutral, PublicKeyToken=null‘. 系统找不到指定的文件
  19. 惊爆!重大秘密破解!宇宙,大脑,信息,三者之间存在惊天奥秘。道翰天琼认知智能三体论。
  20. 纵观虚拟现实在各行各业的应用,虚拟现实技术目前依然处在零星的散状的实验阶段。

热门文章

  1. 【bzoj2073】[POI2004]PRZ
  2. 【软构】黑盒测试与白盒测试
  3. 常见下载工具的常用端口
  4. 训练集、验证集、测试集的区别与应用
  5. 为动态栏目生成独立的地址
  6. 父类和子类间引用要注意的问题
  7. ARFoundation系列讲解 - 77 AR室内导航二
  8. 电机学习笔记3——SVPWM算法的simulink模型搭建
  9. mt4双线macd_99%的人使用MACD指标失败的原因!
  10. 三网用户免费开通电话防骚扰