首页 文章

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

提问于
浏览
0

我想使用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 回答

  • 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答案返回的内容没有错 . 如果过滤器的大小是均匀的,那么它会更有趣但是卷积的正确响应是无论如何都是有效的 .

相关问题