📅  最后修改于: 2023-12-03 15:19:12.583000             🧑  作者: Mango
高斯滤波器是一种常用的图像处理滤波器,它能够去除图像中的噪声并平滑图像。它是基于高斯函数的离散卷积运算,使用一个高斯核对图像进行卷积,从而实现图像平滑的目的。
在 Python 中,使用 NumPy 库可以方便地实现高斯滤波器。
以下代码展示了如何使用 NumPy 实现高斯滤波器。
import cv2
import numpy as np
def gaussian_kernel(size, sigma=1.0):
"""
创建高斯核函数
:param size: 核的大小
:param sigma: 高斯分布的标准差
:return: 卷积核
"""
# 计算高斯分布的值
gaussian = np.zeros((size, size))
center = size // 2
for i in range(size):
for j in range(size):
gaussian[i][j] = np.exp(-0.5 * ((i - center) ** 2 + (j - center) ** 2) / sigma ** 2)
# 归一化
gaussian /= np.sum(gaussian)
return gaussian
def gaussian_filter(image, kernel_size=3, sigma=1.0):
"""
对图像进行高斯滤波
:param image: 输入图像
:param kernel_size: 核的大小
:param sigma: 高斯分布的标准差
:return: 滤波后的图像
"""
# 创建高斯核函数
kernel = gaussian_kernel(kernel_size, sigma)
# 对图像进行卷积
filtered_image = cv2.filter2D(image, -1, kernel)
return filtered_image
以下代码展示了如何使用上述的高斯滤波器函数。
import cv2
import matplotlib.pyplot as plt
from gaussian_filter import gaussian_filter
# 读取图像
image = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
# 高斯滤波
filtered_image = gaussian_filter(image)
# 显示原图和滤波后的图像
plt.subplot(121), plt.imshow(image, cmap='gray'), plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(filtered_image, cmap='gray'), plt.title('Filtered Image')
plt.xticks([]), plt.yticks([])
plt.show()