前文(建议阅读)
现在,我们同时扔出两个骰子,考虑点数和为 n n n 的可能性。当然,你可以一个一个的去计算,但问题在于,如果 每个骰子掷出每个点数的概率不相等 ,则不好计算。因此,我们定义了一种方法,即卷积。
考虑两个数组 A A A 和 B B B :
A:1 2 3 4
B:8 7 6 5
现在,我们让 B B B 颠倒过来,放到 A A A 的右下角:
1 2 3 4
5 6 7 8
我们不妨定义此时卷积为 0 0 0 。
现在,我们让 B B B 向右滑动:
1 2 3 4
5 6 7 8
计算它们重合部分两两对应的积之和,在这里是 1 × 8 = 8 1\times8=8 1×8=8 。
现在,让 B B B 再往右滑动:
1 2 3 4
5 6 7 8
现在,它们重合部分的积之和为 1 × 7 + 2 × 8 = 23 1\times7+2\times8=23 1×7+2×8=23 。
再让 B B B 往右滑动:
1 2 3 4
5 6 7 8
此时它们重合部分的积之和为 1 × 6 + 2 × 7 + 3 × 8 = 44 1\times6+2\times7+3\times8=44 1×6+2×7+3×8=44 。
再往右滑动:
1 2 3 4
5 6 7 8
此时它们完全重合,重合部分的积之和为 1 × 5 + 2 × 6 + 3 × 7 + 4 × 8 = 70 1\times5+2\times6+3\times7+4\times8=70 1×5+2×6+3×7+4×8=70 。
还没完,我们继续将其向左滑动,直到两者彻底分离,就像火车错车这样。
1 2 3 4
5 6 7 8
(56)
1 2 3 4
5 6 7 8
(39)
1 2 3 4
5 6 7 8
(20)
1 2 3 4
5 6 7 8
(0)
因此,我们得出它们的卷积为:
A*B:0 8 23 44 70 56 39 20 0
记作 A ∗ B A*B A∗B 。
大致可以得到其图像如下:
你可能觉得这有些太陡了,实际上进行卷积的数组和函数基本的值都在 [ 0 , 1 ] [0,1] [0,1] 之间。
你也可以这样考虑卷积:定义一个表格,其表格中的元素为其所对应的行和列的值之积:
1 2 3 4
8 8 16 24 32
7 7 14 21 28
6 6 12 18 24
5 5 10 15 20
然后,将其每条主对角线上的元素相加,结果为:
A*B:8 23 44 70 56 39 20
可以看到,这样的做法忽略了 0 0 0 ,但是这种算法有很大的优化空间,可以帮助我们计算卷积更加的快速。
现在,我们有两个信号, f ( x ) f(x) f(x) 和 g ( x ) g(x) g(x) ,其中:
f ( x ) = g ( x ) = { 1 , ∣ x ∣ ≤ 1 2 0 , else f(x)=g(x)= \begin{cases} 1,|x|\leq\dfrac12\\ \\ 0,\text{else} \end{cases} f(x)=g(x)=⎩ ⎨ ⎧1,∣x∣≤210,else
现在,将 g ( x ) g(x) g(x) 对称(其实对称后还是一样)划至最左边,随后向右移动,记录 g ( x ) g(x) g(x) 和 f ( x ) f(x) f(x) 重叠的部分:
则它们的卷积为
∫ 0 x f ( x ) ⋅ g ( x − t ) d t = − ∣ x ∣ + 1 \int_{0}^{x}f(x)\cdot g(x-t)dt=-|x|+1 ∫0xf(x)⋅g(x−t)dt=−∣x∣+1
我们已经见识了卷积的定义:
f ( x ) ∗ g ( x ) = ∫ 0 x f ( x ) ⋅ g ( x − t ) d t f(x)*g(x)=\int_{0}^{x}f(x)\cdot g(x-t)dt f(x)∗g(x)=∫0xf(x)⋅g(x−t)dt
现在我们来运用一下,求 x 2 ∗ x x^2*x x2∗x 。
x 2 ∗ x = ∫ 0 x x 2 ⋅ ( x − t ) d t = ∫ 0 x ( x 3 − x 2 t ) d t x^2*x=\int_{0}^{x}x^2\cdot(x-t)dt=\int_{0}^{x}(x^3-x^2t)dt x2∗x=∫0xx2⋅(x−t)dt=∫0x(x3−x2t)dt
视 x x x 为常数,可得原积分为:
∫ ( − C 1 t + C 2 ) d t = − C 1 2 t 2 + C 2 t + C \int(-C_1t+C_2)dt=-\dfrac {C_1}{2}t^2+C_2t+C ∫(−C1t+C2)dt=−2C1t2+C2t+C
令上式为 h ( x ) h(x) h(x) 。
即
x 2 ∗ x = lim p → x h ( p ) − lim q → 0 h ( q ) = − x 5 2 + x 3 x^2*x=\lim_{p\rightarrow x}h(p)-\lim_{q\rightarrow 0}h(q)=-\dfrac{x^5}{2}+x^3 x2∗x=p→xlimh(p)−q→0limh(q)=−2x5+x3
图像如下:
(说实话,有点怪)
卷积也可以用于图像处理。我们来考虑矩阵的卷积。
有两个矩阵, A A A 和 B B B :
A = [ 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 ] A= \left[ \begin{array}{ccc} 0&1&1&0&0\\ 0&1&1&0&0\\ 0&1&1&1&1\\ 0&1&1&1&1\\ 0&0&0&0&0 \end{array} \right] A= 0000011110111100011000110
B = [ 1 0 − 1 1 0 − 1 1 0 − 1 ] B= \left[ \begin{array}{ccc} 1&0&-1\\ 1&0&-1\\ 1&0&-1 \end{array} \right] B= 111000−1−1−1
想象一下,我们将 B B B 作为一个蒙板,将其蒙在 A A A 的某一个位置上面,随后将被 B B B 蒙住的像素(暂且这么叫)乘以对应的权重,将所得的和记载在 A ∗ B A*B A∗B 上面。
这里不再展示详细的过程,我们直接看结果:
A ∗ B = [ − 2 − 2 2 2 0 − 3 − 3 2 2 1 − 3 − 3 1 1 2 − 2 − 2 0 0 2 − 1 − 1 0 0 1 ] A*B= \left[ \begin{array}{ccc} -2&-2&2&2&0\\ -3&-3&2&2&1\\ -3&-3&1&1&2\\ -2&-2&0&0&2\\ -1&-1&0&0&1 \end{array} \right] A∗B= −2−3−3−2−1−2−3−3−2−1221002210001221
可以看见, B B B 筛出了所有竖向的边缘。下面是 B B B 作用在一个更大的图像上的结果:
红色为正,蓝色为负。