作者there801021 (老衲)
看板Python
标题[问题] convolve2d问题
时间Sun Apr 26 21:45:24 2020
最近在学convolution
使用numpy 跟 scipy来练习一下
但是遇到一个问题
程式码如下:
import numpy as np
from scipy import signal as sig
data = np.array([[0, 88, 0],
[105, 255, 55],
[0, 40, 0]])
G_x = sig.convolve2d(data, np.array([[-1], [0], [1]]), mode='valid')
G_y = sig.convolve2d(data, np.array([[1, 0, -2]]), mode='valid')
执行出来的结果是
G_x is [[ 0 48 0]]
G_y is
[[ 0]
[-155]
[ 0]]
但是,我自己预期是
Gx应该是
[0, 88, 0] [-1]
[105, 255, 55] 跟 [0]
[0, 40, 0] [1]
= [-1x0+0x105+1x0, -1x88+0x255+1x40, -1x0+0x55+1x0]
= [0, -48, 0]
而Gy则是
[0, 88, 0]
[105, 255, 55] 跟 [1, 0, -2]
[0, 40, 0]
[ 1x0 + 0x88 + -2x0 ] [0]
= [ 1x105 + 0x255 + -2x55 ] = [-5]
[ 1x0 + 0x40 + -2x0 ] [0]
不知道是我哪里理解错误了
麻烦各位高手指点一下了
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.251.58.134 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1587908729.A.C35.html
※ 编辑: there801021 (111.251.58.134 台湾), 04/26/2020 21:46:08
1F:→ GeoMeTric: 从结果来看,是用反向序列做运算。 04/26 22:19
2F:推 cuteSquirrel: 留意convolution的定义和计算时的方向性 04/26 22:32
3F:→ cuteSquirrel: 第一组Gx kernel应该排列成 1,0,-1 04/26 22:33
4F:→ cuteSquirrel: 第二组Gy kernel应该排列成 -2, 0, 1 04/26 22:33
5F:推 cuteSquirrel: 可以用纸笔追踪一次二维卷积的例子就知道了 04/26 22:42
7F:→ cuteSquirrel: 定义可参考信号与系统或工程数学的课本 04/26 22:43
8F:→ drysor: 卷积的输入讯号(Gx,Gy)要镜射後,再滑入系统(data)做计算 04/26 23:04
9F:推 cuteSquirrel: 对 04/26 23:05
10F:→ there801021: 感谢各位大大,已经理解了~ 05/11 09:41