---
title: "卷积"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/convolution-fundamentals/
type: note
content_role: unspecified
source_reference: "https://www.zhihu.com/question/22298352/answer/637156871"
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/05-游戏图形与运行时/渲染基础/卷积.md"
content_hash: 7e43043211add19d820f9f4b932fe6f3729277ea3e9000403a5913d108ec045b
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 卷积
> 创建时间：2021/2/26 12:20

![assets/卷积__Image.png](/media/ba36f06be375b48dc84c.png)

所谓两个函数的卷积，本质上就是先将一个函数翻转，然后进行滑动叠加。

卷积——翻转，滑动，倍率，叠加。多次滑动得到的一系列叠加值，构成了卷积函数。

叠加——在连续情况下，叠加指的是对两个函数的乘积求 **积分** ，在离散情况下就是 **加权求和**

以信号分析为例，卷积的结果是不仅跟当前时刻输入信号的响应值有关，也跟过去所有时刻输入信号的响应都有关系，考虑了对过去的所有输入的 **效果的累积** 。

在图像处理的中，卷积处理的结果，其实就是把每个 **像素周边** 的，甚至是整个图像的 **像素** 都考虑进来，对当前像素进行某种 **加权处理** 。

![assets/卷积__Image.jpg](/media/3f429fb683fc3e831779.jpg)

![assets/卷积__Image_1.jpg](/media/c94c0080a92184b45115.jpg)

应用：

1\. 信号分析

一个输入信号f(t)，经过一个线性系统（其特征可以用单位冲击响应函数g(t)描述）以后，输出信号应该是什么？实际上通过卷积运算就可以得到输出信号。

2\. 图像处理

输入一幅图像f(x,y)，经过特定设计的卷积核g(x,y)进行卷积处理以后，输出图像将会得到模糊， 消除噪声、边缘强化等各种效果。

* * *

图像处理中的卷积：

计算过程：

![assets/卷积__Image_2.jpg](/media/d1e61bad5abd910b1389.jpg)

对图像的处理函数（如平滑，或者边缘提取），也可以用一个g矩阵来表示，如：

