直观理解卷积

news2024/9/21 2:49:16

卷积直观理解

原文来自最容易理解的对卷积(convolution)的解释

🎬个人简介:一个全栈工程师的升级之路!
📋个人专栏:计算机杂记
🎀CSDN主页 发狂的小花
🌄人生秘诀:学习的本质就是极致重复!

目录

啰嗦开场白

1.知乎上排名最高的解释

2.卷积的另外解释

3.卷积的数学定义

4.卷积的应用

5.补充

6.另外一个关于卷积的有意思的解释


啰嗦开场白

读本科期间,信号与系统里面经常讲到卷积(convolution),自动控制原理里面也会经常有提到卷积。硕士期间又学了线性系统理论与数字信号处理,里面也是各种大把大把卷积的概念。至于最近大火的深度学习,更有专门的卷积神经网络(Convolutional Neural Network, CNN),在图像领域取得了非常好的实际效果,已经把传统的图像处理的方法快干趴下了。啰啰嗦嗦说了这么多卷积,惭愧的是,好像一直以来对卷积的物理意义并不是那么清晰。一是上学时候只是简单考试,没有仔细思考过具体前后的来龙去脉。二是本身天资比较愚钝,理解能力没有到位。三则工作以后也没有做过强相关的工作,没有机会得以加深理解。趁着年前稍微有点时间,查阅了一些相关资料,力争将卷积的前世今生能搞明白。

1.知乎上排名最高的解释

首先选取知乎上对卷积物理意义解答排名最靠前的回答。 
不推荐用“反转/翻转/反褶/对称”等解释卷积。好好的信号为什么要翻转?导致学生难以理解卷积的物理意义。 
这个其实非常简单的概念,国内的大多数教材却没有讲透。

直接看图,不信看不懂。以离散信号为例,连续信号同理。

已知x[0] = a, x[1] = b, x[2]=c 
这里写图片描述

已知y[0] = i, y[1] = j, y[2]=k 
这里写图片描述

下面通过演示求x[n] * y[n]的过程,揭示卷积的物理意义。

第一步,x[n]乘以y[0]并平移到位置0: 
这里写图片描述

第二步,x[n]乘以y[1]并平移到位置1 
这里写图片描述

第三步,x[n]乘以y[2]并平移到位置2: 
这里写图片描述

最后,把上面三个图叠加,就得到了x[n] * y[n]: 
这里写图片描述

简单吧?无非是平移(没有反褶!)、叠加。 
从这里,可以看到卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。

重复一遍,这就是卷积的意义:加权叠加。

对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。

通俗的说: 
在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。 
这正是单位响应是如此重要的原因。

在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。 
这正是单位响应是如此重要的原因。

在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。 
这正是单位响应是如此重要的原因。

以上是知乎上排名最高的回答。比较简单易懂。

有个回复也可以参考: 
楼主这种做法和通常教材上的区别在于:书上先反褶再平移,把输入信号当作一个整体,一次算出一个时间点的响应值;而楼主把信号拆开,一次算出一个信号在所有时间的响应值,再把各个信号相加。两者本质上是相同的。

2.卷积的另外解释

卷积表示为y(n)=x(n)∗h(n) 
使用离散数列来理解卷积会更形象一点,我们把y(n)的序列表示成y(0),y(1),y(2),⋯, 这是系统响应出来的信号。 
同理,x(n)的对应时刻的序列为x(0),x(1),x(2),⋯ 
其实我们如果没有学过信号与系统,就常识来讲,系统的响应不仅与当前时刻系统的输入有关,也跟之前若干时刻的输入有关,因为我们可以理解为这是之前时刻的输入信号经过一种过程(这种过程可以是递减,削弱,或其他)对现在时刻系统输出的影响,那么显然,我们计算系统输出时就必须考虑现在时刻的信号输入的响应以及之前若干时刻信号输入的响应之“残留”影响的一个叠加效果。 
假设0时刻系统响应为y(0),若其在1时刻时,此种响应未改变,则1时刻的响应就变成了y(0)+y(1),叫序列的累加和(与序列的和不一样)。但常常系统中不是这样的,因为0时刻的响应不太可能在1时刻仍旧未变化,那么怎么表述这种变化呢,就通过h(t)这个响应函数与x(0)相乘来表述,表述为x(m)×h(m−n),具体表达式不用多管,只要记着有大概这种关系,引入这个函数就能够表述y(0)在1时刻究竟削弱了多少,然后削弱后的值才是y(0)在1时刻的真实值,再通过累加和运算,才得到真实的系统响应。 
再拓展点,某时刻的系统响应往往不一定是由当前时刻和前一时刻这两个响应决定的,也可能是再加上前前时刻,前前前时刻,前前前前时刻,等等,那么怎么约束这个范围呢,就是通过对h(n)这个函数在表达式中变化后的h(m−n)中的m的范围来约束的。即说白了,就是当前时刻的系统响应与多少个之前时刻的响应的“残留影响”有关。 
当考虑这些因素后,就可以描述成一个系统响应了,而这些因素通过一个表达式(卷积)即描述出来不得不说是数学的巧妙和迷人之处了。

