基于傅里叶变换的边缘检测

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread("./imgs/sy3.png",0)
f = np.fft.fft2(img)  #傅里叶变换得到图像的频率
fshift = np.fft.fftshift(f)#fftshift将结果沿x,y两个方向平移N/2到中心点位置(频谱中心化)
magnitude_spectrumf = 50*np.log(np.abs(f))#构建振幅频谱(无中心化)
magnitude_spectrum = 50*np.log(np.abs(fshift))#构建振幅频谱中心化
# plt.figure(figsize=(10,8))
# plt.subplot(131);plt.imshow(img,cmap='gray');plt.title('original');plt.axis('off')
# plt.subplot(132);plt.imshow(magnitude_spectrum,cmap='gray');plt.title('magnitude_spectrum');plt.axis('off')
# plt.subplot(133);plt.imshow(magnitude_spectrumf,cmap='gray');plt.title('magnitude_spectrumf');plt.axis('off')
# plt.show()
rows,cols = img.shape
crow,ccol = rows//2,cols//2
fshift[crow-20:crow+30, ccol-20:ccol+30] = 0 #60*60的矩形窗口  高通滤波(低频去除)
f_ishift = np.fft.ifftshift(fshift)#频谱去中心化
img_back = np.fft.ifft2(f_ishift)#傅里叶逆变换将频率变回图像
# 取绝对值
img_back = np.abs(img_back)
plt.subplot(121);plt.imshow(img,cmap='gray');plt.title('original');plt.axis('off')
plt.subplot(122);plt.imshow(img_back,cmap='gray');plt.title('img_back');plt.axis('off')
plt.show()

结果:

猜你喜欢

转载自blog.csdn.net/hu_666666/article/details/128252723