生成完整的python代码,要求生成退化图像,运动模糊方向为60度,模糊核大小为15,并添加噪声;通过逆滤波复原图像;设定合适的K值,通过维纳滤波方法较好地复原图像,并在一个窗口内展示退化图像,逆滤波复原图像,维纳滤波复原图像
时间: 2024-11-03 22:17:13 浏览: 34
Matlab.rar_图像退化_运动噪声_退化_退化图像
为了满足您的需求,这里是一个简单的Python代码片段,它使用`PIL`库来处理图像,`numpy`用于数值计算,以及`scipy`库进行滤波操作。请注意,这个示例假设您已经安装了这些库。
```python
from PIL import Image, ImageFilter
import numpy as np
import scipy.signal as signal
from scipy.ndimage import convolve
# 加载原始图像
img_path = 'original_image.jpg' # 替换为实际图片路径
img = Image.open(img_path)
# 退化图像
angle = 60
radius = 15
motion_blur = img.filter(ImageFilter.KernelBlur(radius=radius, angle=angle))
motion_blurred_img = np.array(motion_blur)
# 添加噪声
sigma = 10 # 设置噪声强度
noisy_img = motion_blurred_img + sigma * np.random.normal(size=motion_blurred_img.shape)
# 逆滤波(这里我们简单使用均值滤波作为例子)
mean_filter_size = 3
mean_filtered_img = ndimage.uniform_filter(noisy_img, size=mean_filter_size)
# 维纳滤波
k_value = 0.5 # K值的选择会影响复原效果,可以根据实际需要调整
win_size = 7
wiener_filtered_img = signal.wiener(mean_filtered_img, (win_size, win_size), kaiserord=k_value)
# 将滤波后的图像转换回PIL并显示
Weiner_filtered_img_pil = Image.fromarray(Wiener_filtered_img)
window_titles = ['Original', 'Motion Blurred', 'Noisy', 'Mean Filtered', 'Wiener Filtered']
fig, axs = plt.subplots(2, 3, figsize=(15, 10))
for i, ax in enumerate(axs.flat):
if i < 4:
ax.imshow(window_titles[i] + ' Image', cmap='gray')
ax.axis('off')
else:
ax.imshow(Wiener_filtered_img_pil, cmap='gray')
ax.set_title(window_titles[-1])
plt.show()
```
阅读全文