3.卷积的数学定义

前面讲了这么多,我们看看教科书上对卷积的数学定义。 
这里写图片描述

4.卷积的应用

用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上对应的点相乘,然后各点的积相加,就得到了该点的卷积值。对图像上的每个点都这样处理。由于大多数模板都是对称的,所以模板不旋转。卷积是一种积分运算,用来求两个曲线重叠区域面积。可以看作加权求和,可以用来消除噪声、特征增强。 
把一个点的像素值用它周围的点的像素值的加权平均代替。 
卷积是一种线性运算,图像处理中常见的mask运算都是卷积,广泛应用于图像滤波。 
卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

5.补充

另外在知乎上看到非常好也非常生动形象的解释,特意复制粘贴过来。(知乎马同学的解释)

从数学上讲,卷积就是一种运算。 
某种运算,能被定义出来,至少有以下特征: 
1.首先是抽象的、符号化的 
2.其次,在生活、科研中,有着广泛的作用

比如加法: 
1.a+b,是抽象的,本身只是一个数学符号 
2.在现实中,有非常多的意义,比如增加、合成、旋转等等

卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。

这里写图片描述

这两个式子有一个共同的特征: 
这里写图片描述

这个特征有什么意义?

只看数学符号,卷积是抽象的,不好理解的,但是,我们可以通过现实中的意义,来习惯卷积这种运算,正如我们小学的时候,学习加减乘除需要各种苹果、糖果来帮助我们习惯一样。

我们来看看现实中,这样的定义有什么意义。

2 离散卷积的例子:丢骰子

我有两枚骰子:

这里写图片描述

把这两枚骰子都抛出去: 
这里写图片描述

求:两枚骰子点数加起来为4的概率是多少? 
这里问题的关键是,两个骰子加起来要等于4,这正是卷积的应用场景。

我们把骰子各个点数出现的概率表示出来: 
这里写图片描述

那么,两枚骰子点数加起来为4的情况有: 
这里写图片描述

这里写图片描述

这里写图片描述

因此,两枚骰子点数加起来为4的概率为: 
f(1)g(3)+f(2)g(2)+f(3)g(1)

符合卷积的定义,把它写成标准的形式就是:

(f∗g)(4)=∑m=13f(4−m)g(m)

3 连续卷积的例子:做馒头

楼下早点铺子生意太好了,供不应求,就买了一台机器,不断的生产馒头。 
假设馒头的生产速度是 f(t) ,那么一天后生产出来的馒头总量为: 
∫240f(t)dt 
馒头生产出来之后,就会慢慢腐败,假设腐败函数为 g(t) ,比如,10个馒头,24小时会腐败: 
10∗g(t) 
想想就知道,第一个小时生产出来的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历23小时的腐败。 
如此,我们可以知道,一天后,馒头总共腐败了: 
∫240f(t)g(24−t)dt 
这就是连续的卷积。

4 图像处理 
4.1 原理

有这么一副图像,可以看到,图像上有很多噪点: 
这里写图片描述

高频信号,就好像平地耸立的山峰: 
这里写图片描述

看起来很显眼。

平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。

平滑后得到: 
这里写图片描述

4.2 计算

卷积可以帮助实现这个平滑算法。

有噪点的原图,可以把它转为一个矩阵: 
这里写图片描述

然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)来平滑图像:

g=⎡⎣⎢⎢191919191919191919⎤⎦⎥⎥

记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。

比如我要平滑a1,1 点,就在矩阵中,取出a1,1点附近的点组成矩阵 f ,和 g 进行卷积计算后,再填回去 
这里写图片描述

要注意一点,为了运用卷积, g 虽然和 f 同维度,但下标有点不一样: 
这里写图片描述

这里写图片描述

写成卷积公式就是:

