猿问

如何使用 scipy 对图像进行卷积

scipy.signal.convolve和 和有scipy.ndimage.convolve什么区别?区别:signalvsndimage


我做了一个实验,用一个过滤器对一个图像进行卷积,但有两个不同的函数。这导致了两个完全不同的图像。怎么会这样?


那是我的过滤器:


B = np.full((3,3), -1)

B[1][1] = 8

这是我的结果:

http://img3.mukewang.com/6130c54900011c3119310664.jpg

还有一件事:为什么scipy.ndimage.convolve工作比 快得多scipy.signal.convolve

http://img1.mukewang.com/6130c5690001176712730357.jpg

另一个问题:scipy.signal.convolvescipy.signal.convolve2d? 有什么不同?


潇湘沐
浏览 332回答 1
1回答

陪伴而非守候

主要区别似乎来自如何根据参数确定输出的 dtype。从您发布的代码中,我怀疑您的图像是 dtypeuint8而内核是int.import numpy as npfrom scipy import signal, ndimagefrom scipy.misc import facebw = face()[..., 0]filter = np.full((3, 3), -1)filter[1, 1] = 8bw.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算术溢出。
随时随地看视频慕课网APP

相关分类

Python
我要回答