用pvthon编写程序利用h1模板对高 斯噪声进行平滑,分别对比模板大 1\3*3, 5*5, 7*7的效果
时间: 2024-05-02 15:21:31 浏览: 61
以下是使用Python编写的程序,用于对高斯噪声进行平滑并比较不同大小的模板效果:
```python
import cv2
import numpy as np
# 读取图像并添加高斯噪声
img = cv2.imread('lena.jpg')
noise = np.random.normal(0, 50, img.shape)
img_noisy = np.clip(img.astype(np.float32) + noise, 0, 255).astype(np.uint8)
# 定义平滑函数
def smooth(img, kernel_size):
# 构建平滑模板
kernel = cv2.getGaussianKernel(kernel_size, 0)
kernel = np.outer(kernel, kernel)
kernel /= np.sum(kernel)
# 应用平滑模板
result = np.zeros_like(img, dtype=np.float32)
for c in range(3):
result[:, :, c] = cv2.filter2D(img[:, :, c], -1, kernel)
return result.astype(np.uint8)
# 平滑并显示图像
img_smooth_3 = smooth(img_noisy, 3)
img_smooth_5 = smooth(img_noisy, 5)
img_smooth_7 = smooth(img_noisy, 7)
cv2.imshow('Original', img)
cv2.imshow('Noisy', img_noisy)
cv2.imshow('Smooth 3x3', img_smooth_3)
cv2.imshow('Smooth 5x5', img_smooth_5)
cv2.imshow('Smooth 7x7', img_smooth_7)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的程序中,我们首先读取了一张图像,并添加了高斯噪声。然后,我们定义了一个名为“smooth”的函数,用于对图像进行平滑。该函数接受两个参数:输入图像和模板大小。它首先创建一个高斯模板,然后使用cv2.filter2D函数将其应用于输入图像的每个通道。最后,函数返回平滑后的图像。
我们使用三个不同大小的模板(3x3、5x5和7x7)对添加了高斯噪声的图像进行平滑,并将原始图像、带噪声的图像和平滑后的图像显示在屏幕上,以便比较它们之间的差异。您可以根据需要调整高斯噪声的标准差和模板大小来测试程序的效果。
阅读全文