如何使用一维卷积完成二维卷积?
How to accomplish 2D convolution using 1D convolution?
假设,
u = [1 2 1 3 ; 1 2 1 3 ; 1 2 1 3];
v = [2 0 1 ; 2 0 1 ; 2 0 1];
我想达到
w = conv2(u, v); % [2 4 3 8 1 3 ; 4 8 6 16 2 6 ; 6 12 9 24 3 9 ; 4 8 6 16 2 6 ; 2 4 3 8 1 3]
而且,假设我不想使用 conv2()
。
使用 Matlab,我发现,
w1 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
w2 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
w3 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
所以,我们得到:
w123 = [w1 ; w2 ; w3] % [2 4 3 8 1 3 ; 2 4 3 8 1 3 ; 2 4 3 8 1 3];
使用Matlab,我还发现,
x = [2 ; 2 ; 2]
y = [1 ; 1 ; 1]
z = conv(x, y); % [2 ; 4 ; 6 ; 4 ; 2];
x = [4 ; 4 ; 4]
y = [1 ; 1 ; 1]
z = conv(x, y); % [4 ; 8 ; 12 ; 8 ; 4];
x = [3 ; 3 ; 3]
y = [1 ; 1 ; 1]
z = conv(x, y); % [3 ; 6 ; 9 ; 6 ; 3];
x = [8 ; 8 ; 8]
y = [1 ; 1 ; 1]
z = conv(x, y); % [8 ; 16 ; 24 ; 16 ; 8];
x = [1 ; 1 ; 1]
y = [1 ; 1 ; 1]
z = conv(x, y); % [1 ; 2 ; 3 ; 2 ; 1];
x = [3 ; 3 ; 3]
y = [1 ; 1 ; 1]
z = conv(x, y); % [3 ; 6 ; 9 ; 6 ; 3];
这意味着,如果我们用核 [2 0 1]
对 u
的每一行执行一维卷积,然后用核 [1; 1; 1]
对每一列应用一维卷积,我们得到:
2 4 3 8 1 3
4 8 6 16 2 6
6 12 9 24 3 9
4 8 6 16 2 6
2 4 3 8 1 3
所以,我的问题是,这个 [1 ; 1 ; 1]
来自哪里?
而且,最重要的是,如果行不相同会发生什么情况?
假设,
u = [1 2 1 3 ; 1 2 1 3 ; 1 2 1 3];
v = [2 0 1 ; 2 0 1 ; 2 0 1];
我想达到
w = conv2(u, v); % [2 4 3 8 1 3 ; 4 8 6 16 2 6 ; 6 12 9 24 3 9 ; 4 8 6 16 2 6 ; 2 4 3 8 1 3]
而且,假设我不想使用 conv2()
。
使用 Matlab,我发现,
w1 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
w2 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
w3 = conv([1 2 1 3], [2 0 1]) % [2 4 3 8 1 3]
所以,我们得到:
w123 = [w1 ; w2 ; w3] % [2 4 3 8 1 3 ; 2 4 3 8 1 3 ; 2 4 3 8 1 3];
使用Matlab,我还发现,
x = [2 ; 2 ; 2]
y = [1 ; 1 ; 1]
z = conv(x, y); % [2 ; 4 ; 6 ; 4 ; 2];
x = [4 ; 4 ; 4]
y = [1 ; 1 ; 1]
z = conv(x, y); % [4 ; 8 ; 12 ; 8 ; 4];
x = [3 ; 3 ; 3]
y = [1 ; 1 ; 1]
z = conv(x, y); % [3 ; 6 ; 9 ; 6 ; 3];
x = [8 ; 8 ; 8]
y = [1 ; 1 ; 1]
z = conv(x, y); % [8 ; 16 ; 24 ; 16 ; 8];
x = [1 ; 1 ; 1]
y = [1 ; 1 ; 1]
z = conv(x, y); % [1 ; 2 ; 3 ; 2 ; 1];
x = [3 ; 3 ; 3]
y = [1 ; 1 ; 1]
z = conv(x, y); % [3 ; 6 ; 9 ; 6 ; 3];
这意味着,如果我们用核 [2 0 1]
对 u
的每一行执行一维卷积,然后用核 [1; 1; 1]
对每一列应用一维卷积,我们得到:
2 4 3 8 1 3
4 8 6 16 2 6
6 12 9 24 3 9
4 8 6 16 2 6
2 4 3 8 1 3
所以,我的问题是,这个 [1 ; 1 ; 1]
来自哪里?
而且,最重要的是,如果行不相同会发生什么情况?