【发布时间】:2016-06-03 09:41:52
【问题描述】:
我想在 Matlab 中使用 conv2 函数对两个网格进行卷积。我了解如何做到这一点以及结果输出的大小。但我有点不确定,至于如何理解输出。
说,我的形象是
A = [1 1 1; 1 2 1; 2 3 4],过滤器为B = [1 0 0; 0 0 1; 0 1 0]。
卷积的输出是
C = conv2(A, B)
C =
1 1 1 0 0
1 2 2 1 1
2 4 6 3 1
0 1 4 4 4
0 2 3 4 0
我了解我们如何获得此输出以及所涉及的计算。但我的问题是 - 这是整个输出。我可以将 'same' 选项与 conv2 一起使用,并获得与图像相同大小的矩阵。
但是,我的输出没有以某种方式转移吗?我在几个地方读过它,他们说输出向下移动 1。我不明白以什么方式和哪个方向。我应该从 2(第 2 行,第 2 列)开始读取输出吗?
谁能帮助我,让我知道从哪里开始读取输出,以便我获得与过滤器卷积的图像相同大小的输出?使用'same' 选项会给出我正在寻找的结果,还是我必须对输出进行进一步处理才能获得卷积图像?
我尝试在所有方面进行零填充 - 但仍然无法理解输出。
【问题讨论】:
-
不,不是。如果你想要严格的卷积,你必须选择
C(1+d:end-d, 1+d:end-d)和d = floor(size(B,1)/2)。它给出与使用con2(A,B. 'same')相同的结果。 -
严格卷积是什么意思?
-
尺寸严格。你明白为什么输出的大小会改变吗?
-
我明白,它是如何变化的。即: if [Xa,Ya] = size(A); [Xb,Yb] = 大小(B),然后 Xc = max(Xa+Xb-1,Xa,Xb) 和 Yc = max(Ya+Yb-1, Ya, Yb)。这是由于循环旋转过滤器,使得过滤器的中心元素位于输入图像元素的顶部并将其相加。这就是你问的“为什么”吗?不过我想不出任何其他原因。
-
@zeeMonkeez,数据的修改是怎么回事?您刚刚添加了一个随机的最后一行...
标签: matlab math matrix signal-processing convolution