1 利用傅里叶变换高通滤波
import numpy as np
import cv2
from matplotlib import pyplot as plt
from skimage.draw import disk
def fft_in_np(img):
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
f = np.fft.fft2(img) #灰度图像进行傅里叶变换
fshift = np.fft.fftshift(f) #把0频信息放到中心
magnitude_spectrum = 20 * np.log(np.abs(fshift)) #制作频谱
rows, cols = img.shape
row_half, col_half = rows // 2, cols // 2
mask = np.ones((rows, cols), dtype=np.uint8) #创建一个mask
rr, cc = disk((row_half, col_half), 10)
mask[rr, cc] = 0 #把mask中心半径为10的圆盘值成0
fshift = fshift * mask #把频域信息的低频mask为0
f_ishift = np.fft.ifftshift(fshift) #把0频信息恢复位置
img_back = np.fft.ifft2(f_ishift) #反傅里叶变换
img_back = np.abs(img_back)
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
plt.title('img_back'), plt.xticks([]), plt.yticks([])
plt.show()
img = cv2.imread('dqiocaoxfwu31.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fft_in_np(img)
效果如下:
2 利用傅里叶变换锐化增强图像
import numpy as np
import cv2
from matplotlib import pyplot as plt
from skimage.draw import disk
def fft_in_np(img):
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
rows, cols = img.shape
row_half, col_half = rows // 2, cols // 2
mask = np.ones((rows, cols))
mask = mask * 1.5
rr, cc = disk((row_half, col_half), 10)
mask[rr, cc] = 1
fshift = fshift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back, cmap = 'gray')
plt.title('img_back'), plt.xticks([]), plt.yticks([])
plt.show()
img = cv2.imread('dqiocaoxfwu31.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
fft_in_np(img)
效果如下: