为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2021-09-02 20:35:47
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算术溢出。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信