理解卷积 Convolution

http://www.qiujiawei.com/convolution/


数学中的卷积

卷积的wiki:Convolution。

卷积和(convolution sum)的公式是:

y(t)=x(t)h(t)=τ=x(τ)h(tτ) y(t)=x(t)∗h(t)=∑τ=−∞∞x(τ)h(t−τ)

写成积分形式是:

x(t)h(t)=x(τ)h(tτ)dτ=x(tτ)h(τ)dτ x(t)∗h(t)=∫−∞∞x(τ)h(t−τ)dτ=∫−∞∞x(t−τ)h(τ)dτ

要理解这个东西,比较难,一种是公式推导,不过是从傅里叶变换得到的;一种是用狄拉克δ函数来辅助理解(我自认为的);最后一种是通过线性时不变系统理论LTI system theory。

先讲第一种吧。

第一种思路:傅里叶变换与卷积

首先要搬出傅里叶变换的一个推论:

F[αf(t)+βg(t)]=αF(s)+βG(s) F[αf(t)+βg(t)]=αF(s)+βG(s)

这个公式意思是,一个时域下的复杂信号函数可以分解成多个简单信号函数的和,然后对各个子信号函数做傅里叶变换并再次求和,就求出了原信号的傅里叶变换。这个事实显然很有用处。

但除了加法之外,还有乘法。这时候有一个问题:是否存在某种新的f(t)和g(t)的结合方式,使得f(t)和g(t)结合后的函数的傅里叶变换结果是F(s)G(s)?

要求这个问题的解,要用倒推法。

首先,设有信号函数f(x)和g(t)(注意,x、t都是指横轴变量,只是用来区分开f和g),G(s)、F(s)分别是f(x)和g(t)的傅里叶变换,于是有:

G(s)F(s)=e2πistg(t)dte2πisxf(x)dx G(s)F(s)=∫−∞∞e−2πistg(t)dt∫−∞∞e−2πisxf(x)dx

接着做一些变换:

e2πistg(t)dte2πisxf(x)dx=e2πiste2πisxg(t)f(x)dtdx ∫−∞∞e−2πistg(t)dt∫−∞∞e−2πisxf(x)dx=∫−∞∞∫−∞∞e−2πiste−2πisxg(t)f(x)dtdx
=e2πis(t+x)g(t)f(x)dtdx =∫−∞∞∫−∞∞e−2πis(t+x)g(t)f(x)dtdx
=(e2πis(t+x)g(t)dt)f(x)dx =∫−∞∞(∫−∞∞e−2πis(t+x)g(t)dt)f(x)dx

现在设u = t + x,所以t = u - x,du = dt(这是把x看做常数项了)。则有:

(e2πis(t+x)g(t)dt)f(x)dx=(e2πisug(ux)du)f(x)dx ∫−∞∞(∫−∞∞e−2πis(t+x)g(t)dt)f(x)dx=∫−∞∞(∫−∞∞e−2πisug(u−x)du)f(x)dx

接着调整下积分顺序:

(e2πisug(ux)du)f(x)dx=e2πisug(ux)f(x)dudx ∫−∞∞(∫−∞∞e−2πisug(u−x)du)f(x)dx=∫−∞∞∫−∞∞e−2πisug(u−x)f(x)dudx
=e2πisug(ux)f(x)dxdu =∫−∞∞∫−∞∞e−2πisug(u−x)f(x)dxdu
=e2πisu(g(ux)f(x)dx)du =∫−∞∞e−2πisu(∫−∞∞g(u−x)f(x)dx)du

括号内那个积分是一个关于u的函数,所以可以设成h(u):

h(u)=g(ux)f(x)dx h(u)=∫−∞∞g(u−x)f(x)dx

于是上面的式子就变成:

e2πisu(g(ux)f(x)dx)du=e2πisuh(u)du=F[h(s)]=H(s) ∫−∞∞e−2πisu(∫−∞∞g(u−x)f(x)dx)du=∫−∞∞e−2πisuh(u)du=F[h(s)]=H(s)

这个结论,可以简化成:

H(s)=G(s)F(s) H(s)=G(s)F(s)

再来看下h(u)。如果把h(u)的u换成t(这是可以的,只是一个符号而已),就有:

h(t)=g(tx)f(x)dx h(t)=∫−∞∞g(t−x)f(x)dx

2个终极公式都出来了。

最后,我们还要定义一个特殊的二元运算符号 来替代h(t)(也叫卷积运算符,注意,这个不是乘法的乘号哦):

h(t)=(gf)(t)=g(tx)f(x)dx h(t)=(g∗f)(t)=∫−∞∞g(t−x)f(x)dx

于是有:

H(s)=G(s)F(s) H(s)=G(s)F(s)
F[h(t)]=F[g(s)]F[f(s)] F[h(t)]=F[g(s)]F[f(s)]
F[(gf)(s)]=F[g(s)]F[f(s)] F[(g∗f)(s)]=F[g(s)]F[f(s)]

最后的公式,也被叫做卷积定理(Convolution Theorem)。

这个定理说明,信号f和信号g的卷积的傅里叶变换,等于f、g各自的傅里叶变换的积。

第二种思路:狄拉克δ函数与卷积

第二种思路的关键在于狄拉克δ函数

狄拉克δ函数 dirac delta function

狄拉克δ函数的wiki:dirac delta function。

