python - np.outer 如何帮助创建过滤器内核?
问题描述
我正在使用我自己的内核尝试使用 OpenCV的filter2D函数:
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')
我们可以使用 2D 外积核一次性达到同样的效果
# create 2D kernel using outer product
>>> kernel2d = np.outer(kernel, kernel)
>>> f_outer = ndimage.convolve(f, kernel2d[..., None], mode='constant')
推荐阅读
- docker - 使用 GMSA 通过 Docker IIS 进行 Windows 身份验证
- javascript - Js在隐藏/显示tr时单独打印第一行
- erlang - ejabberd 18.06 http:请求错误 failed_connect
- swift - 在程序化 collectionviewCell 中添加约束
- wpf - FileNotFoundException:无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件
- shell - app.shell_context_processor 装饰器不会将该函数注册为 shell 上下文函数
- android - Admob 插页式广告未加载 - Android
- arrays - 从 mongoose find() 查询中提取一个值
- django - Nginx + Django + Gunicorn:502 Bad Gateway 上游过早关闭连接,同时从上游读取响应标头
- php - PayPal 最近的 TLS 1.2 / HTTP 1.1 更新以及何时使用