原文地址:http://www.songho.ca/dsp/convolution/convolution2d_separable.html
二维卷积的定义
卷积的交换性
(x[n] * y[n] = y[n] * x[n]) 所以
假如
h[m, n] 可分离成 (M×1) 和 (1×N);
h[m,n]=h1[m]
⊗h2[n] 原文为克罗内克积(物理上的直积)符号为⊗,避免与乘积相混
替换
h[m, n] 则
一维卷积定义:
因此二维卷积可以分割为两个一维卷积分别在水平和垂直方向
先行卷积再列卷积与先列卷积在行卷积,最终结果是一样的,顺便提一下这与二维傅里叶变换和二维小波变换是相似的,都可以把二维计算分割为先行计算再列计算。(后半句译者注)
Example
分割卷积法与通用的卷积法的比较
Input
Separable Kernel
i) 通用卷积法 2D
ii) 用分割卷积法2D
首先,计算垂直1D卷积,n=1,行m=0,1,2;
然后计算水平卷积m=1
个人理解:例如[1,2,3] [1]
第一步行卷积 [4,5,6] * [2]= [1,2,3]*[1]+[4,5,6]*[2]+[7,8,9]*[1]=[1+8+7,2+10+8,3+12+9]=[16,20,24]
[7,8,9] [3]
第二步列卷积 [16,20,24]*[1,2,1]=[16]*[1]+[20]*[2]+[24]*[1]=80
如果先列卷积 [1,2,3] [1] [2] [3] [8]
[4,5,6]*[1,2,1]=[4]*[1]+[5]*[2]+[6]*[1]=[20]
[7,8,9] [7] [8] [9] [32]
在行卷积 [8] [1]
[20]*[2]=8+40+32=80
[32] [1]