gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:39:29 25 4
gpt4 key购买 nike

scipy.signal.convolve 和 scipy.ndimage.convolve 之间有什么区别?区别:signalndimage

我做了一个实验,将一个图像与一个过滤器进行卷积,但具有两个不同的函数。结果产生了两种完全不同的图像。怎么会发生这种事?

这是我的过滤器:

B = np.full((3,3), -1)
B[1][1] = 8

这是我的结果: enter image description here enter image description here

还有一件事:为什么 scipy.ndimage.convolve 的工作速度比 scipy.signal.convolve 快得多? enter image description here

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

最佳答案

主要区别似乎来自如何根据参数确定输出的数据类型。

根据您发布的代码,我怀疑您的镜像的数据类型为 uint8,而内核为 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')

在这种情况下,输出数据类型是:

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 算术中的溢出。

关于python - 如何使用 scipy 对图像进行卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com