我正在尝试使用不同的内核进行图像处理。但是我找不到任何支持三角滤波器的库,所以我决定自己做。我参考了用于制作高斯内核的python代码,并将其编写为:
def triangle_kernel(kerlen):
lim = kerlen//2 + (kerlen % 2)/2
x = np.linspace(-lim, lim, kerlen)
kernel1d = 1 - np.abs(x)
kernel2d = np.outer(kernel1d, kernel1d)
print(kernel2d.shape)
return kernel2d
它是否正确?我尝试使用此内核对图像进行卷积处理,但输出严重失真。我在做什么错?如何创建内核?
最佳答案
您可以这样实现:
import numpy as np
def triangle_kernel(kerlen):
r = np.arange(kerlen)
kernel1d = (kerlen + 1 - np.abs(r - r[::-1])) / 2
kernel2d = np.outer(kernel1d, kernel1d)
kernel2d /= kernel2d.sum()
return kernel2d
print(triangle_kernel(4))
# [[0.02777778 0.05555556 0.05555556 0.02777778]
# [0.05555556 0.11111111 0.11111111 0.05555556]
# [0.05555556 0.11111111 0.11111111 0.05555556]
# [0.02777778 0.05555556 0.05555556 0.02777778]]
print(triangle_kernel(5))
# [[0.01234568 0.02469136 0.03703704 0.02469136 0.01234568]
# [0.02469136 0.04938272 0.07407407 0.04938272 0.02469136]
# [0.03703704 0.07407407 0.11111111 0.07407407 0.03703704]
# [0.02469136 0.04938272 0.07407407 0.04938272 0.02469136]
# [0.01234568 0.02469136 0.03703704 0.02469136 0.01234568]]