用python对一副灰度图像girl设计不同的平滑滤方法(包括空域滤波和频域滤波)
时间: 2024-12-13 07:15:09 浏览: 4
在Python中,我们可以使用PIL(Pillow库)处理灰度图像,并结合numpy进行数学运算。这里我会简单介绍如何用两种常见的滤波方法——空域滤波(如均值滤波、高斯滤波)和频域滤波(如傅立叶变换+低通滤波再逆变换)。
**空域滤波:**
1. **均值滤波**:将每个像素点周围的像素值取平均作为新的像素值。例如:
```python
from PIL import Image
import numpy as np
# 加载图像
img = Image.open('girl.jpg').convert('L')
pixels = np.array(img)
# 均值滤波
kernel_size = 5 # 可调整大小
filtered_img = ndimage.uniform_filter(pixels, size=kernel_size)
new_img = Image.fromarray(filtered_img, 'L')
new_img.save('mean_filtered_girl.jpg')
```
2. **高斯滤波**:使用高斯核函数进行平滑,它会更关注像素之间的空间相关性:
```python
from scipy.ndimage import gaussian_filter
gaussian_kernel = gaussian_filter(ones((kernel_size, kernel_size)), sigma=1) / (kernel_size * kernel_size)
filtered_img = signal.convolve2d(pixels, gaussian_kernel, mode='same')
new_img.save('gaussian_filtered_girl.jpg')
```
**频域滤波(傅立叶变换):**
首先将图像转换到频域,应用低通滤波,然后逆变换回空间域。常用的库有scipy的`fftconvolve`函数:
```python
from scipy.fftpack import fft, ifft, fftshift
# 对图像进行DFT
frequencies = fft(pixels)
# 设定低通截止频率,比如只保留低于原尺寸一半的频率
cutoff = img.shape[0] // 2
filtered_frequencies = frequencies[:cutoff, :cutoff]
# 反向变换回图像
filtered_img = abs(ifft(fftshift(filtered_frequencies)))
new_img = Image.fromarray(np.uint8(filtered_img), 'L')
new_img.save('fourier_filtered_girl.jpg')
```
阅读全文