我想使用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'
选项给出了我正在寻找的结果,或者我是否必须对输出进行进一步处理以获得卷积图像?
我尝试了所有方面的零填充 - 但仍然无法理解输出。
答案 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答案返回的内容没有错。如果滤波器的大小是偶数,那么它会更有趣,但卷积的正确响应是无论如何都是有效的。