【问题标题】:Convolution in Matlab hands onMatlab中的卷积动手
【发布时间】:2015-01-27 08:27:29
【问题描述】:

我得到了下面的矩阵:

 9 18 27 36 45
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0

和内核:

-0.5+0.8662i 1 -0.5-0.8662i

我正在尝试使用有效模式执行卷积:

ans = conv2(matrix,kernel,'valid');

matlab 返回:

0.0000+15.5916i 0.0000+15.5916i 0.0000+15.5916i

我的问题是如何获得与 matlab 相同的结果。我尝试在matlab中做第一点,但是结果不一样。

a =     matrix(1,1) * kernel(1);
a = a + matrix(1,2) * kernel(2);
a = a + matrix(1,3) * kernel(3);

Result: 0-15.5916i

由于某种原因,使用卷积的虚数符号为正。为什么?

【问题讨论】:

    标签: matlab math image-processing signal-processing convolution


    【解决方案1】:

    我相信卷积通常是通过“翻转”内核(左右、上下)然后在矩阵上滑动以执行乘法和来执行的。

    换句话说,matlab实际计算的是:

    a =     matrix(1,1) * kernel(3);
    a = a + matrix(1,2) * kernel(2);
    a = a + matrix(1,3) * kernel(1);
    

    【讨论】:

      【解决方案2】:

      在卷积过程中,内核被翻转。因此,您也必须在支票上翻转它;即交换kernel(1)kernel(3),如下:

      >> a =     matrix(1,1) * kernel(3);
      >> a = a + matrix(1,2) * kernel(2);
      >> a = a + matrix(1,3) * kernel(1)
      a =
        27.0000 +15.5916i
      

      这是按照卷积的结果:

      >> A = conv2(matrix,kernel,'valid');
      >> A(1,1)
      ans =
        27.0000 +15.5916i
      

      【讨论】:

      • 就像eigenchris 说的,你有理由,我忘记翻转了。谢谢
      猜你喜欢
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多