【问题标题】:How to convolve images using scipy如何使用 scipy 对图像进行卷积
【发布时间】:2019-05-03 13:53:09
【问题描述】:

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

我做了一个实验,将 one 图像与 one 过滤器进行卷积,但具有两个不同的功能。这导致了两个完全不同的图像。怎么会这样?

这是我的过滤器:

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

这是我的结果:

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

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

【问题讨论】:

    标签: python image numpy scipy convolution


    【解决方案1】:

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

    根据您发布的代码,我怀疑您的图像是 dtype 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 算术溢出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2020-05-11
      • 2019-09-29
      • 2021-01-31
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多