高斯滤波器实现
时间: 2023-08-01 08:14:13 浏览: 89
高斯滤波器是一种常用的线性平滑滤波器,通常用于图像处理中的去噪处理。其原理是利用高斯函数对图像进行卷积,去除图像中的高频噪声,使图像变得更加平滑。
高斯函数的一维形式为:
$G(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{x^2}{2\sigma^2}}$
其中,$\sigma$为高斯函数的标准差,$x$为离散点的位置。
高斯函数的二维形式为:
$G(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}$
其中,$\sigma$为高斯函数的标准差,$(x,y)$为离散点的位置。
高斯滤波器的实现步骤如下:
1. 构造二维高斯卷积核。
2. 对图像进行卷积操作,可以使用卷积运算或者FFT加速的方式。
3. 对卷积后的图像进行归一化处理,使得像素值在0-255之间。
以下是一个使用Python实现高斯滤波器的示例代码:
```python
import cv2
import numpy as np
def gaussian_kernel(size, sigma):
kernel = np.zeros((size, size))
center = size // 2
for i in range(size):
for j in range(size):
x, y = i - center, j - center
kernel[i, j] = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2))
return kernel / (2 * np.pi * sigma ** 2)
def gaussian_filter(image, kernel_size, sigma):
kernel = gaussian_kernel(kernel_size, sigma)
height, width = image.shape
center = kernel_size // 2
filtered_image = np.zeros((height, width))
for i in range(center, height - center):
for j in range(center, width - center):
patch = image[i - center : i + center + 1, j - center : j + center + 1]
filtered_image[i, j] = np.sum(patch * kernel)
filtered_image = (filtered_image / np.max(filtered_image) * 255).astype(np.uint8)
return filtered_image
image = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
filtered_image = gaussian_filter(image, 5, 1.0)
cv2.imwrite('lena_gaussian.jpg', filtered_image)
```
其中,`gaussian_kernel`函数用于生成高斯卷积核,`gaussian_filter`函数用于对图像进行高斯滤波处理。在示例代码中,使用了numpy库中的向量运算,使得代码更加简洁高效。
阅读全文