我想使用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
我理解我们如何得到这个输出和涉及的计算 . 但我的问题是 - 这是整个输出 . 我可以使用带有conv2的 'same'
选项,并获得与图像相同大小的矩阵 .
但是,我的输出是不是以某种方式改变了?我在几个地方读到它,他们说输出向下移动了1.我不知道以什么方式和方向 . 我应该在2(第2行,第2列)开始读取输出吗?
任何人都可以通过让我知道,从何处开始读取输出来帮助我,以便获得与过滤器卷积的图像相同大小的输出?使用 'same'
选项是否给出了我正在寻找的结果,或者我是否必须对输出进行进一步处理以获得卷积图像?
我尝试了所有方面的零填充 - 但仍然无法理解输出 .
1 回答
只是为了得到更简单的数值:我设置图像的值并过滤如下:
输出如下
1值是卷积的结果,零来自零填充 . 中心的那个是来自过滤器的所有点的卷积结果(即
conv2(A,B, 'valid')
返回的结果) .Matlab答案返回的内容没有错 . 如果过滤器的大小是均匀的,那么它会更有趣但是卷积的正确响应是无论如何都是有效的 .