python傅里叶变换&滤波

import numpy as np
import skimage
import matplotlib.pyplot as plt
import cv2

# 读取图像
image =np.load('FBP算法实现重建.npy')    

# 二维傅里叶变换
f_image = np.fft.fft2(image)   # 傅里叶变化后的矩阵,元素为复数
# 直流低频部分shift到中间
fshift = np.fft.fftshift(f_image)   # 使用np.abs()计算复数长度(振幅),便于画图显示。

# 掩膜-中心为0-高通滤波
rows,cols = image.shape
mask = np.ones(image.shape)
mask[int(rows/2-190):int(rows/2+190), int(cols/2-190):int(cols/2+190)] = 0
# # 掩膜-中心为1-低通滤波
# rows,cols = image.shape
# mask = np.zeros(image.shape)
# mask[int(rows/2-90):int(rows/2+90), int(cols/2-90):int(cols/2+90)] = 1
# 掩膜运算
fshift_mask = fshift*mask

# 二维傅里叶反变换
f_image_mask = np.fft.ifftshift(fshift_mask)
image_new = np.fft.ifft2(f_image_mask)   # 反变换的结果是复数
image_new = np.abs(image_new)

# 画图:np.log(1+np.abs(fshift)
plt.subplot(2,2,1);plt.imshow(image, cmap='gray')   # 原图
plt.subplot(2,2,2);plt.imshow(np.log(1+np.abs(fshift)), cmap='gray')   # 傅里叶变化 & shift   # np.log(1+灰度) 避免取log(0)的情况。
plt.subplot(2,2,3);plt.imshow(np.log(1+np.abs(fshift_mask)), cmap='gray')   # 掩膜
plt.subplot(2,2,4);plt.imshow(image_new, cmap='gray')   # 滤波处理后的图
plt.show()

python傅里叶变换&滤波_第1张图片

参考来源:
Python下opencv使用笔记(十)(图像频域滤波与傅里叶变换)
python 简单图像处理(15) 图像的傅立叶变换

你可能感兴趣的:(图像处理,python)