参考视频:1 傅里叶变换原理_哔哩哔哩_bilibili
傅里叶变换是干嘛的:
傅里叶得到低频、高频信息,针对低频、高频处理能够实现不同的目的。
傅里叶过程是可逆的,图像经过傅里叶变换、逆傅里叶变换后,能够恢复到原始图像
在频域对图像进行处理,在频域的处理会反映在逆变换图像上
原理
傅里叶支持值域和频域互推
振幅
相位:开始的时间
numpy实现傅里叶变换
numpy.fft.fft2 傅里叶变换
得到频谱
numpy.fft.fftshift 将零频率分量移动到频谱中心
20*np.log(np.abs(fshift)) 设置频谱的范围
比如图像是0-255的范围,这样就可以约束频谱到可视的范围
numpy逆傅里叶变换
numpy.fft.ifft2 逆傅里叶变换
返回一个复数数组(complex ndarray)
numpy.fft.ifftshift 逆移动
np.abs(逆傅里叶变换结果)
通过数组获得可以图像显示的值
滤波
概念
空域→频域→空域
低频对应图像内变化缓慢的灰度分量。例如,在一幅大草原的图像中,低频对应着广袤的颜色趋于一致的草原。
高频对应图像内变化越来越快的灰度分量,是由灰度的尖锐过渡造成的。例如,在一幅大草原的图像中,其中狮子的边缘等信息,
接受(通过)或拒绝一定频率的分量
通过低频的滤波器成为低通滤波器
通过高频的滤波器成为高通滤波器
作用:
修改傅里叶变换以达到特殊目的,然后计算IDFT返回到图像域。
特殊目的:图像增强、图像去噪、边缘检测、特征提取、压缩、加密等。
高频
思路:调整高低频率主要是设置图像中的选取的位置,然后把不需要的地方换成黑色(0)
低频
OpenCV实现傅里叶变换
cv2.dft(原始图像,转换标识)
返回结果:
双通道:1.结果的实数部分,2.结果的虚数部分
原始图像要先转换成np.float32
转换标识:cv2.DFT_COMPLEX_OUTPUT输出复数阵列
cv2.magnitude(参数1,参数2)计算幅值
参数1∶浮点型X坐标值,也就是实部
参数2: 浮点型Y坐标值,也就是虚部
cv2.idft(原始数据) 逆傅里叶变换
返回结果:取决于原始数据的类型和大小
原始数据:实数或者复数均可
numpy.fft.ifftshift
ffshift函数的逆函数