gaussianFilter
def gaussianFilter(src, k_size, sigma):
"""
高斯滤波器
:param src: 原始图像
:param k_size: 滤波器的核大小
:param sigma: 标准偏差,方便起见两个方向上相同
:return: 目标图像
"""
h, w= src.shape
# padding,防止图像变小变模糊
pad = k_size // 2 # 整除
dst = np.zeros((h + 2 * pad, w + 2 * pad))
dst[pad:pad + h, pad:pad + w] = src.copy()
# 卷积核
g = np.zeros((k_size, k_size))
for x in range(k_size): # [0,2]
for y in range(k_size):
g[x, y] = np.exp(-((x - pad) ** 2 + (y - pad) ** 2) / (2 * (sigma ** 2)))
g /= (sigma * np.sqrt(2 * np.pi))
g /= g.sum() # 归一化
# 卷积
tmp = dst.copy()
for i in range(h):
for j in range(w):
dst[pad + i, pad + j] = np.sum(g * tmp[i:i + k_size, j:j + k_size])
dst = dst[pad:h + pad, pad:w + pad].astype(np.uint8)
return dst
laplacian
def laplacian(src):
h, w = src.shape
dst = np.zeros((h, w))
# operator = np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]])
operator = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
for i in range(1, h - 1):
for j in range(1, w - 1):
dst[i, j] = abs(np.sum(src[i - 1:i + 2, j - 1:j + 2] * operator))
return np.uint8(dst)
实现效果