分别用巴特沃斯高通滤波器对带有高斯噪声的coins.png图像进行滤波,分别使滤波器阶数为2 和30进行滤波。 画出滤波器并显示;显示原图像,带有高斯噪声的图像,高通滤波后的图像。代码
时间: 2024-02-27 11:52:53 浏览: 56
好的,以下是一个Python代码示例,使用了scikit-image库和numpy库。请确保已经安装了这些库。
```python
import numpy as np
import matplotlib.pyplot as plt
from skimage import io, filters
# 读入coins.png图像
img = io.imread('coins.png')
# 添加高斯噪声
img_noisy = img + 0.1 * np.random.normal(size=img.shape)
# 定义巴特沃斯高通滤波器函数
def butter_highpass(cutoff, order, size):
radius = size / 2
x, y = np.ogrid[-radius:size - radius, -radius:size - radius]
lowpass = 1 / (1 + ((x * x + y * y) / cutoff ** 2) ** order)
highpass = 1 - lowpass
return highpass
# 设计巴特沃斯高通滤波器,分别计算阶数为2和30的滤波器系数
cutoff = 10 # 我们这里将截止频率设置为10
order2 = 2
order30 = 30
size = 128
butter_highpass2 = butter_highpass(cutoff, order2, size)
butter_highpass30 = butter_highpass(cutoff, order30, size)
# 将两个滤波器应用于带有高斯噪声的图像
img_filtered2 = filters.convolve(img_noisy, butter_highpass2, mode='reflect')
img_filtered30 = filters.convolve(img_noisy, butter_highpass30, mode='reflect')
# 分别展示原图像、带有高斯噪声的图像以及两次高通滤波后的图像
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))
ax = axes.ravel()
ax[0].imshow(img, cmap=plt.cm.gray)
ax[0].set_title("Original")
ax[1].imshow(img_noisy, cmap=plt.cm.gray)
ax[1].set_title("Noisy")
ax[2].imshow(img_filtered2, cmap=plt.cm.gray)
ax[2].set_title("Highpass, Order 2")
ax[3].imshow(img_filtered30, cmap=plt.cm.gray)
ax[3].set_title("Highpass, Order 30")
for a in ax:
a.axis('off')
plt.tight_layout()
plt.show()
```
此代码将会读入`coins.png`图像,添加高斯噪声,并使用两个不同阶数的巴特沃斯高通滤波器进行滤波。最后,将原图像、带有高斯噪声的图像和两次高通滤波后的图像绘制在一个4张子图的画布上进行展示。注意,这里的高通滤波器只是一个简单的示例,实际应用中可能需要更加复杂的滤波器设计。