第八章:直方图和傅里叶变换 1-傅里叶概述

'''
傅里叶变换
我们生活在时间的世界中,早上7:00起来吃早饭,8:00去挤地铁
以时间为参照就是时域分析。
但是在频域中一切都是静止的!

傅里叶变换的作用:
高频:变化剧烈的灰度分量,例如边界
低频:变化缓慢的灰度分量,例如一片大海

滤波:
低通滤波器:只保留低频,会使图像模糊
高通滤波器:只保留高频,会使图像细节增强

opencv中主要就是cv2.dft()和cv2.idft(),输入图像需要先转换成np.float32格式
得到的结果中频率为0的部分会在左上角,通常需要转换到中心位置,可以通过shift变换来实现。
cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)
'''
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('lena.jpg',0)#读取灰度图像
img_float32=np.float32(img)#输入图像先转换成32格式

dft=cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift=np.fft.fftshift(dft)#将低频的值拉到中心

#再次转换一下 使用映射公式
magnitude_spectrum=20*np.log(cv2.magnitude((dft_shift[:,:,0]),dft_shift[:,:,1]))

plt.subplot(1,2,1),plt.imshow(img,cmap='gray')
plt.title('Imput Image'),plt.xticks([]),plt.yticks([])
plt.subplot(1,2,2),plt.imshow(magnitude_spectrum,cmap='gray')
plt.title(' Magnitude Spectrum'),plt.xticks([]),plt.yticks([])
plt.show()

上一篇:Pytorch中Tensor和tensor的区别


下一篇:使用numba对numpy加速遇到的坑