在matlab中包含两个网格并获得移位输出

时间:2016-02-22 03:58:28

标签: matlab math matrix signal-processing convolution

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

说,我的形象是 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'选项给出了我正在寻找的结果,或者我是否必须对输出进行进一步处理以获得卷积图像?

我尝试了所有方面的零填充 - 但仍然无法理解输出。

1 个答案:

答案 0 :(得分:0)

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

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值是卷积的结果,零来自零填充。中心的那个是过滤器中所有点的卷积结果(即conv2(A,B, 'valid')返回的结果)。

Matlab答案返回的内容没有错。如果滤波器的大小是偶数,那么它会更有趣,但卷积的正确响应是无论如何都是有效的。