Die*_*ano 5 math matlab signal-processing image-processing convolution
我得到了下面的矩阵:
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
Run Code Online (Sandbox Code Playgroud)
和内核:
-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);
Run Code Online (Sandbox Code Playgroud)
Result: 0-15.5916i
由于某种原因,使用卷积,虚构的符号是正的.为什么?
我认为卷积通常是通过"翻转"内核(左 - 右,上 - 下)然后在矩阵中滑动来执行乘法的总和来执行的.
换句话说,matlab实际上是在计算:
a = matrix(1,1) * kernel(3);
a = a + matrix(1,2) * kernel(2);
a = a + matrix(1,3) * kernel(1);
Run Code Online (Sandbox Code Playgroud)
在卷积过程中,内核被翻转.所以你必须在支票上翻转它; 也就是说,交换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
Run Code Online (Sandbox Code Playgroud)
这符合卷积的结果:
>> A = conv2(matrix,kernel,'valid');
>> A(1,1)
ans =
27.0000 +15.5916i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |