gpt4 book ai didi

python - np.outer 如何帮助创建过滤器内核?

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:38 24 4
gpt4 key购买 nike

我正在尝试 filter2D使用我自己的内核与 OpenCV 一起运行:

kernel = np.array([1,3,4,5,2]) / 11

cv2.filter2D(img, -1, kernel)

而且效果很好。我还看到了一个片段,其中完成了同样的事情,如下所示:

kernel = np.array([1,3,4,5,2]) / 11
kernel = np.outer(kernel, kernel)

cv2.filter2D(img, -1, kernel)

我不确定第二种方法有什么作用?这里到底发生了什么?

最佳答案

非常简单,您的第一个内核是一维的,np.outer 创建一个二维内核。

更详细地说:(我没有开放式简历,我使用的是 scipy/PIL,但这本质上应该是等价的。)

>>> import numpy as np                                                                
>>> from scipy import misc, ndimage
>>>
# get example image, decimate it a bit
>>> f = misc.face()[::4,::4]
>>>
# create a simple 1D kernel (a triangle)
>>> kernel = 16 - np.abs(np.arange(-15, 16))
>>> kernel = kernel / kernel.sum()
>>>
>>> f_vert = ndimage.convolve1d(f, kernel, axis=0, mode='constant')
>>> f_horz = ndimage.convolve1d(f, kernel, axis=1, mode='constant')
>>> f_both = ndimage.convolve1d(f_vert, kernel, axis=1, mode='constant')

original image原图

1D kernel applied vertically垂直应用的一维内核

1D kernel applied horizontally水平应用一维内核

1D kernel applied twice一维核垂直应用,然后水平应用

我们可以使用二维外积核一次性达到同样的效果

# create 2D kernel using outer product
>>> kernel2d = np.outer(kernel, kernel)
>>> f_outer = ndimage.convolve(f, kernel2d[..., None], mode='constant')

2D kernel used使用的二维内核

difference从差异图像可以看出,最后两个操作是等效的

关于python - np.outer 如何帮助创建过滤器内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956131/

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