矩形的滤波器(BUPT_rect)。用5乘5和7乘7的核对噪声图像Lena进行过滤,将这些结果与用高斯滤波器得到的结果进行比较。
时间: 2024-03-03 17:52:10 浏览: 165
BUPT_RobotTeam_Libraries-机器人资源
矩形滤波器是一种常见的线性滤波器,可以用于图像降噪。下面我来简单介绍一下使用矩形滤波器对噪声图像Lena进行降噪的过程。
1. 加载图像Lena并加入高斯噪声
我们可以使用Python的OpenCV库来加载图像Lena,并使用cv2.randn()函数向其添加高斯噪声,代码如下:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread('lena.jpg')
# 添加高斯噪声
noise_img = img.copy()
cv2.randn(noise_img, 0, 50) # 均值为0,标准差为50的高斯噪声
noise_img = noise_img.astype(np.int16)
noise_img = cv2.add(img, noise_img)
noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
```
2. 使用矩形滤波器进行降噪
我们可以使用cv2.boxFilter()函数来实现矩形滤波器。这个函数的第一个参数是输入图像,第二个参数是输出图像的深度,第三个参数是滤波核的大小,第四个参数是指定是否使用归一化滤波器,第五个参数是指定是否使用ROI进行滤波。代码如下:
```python
# 使用5x5的矩形滤波器降噪
rect_filter5 = cv2.boxFilter(noise_img, -1, (5, 5), normalize=True)
# 使用7x7的矩形滤波器降噪
rect_filter7 = cv2.boxFilter(noise_img, -1, (7, 7), normalize=True)
```
3. 使用高斯滤波器进行降噪
我们也可以使用cv2.GaussianBlur()函数来实现高斯滤波器。这个函数的第一个参数是输入图像,第二个参数是输出图像的深度,第三个参数是滤波核的大小,第四个参数是指定高斯核的标准差。代码如下:
```python
# 使用5x5的高斯滤波器降噪
gaussian_filter5 = cv2.GaussianBlur(noise_img, (5, 5), 0)
# 使用7x7的高斯滤波器降噪
gaussian_filter7 = cv2.GaussianBlur(noise_img, (7, 7), 0)
```
4. 比较结果
最后我们可以将降噪结果和原图像、高斯滤波器的结果进行比较。代码如下:
```python
# 显示原图像、加噪声的图像和各滤波器的结果
cv2.imshow('Original', img)
cv2.imshow('Noise', noise_img)
cv2.imshow('Rect Filter 5x5', rect_filter5)
cv2.imshow('Rect Filter 7x7', rect_filter7)
cv2.imshow('Gaussian Filter 5x5', gaussian_filter5)
cv2.imshow('Gaussian Filter 7x7', gaussian_filter7)
# 等待按键
cv2.waitKey(0)
```
通过比较可以发现,使用矩形滤波器进行降噪的效果相对于高斯滤波器来说,会有更多的锐化效果,但也容易引入一些伪影。因此在实际应用中,需要根据具体的需求来选择使用哪种滤波器。
阅读全文