(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(1−h,1−k)

要求c4,5,一样可以套用上面的卷积公式。

这样相当于实现了 g 这个矩阵在原来图像上的划动(准确来说,下面这幅图把 g 矩阵旋转了180∘ ):

6.另外一个关于卷积的有意思的解释

看了好多关于卷积的答案,看到这个例子才彻底地理解了这个过程~ 
关于卷积的一个血腥的讲解 
比如说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,打在你脸的同一位置(这似乎要求你的脸足够光滑,如果你说你长了很多青春痘,甚至整个脸皮处处连续处处不可导,那难度太大了,我就无话可说了哈哈),你的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了! 
如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了,大家说是不是这个道理呢?我想这个例子已经非常形象了,你对卷积有了更加具体深刻的了解了吗?

参考资料: 
1.如何通俗易懂地解释卷积? - 知乎 
2.卷积的意义-CSDN博客 
3.【分享】转一篇好文——谈谈卷积的物理意义 - 数学 - 小木虫 - 学术 科研 互动社区 
4.为什么输入信号卷积冲激响应就能得到输出信号? - 知乎 
5.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 
6.卷积的本质及物理意义(全面理解卷积)_卷积的物理意义-CSDN博客 
7.https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF%E5%AE%9A%E7%90%86 
8.如何理解傅里叶变换公式? - 知乎 如何理解傅里叶变换公式?

🌈我的分享也就到此结束啦🌈
如果我的分享也能对你有帮助,那就太好了!
若有不足,还请大家多多指正,我们一起学习交流!
📢未来的富豪们:点赞👍→收藏⭐→关注🔍,如果能评论下就太惊喜了!
感谢大家的观看和支持!最后,☺祝愿大家每天有钱赚!!!欢迎关注、关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux操作docker

docker地址 官方地址 centos7安装docker 卸载旧版本docker sudo //在前面表示以管理员权限操作yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine安装docker //安装所需资…

Perforce Helix Core:摄像机内视觉特效(ICVFX)行业首选的版本控制工具

在当今数字娱乐时代,摄像机内视觉特效(ICVFX)和LED墙虚拟制片方法(有时也称为现场虚拟制片),正在被用于创造一些最前沿的媒体作品。然而,实现令人惊叹的虚拟画面不仅需要先进的技术,…

QT TCP传输文件+ui

TCPFile tcp协议传输文件 TCPFile.pro QT core gui networkclientwidget.h #include <QWidget> #include <QTcpSocket> // 通信套接字 #include <QFile>private slots:void on_pushButton_clicked();private:QTcpSocket *tcpSocket;QFile file; /…

九州金榜|导致孩子厌学因素有哪些?家庭教育中要怎样解决?

现在如今孩子出现厌学的情况越来越严重&#xff0c;这也难坏了很多家长&#xff0c;众所周知&#xff0c;当下社会竞争越来越激烈&#xff0c;孩子的压力也越来越大&#xff0c;这也是导致孩子厌学的主要因素。其实家庭因素也是引起孩子厌学情绪产生的重要原因&#xff0c;在家…

通过一篇文章让你了解数据结构和算法的重要性

通过一篇文章让你了解数据结构和算法的重要性 前言一、 什么是数据结构&#xff1f;二、什么是算法&#xff1f;三、数据结构和算法的重要性在校园招聘的笔试中&#xff1a;在校园招聘的面试中&#xff1a;在未来的工作中&#xff1a; 四、如何学好数据结构和算法4.1 死磕代码&…

pom文件写入依赖爆红

pom.xml文件中每次写入依赖后都会爆红&#xff0c;因为单纯引入依赖并没有真正下载依赖包到本地仓库 重载maven项目&#xff0c;检测到没有的依赖后会自动下载依赖包&#xff0c;这时候等待右下角的下载进度条下载完毕即可

swift 长按桌面图标弹出快捷选项

文章目录 一、3D Touch二、主屏交互1. 静态添加2. 动态添加三、监听主屏交互按钮的点击事件四、预览和跳转1. 注册3D touch2. 实现协议3. 在目标控制器复写previewActionItems4. 使用UIContextMenuConfiguration一、3D Touch 3D Touch通过屏幕下方的压力感应器来感知不同的压力…

【InternLM 实战营笔记】基于 InternLM 和 LangChain 搭建MindSpore知识库

InternLM 模型部署 准备环境 拷贝环境 /root/share/install_conda_env_internlm_base.sh InternLM激活环境 conda activate InternLM安装依赖 # 升级pip python -m pip install --upgrade pippip install modelscope1.9.5 pip install transformers4.35.2 pip install str…

PCB Layout完成后,检查注意事项

在PCB Layout完成后&#xff0c;检查注意事项主要包括以下几个方面&#xff1a; 设计规则检查&#xff08;DRC&#xff09;&#xff1a;使用PCB设计软件中的DRC工具&#xff0c;对Layout进行实时检查和发现与预定设计规范不符的设计。这包括元件间距、线宽、线距、过孔大小等是…

继电保护测试仪

武汉凯迪正大继电保护测试仪主要特点 1&#xff0e;满足现场试验要求。本仪器具有标准的四相电压&#xff0c;三相电流输出&#xff0c;既可对传统的各种继电器及保护装置进行试验&#xff0c;也可对现代各种微机保护进行各种试验&#xff0c;特别是对变压器差功保护和备自投装…

一个Web3项目的收官之作,必然是友好的用户界面(Web3项目三实战之四)

正如标题所述,一个对用户体验友好的应用,总是会赢得用户大加赞赏,这是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一个外观优美、用户体验效果佳的的界面,那么,这个应用无疑是个成功的案例。 诚然,Web3项目虽然核心是智能合约攥写,但用户界面也是一个DApp不…

iOS-设置指定边圆角(左上、左下等)

以UILabel举例&#xff0c;效果图如下&#xff1a; 代码如下&#xff1a; //设置左上与右下圆角&#xff08;可自行编辑指定圆角位置&#xff09; UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:_sleepStateLabel.bounds byRoundingCorners:UIRectCornerT…

c# 获取源码路径与当前程序所在路径

获取源码路径 private static string GetFilePath([CallerFilePath] string path null) {return path;}//当程序所在路径string str67 System.Environment.CurrentDirectory;//源码路径 var path GetFilePath();var directory Path.GetDirectoryName(path);参考

微软开源 SBOM 生成工具:sbom-tool下载及使用详解

github地址 GitHub - microsoft/sbom-tool: The SBOM tool is a highly scalable and enterprise ready tool to create SPDX 2.2 compatible SBOMs for any variety of artifacts.The SBOM tool is a highly scalable and enterprise ready tool to create SPDX 2.2 compatib…

中文分词模拟器【华为OD机试-JAVAPythonC++JS】

题目描述 给定一个连续不包含空格字符串&#xff0c;该字符串仅包含英文小写字母及英文文标点符号(逗号、分号、句号)&#xff0c;同时给定词库&#xff0c;对该字符串进行精确分词。 说明&#xff1a; 1.精确分词&#xff1a; 字符串分词后&#xff0c;不会出现重叠。即“ilov…

ywtool network命令

提示:工具下载链接在文章最后 目录 一.network功能介绍二.配置network功能2.1 network_ip配置检查 2.2 network_br配置2.2.1 配置的网桥原先不存在检查2.2.2 配置的网桥已存在-修改网桥IP检查2.2.3 配置的网桥已存在-只添加网卡到网桥里检查 2.3 network_bond配置检查 2.4 netw…

金仕达与 DolphinDB 建立深度合作,共筑 FICC 科技创新新篇章

从“关起门做交易”到“打开门做服务”&#xff0c;国内 FICC 业务正经历从自营到市场化服务的转变&#xff0c;借助数据分析、算法交易等技术的快速发展&#xff0c;交易团队能够更加主动地发现市场需求&#xff0c;为不同客群提供更好的做市业务&#xff0c;FICC 交易电子化已…

基于Python3的数据结构与算法 - 07 归并排序

一、归并 引入 假设现在的列表分两段有序&#xff0c;如何将其合并成为一个有序列表。 这种操作成为一次归并。 归并的思路 分别对两个列表进行遍历&#xff0c;比较两个列表中的最小值&#xff0c;将更小的取出来。取出后一次进行上操作&#xff0c;直到其中一个列表中的元…

web自动化笔记六:弹出框处理

1、弹出框类型&#xff1a; 1)、alert 警告框 2)、confirm 确认框 3)、prompt 提示框 2、弹出框处理方法&#xff08;方法三种弹出框操作都一样&#xff09; 1)、获取弹出框对象&#xff1a; alert driver.switch_to.ale…

笔记72:关于IMU(惯性测量单元)传感器的作用【不涉及公式推导】

一、IMU传感器是什么&#xff1a; 惯性测量单元IMU&#xff08;Inertial Measurement Unit&#xff09;是一种使用【加速度计】和【陀螺仪】来测量【物体三轴姿态角&#xff08;空间姿态&#xff09;】的装置&#xff1b;IMU在坐标系的每个坐标轴上&#xff0c;均安装有1个陀螺…