在matlab中卷积两个网格并获得移位输出
我想使用conv2函数在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
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)。这是由于周期性地旋转滤波器,使得滤波器的中心元素位于输入图像元素的顶部并对其求和。这就是你问的“为什么”吗?“不过我想不出任何其他原因了。”泽蒙凯兹,数据的修改是怎么回事?您刚刚添加了一个随机的最后一行。。。