Python实现对加噪图像分别进行理想低通滤波器、巴特沃斯低通滤波器、高斯低通滤波器的处理,并进行处理结果的对比显示。(p.s.还可设置不同的截止频率进行对比)现有一名为“NL.png”的图像,处理结果请用中文展示
时间: 2024-12-22 13:24:26 浏览: 17
在Python中,我们可以使用NumPy库来进行图像处理,PIL库用于读取图像,而scipy.signal库则提供了各种滤波器函数,如理想低通滤波器(ideal_lowpass_filter)、巴特沃斯低通滤波器(butterworth_lowpass)、和高斯低通滤波器(gaussian_lowpass)。这里我们假设你已经有一个名为"NL.png"的灰度图像。
首先,我们需要导入所需的库:
```python
import numpy as np
from PIL import Image
from scipy.signal import butter, lfilter, freqz
import matplotlib.pyplot as plt
```
然后加载图像并转换为数组:
```python
img = Image.open('NL.png').convert('L') # 将图像转为灰度
img_array = np.array(img)
```
接下来,我们将创建函数来应用不同类型的低通滤波器:
```python
def apply_low_pass(image, cutoff_freq, filter_type='butterworth', order=5):
if filter_type == 'ideal':
filtered_image = ideal_lowpass(image, cutoff_freq)
elif filter_type == 'butterworth':
b, a = butter(order, cutoff_freq, analog=False)
filtered_image = lfilter(b, a, image)
else:
raise ValueError("Invalid filter type. Choose between 'ideal', 'butterworth', or 'gaussian'.")
return filtered_image
# 示例:理想低通、巴特沃斯低通和高斯低通滤波
cutoff_freqs = [0.1, 0.5, 0.9] # 设置不同的截止频率
filtered_images = [apply_low_pass(img_array, freq) for freq in cutoff_freqs]
```
最后,我们将结果可视化进行对比:
```python
fig, axs = plt.subplots(1, len(filtered_images), figsize=(15, 8))
for i, filt_img in enumerate(filtered_images):
axs[i].imshow(filt_img, cmap='gray')
axs[i].set_title(f"Low-pass filter with cut-off frequency: {cutoff_freqs[i]}")
axs[i].axis('off')
plt.tight_layout()
plt.show()
```
这将显示原始图像以及三种低通滤波器处理后的结果,每张图片下方都有对应的截止频率标签。你可以观察噪声程度如何随滤波器类型和截止频率变化。
阅读全文