python在不使用opencv的前提下读入彩色图像并实现快速傅里叶变换和滤波处理
时间: 2023-06-13 10:04:19 浏览: 117
python 实现图像快速替换某种颜色
5星 · 资源好评率100%
可以使用Python中的Numpy库来读入彩色图像,并且实现快速傅里叶变换和滤波处理。下面是一个示例程序:
```python
import numpy as np
from PIL import Image
# 读入彩色图像
img = Image.open('image.jpg')
img_array = np.array(img)
# 将彩色图像转为灰度图像
gray_img_array = np.dot(img_array[...,:3], [0.299, 0.587, 0.114])
# 对灰度图像进行快速傅里叶变换
f = np.fft.fft2(gray_img_array)
# 将低频部分移到图像中心
fshift = np.fft.fftshift(f)
# 构建高斯滤波器
rows, cols = gray_img_array.shape
crow, ccol = int(rows/2), int(cols/2)
D = 30 # 设置滤波器半径
H = np.zeros((rows, cols))
for i in range(rows):
for j in range(cols):
dist = np.sqrt((i-crow)**2 + (j-ccol)**2)
H[i, j] = np.exp(-dist**2 / (2*D**2))
# 将滤波器应用于频域图像
filtered_fshift = H * fshift
# 将高频部分移到图像边缘
filtered_f = np.fft.ifftshift(filtered_fshift)
# 对滤波后的频域图像进行反傅里叶变换
filtered_img = np.fft.ifft2(filtered_f)
# 取实部并进行灰度值缩放
filtered_img_real = np.abs(filtered_img)
filtered_img_scaled = filtered_img_real / np.max(filtered_img_real) * 255
filtered_img_uint8 = np.uint8(filtered_img_scaled)
# 显示滤波后的图像
filtered_img_pil = Image.fromarray(filtered_img_uint8)
filtered_img_pil.show()
```
这个程序首先使用PIL库读入彩色图像,并将其转为灰度图像。然后对灰度图像进行快速傅里叶变换,并将低频部分移到图像中心。接着构建一个高斯滤波器,并将其应用于频域图像。将高频部分移到图像边缘,并对滤波后的频域图像进行反傅里叶变换得到滤波后的图像。最后将实部取出并进行灰度值缩放,显示出滤波后的图像。注意,这里的滤波器是高斯滤波器,可以根据需要调整滤波器大小和形状。
阅读全文