在matlab中卷积两个网格并获得移位输出

在matlab中卷积两个网格并获得移位输出,matlab,math,matrix,signal-processing,convolution,Matlab,Math,Matrix,Signal Processing,Convolution,我想使用conv2函数在Matlab中卷积两个网格。我了解如何做以及结果输出的大小。但对于如何理解输出,我有点不确定 我的形象是 A=[1 1;1 2 1;2 3 4]并且过滤器是B=[1 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

我想使用conv2函数在Matlab中卷积两个网格。我了解如何做以及结果输出的大小。但对于如何理解输出,我有点不确定

我的形象是
A=[1 1;1 2 1;2 3 4]
并且过滤器是
B=[1 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
我理解我们是如何得到这个输出和计算的。但我的问题是——这是全部产出。我可以使用conv2的
'same'
选项,得到与图像大小相同的矩阵

但是,我的输出是否没有发生变化?我在好几个地方读到过,他们说输出下移了1。我不知道以什么方式和方向。我应该从2开始读取输出(第二行,第二列)

有谁能告诉我,从哪里开始读取输出,以便获得与过滤器卷积的图像相同大小的输出?使用
'same'
选项是否给出了我正在寻找的结果,或者我是否必须对输出执行进一步处理以获得卷积图像


我试着在所有边上进行零填充,但仍然无法理解输出

只是为了得到更简单的数值:我将图像和过滤器的值设置如下:

A = [1 1 1; 
     1 1 1; 
     1 1 1]

B = [0 0 0; 
     0 1 0; 
     0 0 0]

C = conv2(A,B)
输出如下

C =

     0     0     0     0     0
     0     1     1     1     0
     0     1     1     1     0
     0     1     1     1     0
     0     0     0     0     0
1值是卷积的结果,0来自零填充。中间的一个是过滤器中所有点的卷积结果(即
conv2(A,B,'valid')
返回的结果)


Matlab答案返回的内容没有问题。如果过滤器的大小为偶数,则有点有趣,但卷积的正确响应是通过valid获得的。

不,不是。如果你想要严格的卷积,你必须选择
C(1+d:end-d,1+d:end-d)
d=floor(大小(B,1)/2)
。它给出的结果与使用con2(A,B.“same”)得到的结果相同。你所说的严格卷积是什么意思?就大小而言是严格的。你知道为什么输出的大小会变化吗?我知道,它是如何变化的。即:如果[Xa,Ya]=大小(A);[Xb,Yb]=大小(B),然后Xc=max(Xa+Xb-1,Xa,Xb)和Yc=max(Ya+Yb-1,Ya,Yb)。这是由于周期性地旋转滤波器,使得滤波器的中心元素位于输入图像元素的顶部并对其求和。这就是你问的“为什么”吗?“不过我想不出任何其他原因了。”泽蒙凯兹,数据的修改是怎么回事?您刚刚添加了一个随机的最后一行。。。