我正在尝试使用不同的内核进行图像处理。但是我找不到任何支持三角滤波器的库,所以我决定自己做。我参考了用于制作高斯内核的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]]

10-07 15:01