狄拉克δ函数在坐标系上的长相:

理解卷积 Convolution_第1张图片

理解卷积 Convolution_第2张图片

(图片来自wiki)

信号处理科学中狄拉克δ函数被称为单位脉冲信号(unit impulse symbol)。上面这个图也很形象地说明了这一点。

狄拉克δ函数有这样的性质:

delta(t)={+,t=00,t0 delta(t)={+∞,t=00,t≠0

δ(t)dt=1 ∫−∞∞δ(t)dt=1

狄拉克δ函数在t等于0时值为正无穷,t不等于0时则为0,且在整个定义域的积分等于1。

狄拉克δ函数与卷积

考虑卷积公式的一个特殊情况:当h(t)是狄拉克δ函数时。现在试一下把h(t)代入卷积公式,得到:

x(t)h(t)=x(t)δ(t)=x(τ)δ(tτ)dτ=x(t) x(t)∗h(t)=x(t)∗δ(t)=∫−∞∞x(τ)δ(t−τ)dτ=x(t)

(最后一步跳跃得比较厉害,后文会有说明)

这个结果说明,x(t)和狄拉克δ函数卷积的结果还是x(t),为什么会这样呢?

再看下前面给出的卷积和标准公式:

y(t)=x(t)h(t)=τ=x(τ)h(tτ) y(t)=x(t)∗h(t)=∑τ=−∞∞x(τ)h(t−τ)

把其中的 h(tτ) h(t−τ)换成 δ(tτ) δ(t−τ),那么里面的 tτ t−τ,其实就是让那个脉冲信号在横轴上移动(偏移) τ τ距离。根据狄拉克δ函数的定义,可以知道,当 t=τ t=τ时, x(τ)h(tτ) x(τ)h(t−τ)才非0,且等于 x(τ) x(τ)。所以卷积和也就等于 x(τ) x(τ)。(这也算是上面的公式的证明吧)

将这个特殊情况一般化,即不限制h = δ时,就是所谓的卷积公式了。

第三种思路:线性时不变系统·理论 LTI system theory

这个还没搞懂,搞懂了再来填坑

二维卷积以及图像中的卷积

上面讨论的仅仅是一维的卷积。幸运的是,高维卷积可以简单地根据一维卷积得到,比如说二维的卷积:

f(x,y)g(x,y)=xyf(x,y)g(xx,yy) f(x,y)∗g(x,y)=∑x′∑y′f(x′,y′)g(x−x′,y−y′)

积分形式是:

(fg)(x,y)=f(x,y)g(xx,yy)dxdy (f∗g)(x,y)=∫∫f(x′,y′)g(x−x′,y−y′)dx′dy′

如果给定一个范围r,则有:

f(x,y)g(x,y)=x=rx=ry=ry=rf(x,y)g(xx,yy) f(x,y)∗g(x,y)=∑x′=−rx′=r∑y′=−ry′=rf(x′,y′)g(x−x′,y−y′)

现在想象一下,把一幅图片(位图)当做是一个函数:

f(x,y)=RGB value f(x,y)=RGB value

先让自己对这个式子有一个几何空间上的想象:带有2个变量的函数,它的几何表示是三维的,三个坐标轴分别是:x、y、f(x,y),所以f(x,y)表示的是三维空间里的一个连续表面(surface)。

然后,我们再来回顾下线性代数——矩阵。假设我们有一个128X128的bmp图像,可以用一个矩阵A(应该说是方阵)来表示它,A的每一个元素是一个rgb值。 有了这个图像->矩阵的转换关系后,我们就可以用线性代数的知识对这个图像做处理。

比如说,我们用矩阵乘法吧。假设有另一个和A同阶的方阵S,很显然,下面的等式成立:

AS=A AS=A′

这个式子意味着,图像处理可以抽象成矩阵的线性运算。比如当S是单位矩阵I时,显然有 AI=A AI=A,即A保持不变,什么都没做。

好了,明确了图像可以用线性代数的方法来加工处理后,要理解图像卷积就简单了。

上面说的‘转换’方阵S,是和A同阶的方阵。这个‘同阶’性质,是不是必要的?其实不是。只要你有办法使得A变成A',就可以了。中间的S,代表的是一个转换过程。

卷积转换,是一个特殊的转换,首先,它有一个叫做窗口的东西(或者叫卷积子),一般情况下这个窗口是一个比A的阶数小得多的方阵。

如果拿这个小方阵R去和A的局部区域做线性变换(更具体地说,是点积运算),则有:

Ax,y,w,hRw,h=x=xw/2x=x+w/2y=yh/2y=y+h/2A[x,y]R[xx,yy]=new RGB value Ax,y,w,h⋅Rw,h=∑x′=x−w/2x′=x+w/2∑y′=y−h/2y′=y+h/2A[x′,y′]R[x′−x,y′−y]=new RGB value

把得到的这个RGB值赋给A[x,y],就有:

A[x,y]R=A[x,y] A[x,y]R=A′[x,y]

简单地说就是,A[x,y]的值被R刷新了。如果对整幅图像的每一个像素都和R做一次点积运算,整幅图像就被刷新了。

这就是图像的卷积变换的本质。

找到的相关资料

The Convolution Sum for Discrete-Time LTI Systems. Andrew W. H. House

Written on October 18, 2015

你可能感兴趣的:(图形图像)