![](https://www.zhihu.com/equation?tex=g%3D%5Cbegin%7Bbmatrix%7D+%26b_%7B-1%2C-1%7D+%26b_%7B-1%2C0%7D+%26b_%7B-1%2C1%7D%5C%5C+%26b_%7B0%2C-1%7D+%26b_%7B0%2C0%7D+%26b_%7B0%2C1%7D+%5C%5C+%26b_%7B1%2C-1%7D+%26b_%7B1%2C0%7D+%26b_%7B1%2C1%7D+%5Cend%7Bbmatrix%7D)

在处理平面空间的问题，已经是二维函数了

![](https://www.zhihu.com/equation?tex=f%28x%2Cy%29%3Da_%7Bx%2Cy%7D+++++)

![](https://www.zhihu.com/equation?tex=g%28x%2Cy%29%3Db_%7Bx%2Cy%7D)

按卷积的定义，二维离散形式的卷积公式应该是：

![](https://www.zhihu.com/equation?tex=%28f+%2A+g%29%28u%2C+v%29%3D%5Csum_%7Bi%7D+%5Csum_%7Bj%7D+f%28i%2C+j%29g%28u-i%2C+v-j%29%3D%5Csum_%7Bi%7D+%5Csum_%7Bj%7D+a_%7Bi%2Cj%7D+b_%7Bu-i%2Cv-j%7D+)

从卷积定义来看，应该是在x和y两个方向去累加（对应上面离散公式中的i和j两个下标），而且是无界的，从负无穷到正无穷。可是，真实世界都是有界的。

对于像素点(u,v)处求卷积，计算如下所示：

![assets/卷积__Image_3.jpg](/media/4d28064ef021c46ddf7c.jpg)

只把坐标（u,v）附近的点选择出来做计算。点(i,j)只能是黄色方框附近的点。

首先我们在原始图像矩阵中取出（u,v）处的矩阵：

![](https://www.zhihu.com/equation?tex=f%3D%5Cbegin%7Bbmatrix%7D+%26a_%7Bu-1%2Cv-1%7D+%26a_%7Bu-1%2Cv%7D+%26a_%7Bu-1%2Cv%2B1%7D%5C%5C+%26a_%7Bu%2Cv-1%7D+%26a_%7Bu%2Cv%7D+%26a_%7Bu%2Cv%2B1%7D+%5C%5C+%26a_%7Bu%2B1%2Cv-1%7D+%26a_%7Bu%2B1%2Cv%7D+%26a_%7Bu%2B1%2Cv%2B1%7D+%5Cend%7Bbmatrix%7D)

然后将图像处理矩阵翻转（这个翻转有点意思，可以有几种不同的理解，其效果是等效的：（1）先沿x轴翻转，再沿y轴翻转；（2）先沿x轴翻转，再沿y轴翻转；）

![](https://www.zhihu.com/equation?tex=g%5E%7B%27%7D%3D%5Cbegin%7Bbmatrix%7D+%26b_%7B1%2C1%7D+%26b_%7B1%2C0%7D+%26b_%7B1%2C-1%7D%5C%5C+%26b_%7B0%2C1%7D+%26b_%7B0%2C0%7D+%26b_%7B0%2C-1%7D+%5C%5C+%26b_%7B-1%2C1%7D+%26b_%7B-1%2C0%7D+%26b_%7B-1%2C-1%7D+%5Cend%7Bbmatrix%7D)

计算卷积时，就可以用
![](https://www.zhihu.com/equation?tex=f)
 和
![](https://www.zhihu.com/equation?tex=g%5E%7B%27%7D)
 的内积：

![](https://www.zhihu.com/equation?tex=f%2Ag%28u%2Cv%29%3Da_%7Bu-1%2Cv-1%7D+%5Ctimes+b_%7B1%2C1%7D+%2B+a_%7Bu-1%2Cv%7D+%5Ctimes+b_%7B1%2C0%7D+%2Ba_%7Bu-1%2Cv%2B1%7D+%5Ctimes+b_%7B1%2C-1%7D+)

![](https://www.zhihu.com/equation?tex=+%2B+a_%7Bu%2Cv-1%7D+%5Ctimes+b_%7B0%2C1%7D+%2B+a_%7Bu%2Cv%7D+%5Ctimes+b_%7B0%2C0%7D+%2B+a_%7Bu%2Cv%2B1%7D+%5Ctimes+b_%7B0%2C-1%7D)

![](https://www.zhihu.com/equation?tex=+%2B+a_%7Bu%2B1%2Cv-1%7D+%5Ctimes+b_%7B-1%2C1%7D+%2B+a_%7Bu%2B1%2Cv%7D+%5Ctimes+b_%7B-1%2C0%7D+%2B+a_%7Bu%2B1%2Cv%2B1%7D+%5Ctimes+b_%7B-1%2C-1%7D)

意义:

做乘法的两个对应变量a,b的下标之和都是（u,v），其目的是对这种加权求和进行一种约束。这也是为什么要将矩阵g进行翻转的原因。

以上矩阵下标之所以那么写，并且进行了翻转，是为了让大家更清楚地看到跟卷积的关系。这样做的好处是便于推广，也便于理解其物理意义。实际在计算的时候，都是用翻转以后的矩阵，直接求矩阵内积就可以了。

以上计算的是（u,v）处的卷积，延x轴或者y轴滑动，就可以求出图像中各个位置的卷积，其输出结果是处理以后的图像（即经过平滑、边缘提取等各种处理的图像）。

我的理解:

图像处理中，使用卷积，实质上是使用一个矩阵，表示像素点周围各个像素点的权值，对范围内的像素值做加权求平均。 把原始图像中的相邻像素都考虑进来，进行混合。相邻的区域范围取决于g矩阵的维度，维度越大，涉及的周边像素越多。

而矩阵的设计，则决定了这种混合输出的图像跟原始图像比，究竟是模糊了，还是更锐利了。

比如说，如下图像处理矩阵将使得图像变得更为平滑，显得更模糊，因为它联合周边像素进行了平均处理：

![](https://www.zhihu.com/equation?tex=g%3D%5Cbegin%7Bbmatrix%7D+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D%5C%5C+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D+%5C%5C+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D+%26%5Cfrac%7B1%7D%7B9%7D+%5Cend%7Bbmatrix%7D)

而如下图像处理矩阵将使得像素值变化明显的地方更为明显，强化边缘，而变化平缓的地方没有影响，达到提取边缘的目的：

![](https://www.zhihu.com/equation?tex=g%3D%5Cbegin%7Bbmatrix%7D+%26-1+%26-1+%26-1%5C%5C+%26-1+%269+%26-1+%5C%5C+%26-1+%26-1+%26-1+%5Cend%7Bbmatrix%7D)

而高斯模糊，实质上就是使用高斯公式计算像素及周围像素在一次计算中的权值：

![assets/卷积__Image_1.png](/media/57601e6b0db76ba66093.png)

![assets/卷积__Image_2.png](/media/7a8fa50f14504d806ee1.png)

那么，理解了卷积的概念，知道卷积在图像处理当中如何应用之后，随后遇到相应的图像处理问题时，只需明确使用的处理矩阵即可。

## 卷积

图像处理中认为，灰度值变化剧烈的地方就是边缘。

sobel算子的原理，对传进来的图像像素做卷积，卷积的实质是在求梯度值，或者说给了一个加权平均。 然后对生成的新像素灰度值做阈值运算，以此来确定边缘信息。

若Gx是对原图x方向上的卷积，Gy是对原图y方向上的卷积；

![assets/卷积__Image_3.png](/media/0ee4a4733c4b3f66afca.png)

![assets/卷积__Image_4.png](/media/87f84428a5f4b8bd3866.png)

得到像素点新的像素值之后，给定一个阈值就可以得到sobel算子计算出的图像边缘了。

通常，为了消除噪声对sobel算子的影响，会增加一个预处理的操作，主要是做[平滑处理](http://baike.baidu.com/link?url=g06r_35hjXs9yBc5l2j2FqPXhV-mxISdob7mLLFp2ouoybihhZLX966czvtISMrf9mLgIA9N7-1i7oX1MN9QYIjX3oGbzVKWzuHXLddaOdsQw0wb1P6hBXTXV3vHUQWJ)降低噪声的影响。

<https://www.cnblogs.com/sophia-hxw/p/6088035.html>

<https://www.zhihu.com/question/22298352/answer/637156871>
