【问题标题】:Convolving two grids in matlab and getting shifted output在matlab中卷积两个网格并获得移位输出
【发布时间】: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


【解决方案1】:

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

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

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

Matlab 答案返回的内容没有任何问题。如果你的过滤器的大小是偶数,那么它会更有趣,但卷积的正确响应是通过 valid 获得的。

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2019-02-20
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多