scipy.signal.convolve和 和有scipy.ndimage.convolve什么区别?区别:signalvsndimage我做了一个实验,用一个过滤器对一个图像进行卷积,但有两个不同的函数。这导致了两个完全不同的图像。怎么会这样?那是我的过滤器:B = np.full((3,3), -1)B[1][1] = 8这是我的结果:还有一件事:为什么scipy.ndimage.convolve工作比 快得多scipy.signal.convolve?另一个问题:scipy.signal.convolve与scipy.signal.convolve2d? 有什么不同?
1 回答

陪伴而非守候
TA贡献1757条经验 获得超8个赞
主要区别似乎来自如何根据参数确定输出的 dtype。
从您发布的代码中,我怀疑您的图像是 dtypeuint8而内核是int.
import numpy as np
from scipy import signal, ndimage
from scipy.misc import face
bw = face()[..., 0]
filter = np.full((3, 3), -1)
filter[1, 1] = 8
bw.dtype
# dtype('uint8')
filter.dtype
# dtype('int64')
在这种情况下,输出 dtypes 是:
sig = signal.convolve(bw, filter, 'same')
ndi = ndimage.convolve(bw, filter)
sig.dtype
# dtype('int64')
ndi.dtype
# dtype('uint8')
除此之外和不同的边界条件,结果实际上是相同的:
np.all(sig.astype(np.uint8)[1:-1,1:-1] == ndi[1:-1,1:-1])
# True
渲染图像看起来大不相同,大概是因为uint8算术溢出。
添加回答
举报
0/150
提交
取消